从当前范围访问变量及其名称

时间:2017-04-06 13:32:30

标签: vba

是否可以:

  1. 访问VBA运行时环境中所有变量的列表?
  2. 使用VBA访问变量的名称?
  3. 示例:

    function v2S(str as string) as string
        For each variable in Variables
            dim I as integer
            for I = 1 to 10
                v2S = replace(v2S,"%" & variable.name & "%", variable.value)
            next
        next
    end function
    

    示例用例:

    Dim skyColor as string
    skyColor = "green"
    Debug.Print v2S("The sky is %skyColor% today!")
    

    有一个应用程序我可以通过com对象发送命令,我希望按照以下方式执行:

    Dim i a integer
    for i = 1 to MI.Eval("numtables()")
        MI = GetObject(,"MapInfo.Application.x64")
        debug.print MI.Eval(v2S("tableinfo(%i%,1)")) ' Print name of table
    next
    

    以上看起来比以前更清洁:

    Dim i a integer
    for i = 1 to MI.Eval("numtables()")
        MI = GetObject(,"MapInfo.Application.x64")
        debug.print MI.Eval(v2S("tableinfo(" & i & ",1)")) ' Print name of table
    next
    

    但当然,如果可能的话,我会希望它是一般的,可能很难...

1 个答案:

答案 0 :(得分:0)

对于我自己的用例this is pretty good

但它仍然不具备可读性。这是另一种选择。它更具可读性,但也更混乱:

Sub Main()
    Dim Vars as object, myString as string
    set Vars = CreateObject("scripting.Dictionary")
    Vars.add "Var1","Val1"
    Vars.add "Var2","Val2"
    '...
    myString = r("Var1: #{Var1} and Var2: #{Var2}", Vars)
End Sub

function r(byval s as string, byval o as object) as string
    for each key in o.keys
        s = replace(s,"#{" & key & "}",o.item(key))
    next
    r = s
end function

我希望在VBA中默认存在字符串插值功能。