我正在创建要在Personal Communications 5.8 https://www.ibm.com/support/knowledgecenter/en/SSEQ5Y_5.9.0/com.ibm.pcomm.doc/readme/readV58.html
中使用的宏宏将在各种“区域”上运行,这些区域在屏幕上具有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
答案 0 :(得分:3)
请勿即时构造变量名称。 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