将 For Each 中的 Variant 转换为 range

Convert Variant in For Each to range

有什么方法可以将 Variant 变量转换为 VBA 中的 Range 变量吗?

让我解释一下为什么我需要这样做。 我用范围作为键填充字典,新值作为项目:

        dChanges.add .cells(rowNewTask, rngTaskId.column), TaskId
        dChanges.add .cells(rowNewTask, rngNumSection.column), numSection
        dChanges.add .cells(rowNewTask, rngSection.column), Section
        dChanges.add .cells(rowNewTask, rngMajorTask.column), majorTask
        dChanges.add .cells(rowNewTask, rngSubTask.column), subTask
        dChanges.add .cells(rowNewTask, rngUnitType.column), unitType

然后我使用一些函数对每个项目应用更改:

        For Each RngI In dChanges
            RngI.value = dChanges(RngI)
            highlightCell RngI
        Next

RngI 需要是 Variant 类型,这样我才能在 For 循环中使用它,但是 highlightCell RngI 要求 RngI 是 Range。

Dim RngI As Range 适用于包含范围的字典。

示例代码:

Sub foobar()
    Dim d As Scripting.Dictionary
    Set d = New Scripting.Dictionary
    
    d.Add Sheet1.Range("A1"), "foo"
    d.Add Sheet1.Range("A2"), "bar"
    
    Dim RngI As Range
    For Each RngI In d
        RngI.Value = d(RngI)
    Next
End Sub

这会将“foo”和“bar”写入单元格 A1 和 A2。