我如何将数组中的值作为变量引用?

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 

以上是关于我如何将数组中的值作为变量引用?的主要内容,如果未能解决你的问题,请参考以下文章

如何访问json中的数组元素?

如何创建片段以重复变量编号中的代码行

Swift - 将变量集作为函数的数组[关闭]

Plotly 雷达图 - 变量引用作为值

值的引用传递数组作为函数参数

PHP 中的数组是作为值复制还是作为对新变量的引用,以及何时传递给函数?