我想基于使用结构化引用的同一表中另一列的值来更改表的列中的值。到目前为止,我有类似的东西:
Sub Test
For Each cell In Worksheets("FNM_DB").Range("DB_SS[Resource_Loc_Type]")
If cell.Value = "TH" Then
Worksheets("FNM_DB").Range("DB_SS[Resource]") = Worksheets("FNM_DB").Range("DB_SS[SOURCE_AND_SINK_NAMES]")
End If
Next cell
End Sub
我知道如果没有结构化引用,我可以做到这一点,但我希望代码更具可读性。有没有办法循环所有的值?我知道@指的是一个特定的行,但我不知道如何在这个实例中使用它。
答案 0 :(得分:2)
以上陈述
@符号引用当前行,但该语法仅适用于工作表单元格,而不适用于VBA。
false 。
有效:
[tblActualsWithFacts[@1c]].Select
这些工作:
Range("tblActualsWithFacts[@1c]").Select
For i = 1 to 12
Range("tblActualsWithFacts[" & i & " c]").Select
Next i
然而,上述技术的组合,即连接使用“@”的结构化参考不起作用,因此 NOT 工作
For i = 1 to 12
Range("tblActualsWithFacts[@" & i & " c]").Select
Next i
答案 1 :(得分:0)
虽然可以在VBA中使用结构化引用,但寻址当前行是不同的。 @符号引用当前行,但该语法仅适用于工作表单元格,而不适用于VBA。
如果您担心可读性,我不确定长语法是否有用。我的建议是创建表示表列名与当前列的偏移量的变量。像这样:
Sub test()
Dim Height As Integer, Width As Integer, Result As Integer
Result = 3
Height = 1
Width = 2
For Each cel In Worksheets("Sheet1").Range("SizingTable[Colour]")
If cel.Value = "red" Then
cel.Offset(0, Result) = cel.Offset(0, Height) * cel.Offset(0, Width)
End If
Next cel
End Sub