【问题标题】:How can I create dynamic variable names without using a dictionary?如何在不使用字典的情况下创建动态变量名称?
【发布时间】:2018-12-30 01:30:13
【问题描述】:

我正在将 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

【问题讨论】:

    标签: excel vba aspen


    【解决方案1】:

    是的,对于类,您可以使用CallByName 函数。见这里:CallByName

    返回一个类属性,例如:

    Dim MyCollection As Collection: Set MyCollection = New Collection
    MyCollection.Add "A"
    MyCollection.Add "B"
    Debug.Print CallByName(MyCollection, "Count", VbMethod)
    

    如果您使用的是在标准模块中编写的代码,请查看Application.Run

    【讨论】:

    • 天啊!!就在今天,我没有任何希望找到解决办法。谢谢。这正是我想要的。
    • 不客气。可以肯定的是,这是一个鲜为人知的功能,另一个小技巧是您可以在 VBA IDE 中键入 VBA. 并查看标准 VBA 库中包含的内容。这是打包的,但很容易错过。
    猜你喜欢
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-14
    • 1970-01-01
    • 2013-06-23
    相关资源
    最近更新 更多