VBA如何将字符串匹配到对应Public变量名以获取变量值及代码报错修正
问题解答
关联逻辑实现
VBA 不支持直接通过字符串形式的变量名读取对应变量的值,你要实现CSVTypeColumn为"CSVType01"时自动拿到"AL"的逻辑,最方便的方案是用字典做映射:
- 用键存
CSVType01这类标识名,值存对应的AL这类实际取值,后续新增类型只需要加字典键值对即可,维护成本很低。
报错原因与修正
你原来的代码存在3个明确错误:
- 类型不匹配:
.Column属性返回的是整数类型的列号,不能赋值给Range类型的FindCSVType变量 - 语法错误:
.Range前面没有绑定工作表对象,缺少前置的With 工作表语句就会报错 - 逻辑错误:你拼接的
CSVTypeColumn是变量名字符串,不是合法的单元格列标,直接传入Range会尝试查找不存在的单元格,必然报错
完整可运行修正代码
'''''Module1 定义全局字典存映射关系 Public CSVTypeDict As Object ' 初始化映射关系,只需要运行一次 Sub InitCSVTypeMap() Set CSVTypeDict = CreateObject("Scripting.Dictionary") CSVTypeDict("CSVType01") = "AL" ' 其他类型直接往下加即可,比如 CSVTypeDict("CSVType02") = "BL" End Sub
'''''Module2 业务逻辑代码 Sub FindCSVTypeColumn() ' 未初始化映射则先初始化 If CSVTypeDict Is Nothing Then Call InitCSVTypeMap ' 绑定你要操作的工作表,这里示例用活动表,可替换为 Sheets("你的表名") Dim targetWs As Worksheet Set targetWs = ActiveSheet Dim CSVTypeColumnCount As Long For CSVTypeColumnCount = 1 To 6 Dim typeKey As String typeKey = "CSVType0" & CSVTypeColumnCount ' 直接取到对应的实际值,比如typeKey为CSVType01时,自动拿到AL Dim typeValue As String typeValue = CSVTypeDict(typeKey) ' 查找第一行等于当前类型值的单元格 Dim FindCSVType As Range Set FindCSVType = targetWs.Rows(1).Find( _ What:=typeValue, _ LookIn:=xlValues, _ LookAt:=xlWhole _ ) ' 找到后的业务逻辑示例 If Not FindCSVType Is Nothing Then Debug.Print typeValue & " 所在列号:" & FindCSVType.Column End If Next End Sub
内容的提问来源于stack exchange,提问作者Qi Xuan
相关产品推荐
相关产品推荐

