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

Posted

技术标签:

【中文标题】从变量的前缀列表中为变量赋值【英文标题】:Assign a value to a variable from a prefixed list of variables 【发布时间】:2018-08-14 09:47:00 【问题描述】:

我在为变量分配前缀列表中的值时遇到问题。 我会解释得更好。在“Module8”中,我放置了以下具有常量值的变量:

Public Const Europe = 0.12, _
Middle_East= 0.12, _
Africa = 0.185

这也应该对其他模块可见。在“Module5”中,我有以下几行:

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)

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

提前谢谢你!

【问题讨论】:

您不能将变量名分配给另一个变量。 Excel 将其视为字符串而不是变量。 【参考方案1】:

您可以为此使用集合。

在模块 8 中:

Dim Geo_Region_List As Collection '<-- declaring the variable as global will allow you to access it any time all over your code

在 Workbook open 方法中(为了初始化程序开始以来的常量):

Set Geo_Region_List = New Collection
With Geo_Region_List
    .Add 0.12, "Europe" 
    .Add 0.12, "Middle East"
    .Add 0.185, "Africa"
End With

...然后,在您的 Module5 中,您可以访问与键关联的值:

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

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

【讨论】:

您好,Matteo,感谢您提供完整而详细的回答:我按照您说的做了;我把: Set Geo_Region_List = New Collection With Geo_Region_List .Add 0.12, "Europe" .Add 0.12, "Middle East" .Add 0.185, "Africa" End With 到 "ThisWorkbook" 中,但现在还有另一个问题:当我运行“Sub CalcPop()”它立即卡在“Set Geo_Region_List = New Collection”行并给我另一个错误“无效的外部程序”。也许我应该把这段代码放到 Sub 中? @GPace 所有第二个代码块都应该在“ThisWorkbook_Open”事件下,以便在打开文件时初始化集合并保留到最后。

以上是关于从变量的前缀列表中为变量赋值的主要内容,如果未能解决你的问题,请参考以下文章

从选择计数中为变量赋值

PHP:在 IF 语句中为变量赋值

在 SQL 中为变量的值赋值

在 Swift 中为变量属性赋值的 Objective C 语法

在 C# 的扩展方法中为调用者变量赋值

如何在字段中为变量赋值?