String 从带前缀的变量列表中为变量赋值

String 从带前缀的变量列表中为变量赋值,string,vba,excel,public,type-mismatch,String,Vba,Excel,Public,Type Mismatch,我在为变量分配前缀列表中的值时遇到问题。 我会更好地解释。在“模块8”中,我将以下变量与常量值放在一起: Public Const Europe = 0.12, _ Middle_East= 0.12, _ Africa = 0.185 其他模块也应该可以看到。在“模块5”中,我有以下几行: Sub CalcPop() Sheets("Region").Select Data = Range("I7:I15").Value Geo_Region = Data(1, 1) Populatio

我在为变量分配前缀列表中的值时遇到问题。 我会更好地解释。在“模块8”中,我将以下变量与常量值放在一起:

Public Const Europe = 0.12, _
Middle_East= 0.12, _
Africa = 0.185
其他模块也应该可以看到。在“模块5”中,我有以下几行:

Sub CalcPop()

Sheets("Region").Select

Data = Range("I7:I15").Value
Geo_Region = Data(1, 1)
Population = Data(3, 1)
Extension = Data(4, 1)
S = Data(7, 1)

S = S * (1 - Geo_Region)
现在,“模块5”中的代码读取称为“区域”的表,其中区域(即欧洲、非洲等)以字符串形式显示,因此变量“Geo_Region”的值化为欧洲、非洲等。 问题是,当它出现在S=S*(1-Geo_区域)行时,它给出了运行时错误“13”的“类型不匹配”。我猜是因为代码读取了工作表中的字符串,但它无法将字符串与“Module8”中的公共常量中的值相关联。 您能建议我如何将公共列表中的值与工作表中的字符串相关联吗


提前谢谢你

你可以用一个集合来做这件事

在模块8中:

Dim Geo_Region_List As Collection '<-- declaring the variable as global will allow you to access it any time all over your code
。。。然后,在模块5中访问与密钥相关的值:

S = S * (1 - Geo_Region_List(Geo_Region))

(我假设
Geo_Region
是一个类似于
Europe
的字符串,您希望返回关联的值
0.12

您可以使用一个集合

在模块8中:

Dim Geo_Region_List As Collection '<-- declaring the variable as global will allow you to access it any time all over your code
。。。然后,在模块5中访问与密钥相关的值:

S = S * (1 - Geo_Region_List(Geo_Region))

(我假设
Geo_Region
是一个类似于
Europe
的字符串,您希望返回关联的值
0.12

您不能将变量名称分配给另一个变量。Excel将其视为字符串而不是变量。不能将变量名分配给其他变量。Excel将其视为一个字符串而不是一个变量。你好,Matteo,谢谢你完整而详细的回答:我按照你说的做了;我将:Set Geo_Region_List=新集合添加到Geo_Region_List中。添加0.12,“欧洲”。添加0.12,“中东”。将0.185,“非洲”以结尾添加到“ThisWorkbook”中,但现在出现了另一个问题:当我运行“Sub CalcPop()”时,它会立即切换到“Set Geo_Region_List=新集合”行,并给出另一个错误“外部过程无效”。也许我应该把这段代码放到Sub?@GPace中,所有第二段代码都应该在“ThisWorkbook\u Open”事件下,以便您在打开文件时初始化集合,并将其保存到最后。你好,Matteo,感谢您完整而详细的回答:我照您说的做了;我将:Set Geo_Region_List=新集合添加到Geo_Region_List中。添加0.12,“欧洲”。添加0.12,“中东”。将0.185,“非洲”以结尾添加到“ThisWorkbook”中,但现在出现了另一个问题:当我运行“Sub CalcPop()”时,它会立即切换到“Set Geo_Region_List=新集合”行,并给出另一个错误“外部过程无效”。也许我应该把这段代码放到Sub?@GPace中,所有第二段代码都应该在“ThisWorkbook\u Open”事件下,这样,当您打开文件时,您就可以初始化集合并将其保存到最后。