我如何将数组中的值作为变量引用?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我如何将数组中的值作为变量引用?相关的知识,希望对你有一定的参考价值。
例如,如果我有数组:
DeviceArray = Array("Sw","Cap","Gen","Reg","Tr","Br")
并且我想将所有内容初始化为一个值,例如0,这等效于为此编写一个for循环,以便将数组内的值视为变量名,以便我可以间接修改变量值:
For i = 0 to ubound(DeviceArray)
DeviceArray(i) = 0
Next i
这样,在运行代码后,变量:Sw,Cap,Gen,Reg,Tr和Br都应设置为0。
将DeviceArray中的每个元素都更改为0,并且不再存储最初放置的字符串。
因此DeviceArray应该保持不变,并且仍然存储值("Sw","Cap","Gen","Reg","Tr","Br")
希望可以清楚地说明我要做什么,我正在尝试这样做,所以我不必键入:
Sw = 0
Cap = 0
Gen = 0
Reg = 0
Tr = 0
Br = 0
因为存在一长串变量,需要在整个宏中将它们不断地初始化为不同的值。
例如,DeviceArray(0) = Sw
,但是我希望VBA宏将DeviceArray(0)
识别为变量Sw
的名称,这样我就可以修改变量Sw
的值而无需直接调用它。
答案
听起来您正在寻找引用类型而不是值类型。为此,您将需要VBA中的一个对象。
例如,创建一个名为Device
的类模块。简单地说,您可以将Public value
作为类中的唯一代码。
'Class Device
Public value
现在,您可以按名称引用对象并传递这些引用,例如如您的示例所示,将它们放入Array
。
'Within a normal module
Public Sub test()
Dim Sw As New Device
Dim Cap As New Device
Dim Gen As New Device
Dim Reg As New Device
Dim Tr As New Device
Dim Br As New Device
DeviceArray = Array(Sw, Cap, Gen, Reg, Tr, Br)
For i = LBound(DeviceArray) To UBound(DeviceArray)
DeviceArray(i).value = 42
Next i
Debug.Print Gen.value
End Sub
'Output is 42
或者,根据您的需要,哈希映射也可以解决问题,在这种情况下,您将不声明变量,而是引用映射中的变量条目。
Public Sub test2()
Dim Devices As Object, DeviceArray
Set Devices = CreateObject("Scripting.Dictionary")
DeviceArray = Array("Sw", "Cap", "Gen", "Reg", "Tr", "Br")
For i = 0 To UBound(DeviceArray)
Devices(DeviceArray(i)) = 0
Next i
Debug.Print "Gen init to ", Devices("Gen")
Devices("Gen") = 42
Debug.Print "Gen is now ", Devices("Gen")
For i = 0 To UBound(DeviceArray)
Devices(DeviceArray(i)) = 0
Next i
Debug.Print "Gen reset to ", Devices("Gen")
End Sub
'Gen init to 0
'Gen is now 42
'Gen reset to 0
以上是关于我如何将数组中的值作为变量引用?的主要内容,如果未能解决你的问题,请参考以下文章