如何在不使用字典的情况下创建动态变量名?
How can I create dynamic variable names without using a dictionary?
我正在将 Excel 与 Aspen Hysys 链接,这样我就可以从第二个中导入数据。 Hysys 有一个很大的层次结构,包含三个对象,包括 Stream 对象。 Stream 对象包含 Temperature、VaporFraction 等变量,我通过对象语法访问它们,如下所示:
Dim hyApp As HYSYS.Application
Dim hyCase As HYSYS.SimulationCase
Dim hyStream As HYSYS.Streams
Dim temperature As Double
Set hyApp = CreateObject("HYSYS.Application")
Set hyCase = hyApp.ActiveDocument
Set hyStream = hyCase.Flowsheet.MaterialStreams.Item(0)
temperature = hyStream.TemperatureValue
现在,如果我需要 VaporFraction
,我需要执行以下操作:
Dim vaporFraction As Double
vaporFraction = hyStream.VaporFractionValue
但是,如果我需要其他属性怎么办?或者需要 100 个属性?
有没有办法将字符串(存储在单元格中)转换为变量名。我理解使用字典的概念。但是这样的话,就不行了。
我期望的是这样的:
properties = ("Temperature", "VaporFraction")
For Each property in properties
createVaribleName(property + "Value")
Next property
是的,对于 类 您可以使用 CallByName
函数。看这里:CallByName
返回 class 属性,示例:
Dim MyCollection As Collection: Set MyCollection = New Collection
MyCollection.Add "A"
MyCollection.Add "B"
Debug.Print CallByName(MyCollection, "Count", VbMethod)
如果您正在使用在标准模块中编写的代码,请查看 Application.Run
。
我正在将 Excel 与 Aspen Hysys 链接,这样我就可以从第二个中导入数据。 Hysys 有一个很大的层次结构,包含三个对象,包括 Stream 对象。 Stream 对象包含 Temperature、VaporFraction 等变量,我通过对象语法访问它们,如下所示:
Dim hyApp As HYSYS.Application
Dim hyCase As HYSYS.SimulationCase
Dim hyStream As HYSYS.Streams
Dim temperature As Double
Set hyApp = CreateObject("HYSYS.Application")
Set hyCase = hyApp.ActiveDocument
Set hyStream = hyCase.Flowsheet.MaterialStreams.Item(0)
temperature = hyStream.TemperatureValue
现在,如果我需要 VaporFraction
,我需要执行以下操作:
Dim vaporFraction As Double
vaporFraction = hyStream.VaporFractionValue
但是,如果我需要其他属性怎么办?或者需要 100 个属性?
有没有办法将字符串(存储在单元格中)转换为变量名。我理解使用字典的概念。但是这样的话,就不行了。
我期望的是这样的:
properties = ("Temperature", "VaporFraction")
For Each property in properties
createVaribleName(property + "Value")
Next property
是的,对于 类 您可以使用 CallByName
函数。看这里:CallByName
返回 class 属性,示例:
Dim MyCollection As Collection: Set MyCollection = New Collection
MyCollection.Add "A"
MyCollection.Add "B"
Debug.Print CallByName(MyCollection, "Count", VbMethod)
如果您正在使用在标准模块中编写的代码,请查看 Application.Run
。