在 vbScript 中调用一个生成的变量名

Call a generated variable name in vbScript

我正在创建一个在 Personal Communications 5.8 中使用的宏 https://www.ibm.com/support/knowledgecenter/en/SSEQ5Y_5.9.0/com.ibm.pcomm.doc/readme/readV58.html

宏将在各种 'regions' 上 运行,它们在屏幕上有 4 个字符的文本标识符。例如TRND 或 TRNI。我有七个这样的区域。

在我的宏中,某些步骤会根据该区域使用略有不同的值。所以我的阵列可能看起来像这样;

screenTRND = Array ("One", "Two", "Three")
screenTRNI = Array ("Apples", "Bananas", "Oranges")

而不是在整个宏中构建七个不同的 'If' 语句,有没有人知道调用单个 'If' 语句的方法,该方法将根据识别的区域进行调整?

例如,有一个 'If' 语句,类似;

If screen & region (0) = "One" Then MsgBox "Success"

因此,如果该区域是 TRND,则一切都很好。但如果该区域是 TRNI,则测试给出错误结果。

当然,在上面,数组值只是在 'TRND' 中查找数组值而不是在查找 'screenTRND' (以及该语句的其他问题,但那些不'添加到我的查询或从我的查询中删除)。

我发现了以下问题,我觉得它为我指明了正确的方向,但我一直无法让它发挥作用。

Define a new variable by concatenation of two other variable names in VBS

不要 即时构造变量名。 VBScript 无法真正处理这个问题,即使可以,它仍然是一种不好的做法。

使用适当的数据结构来处理您的数据,在本例中为字典:

Set screen = CreateObject("Scripting.Dictionary")
screen.Add "TRND", Array("One", "Two", "Three")
screen.Add "TRNI", Array("Apples", "Bananas", "Oranges")

那么你可以这样做:

If screen(region)(0) = "One" Then MsgBox "Success"

或者您可以首先检查该区域是否实际定义:

If screen.Exist(region) Then
    WScript.Echo "Region " & region & " exists."
Else
    WScript.Echo "Region " & region & " does not exist."
End If