Variables 在vbScript中调用生成的变量名

Variables 在vbScript中调用生成的变量名,variables,vbscript,ibm-midrange,Variables,Vbscript,Ibm Midrange,我正在创建一个宏,用于个人通信5.8 宏将在各种“区域”上运行,这些区域在屏幕上有一个4个字符的文本标识符。e、 g.TRND或TRNI。我有七个这样的区域 在我的整个宏中,某些步骤将根据该区域使用略有不同的值。所以我的数组可能看起来像这样 screenTRND = Array ("One", "Two", "Three") screenTRNI = Array ("Apples", "Bananas", "Oranges") 除了在整个宏中构建七个不同的“If”语句外,有人知道调用单个“If

我正在创建一个宏,用于个人通信5.8

宏将在各种“区域”上运行,这些区域在屏幕上有一个4个字符的文本标识符。e、 g.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”(以及该语句的其他问题,但这些问题不会添加到我的查询中或从查询中删除)

我发现了下面的问题,我觉得它给了我正确的方向,但我一直没能让它起作用


不要动态构造变量名。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

不要动态构造变量名。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

非常感谢。我取了您的前几行(Set和两个screen.Add行),然后在后面加上“msgboxscreen(region)(0)”,我想我会看到文本“one”。相反,我得到了一个不匹配[未定义]错误。我是否遗漏了一些明显的信息?@Russ变量
region
要么为空,要么其值在字典中不存在。首先检查
region
的值是否确实存在于字典中(请参阅我答案底部的代码示例)。算了,我在代码开始时测试了您的帮助,但尚未设置
region
的值。每个
区域
的条目数量确实不同,但Ubound已经涵盖了这一点。这将大大缩短所需的代码。。。非常感谢你的回答。很好地解释并解决了我的问题。谢谢。我取了您的前几行(Set和两个screen.Add行),然后在后面加上“msgboxscreen(region)(0)”,我想我会看到文本“one”。相反,我得到了一个不匹配[未定义]错误。我是否遗漏了一些明显的信息?@Russ变量
region
要么为空,要么其值在字典中不存在。首先检查
region
的值是否确实存在于字典中(请参阅我答案底部的代码示例)。算了,我在代码开始时测试了您的帮助,但尚未设置
region
的值。每个
区域
的条目数量确实不同,但Ubound已经涵盖了这一点。这将大大缩短所需的代码。。。非常感谢你的回答。很好地解释和解决了我的问题。