【发布时间】:2021-10-13 19:50:53
【问题描述】:
我正在尝试在 VBA Excel 中进行匹配,但出现错误,我不知道为什么...如果我在工作表中输入相同的匹配函数,它可以工作,但来自 VBA。
这是一个有问题的 sn-p。
Set id_range = table_m.ListColumns("ID").DataBodyRange
Dim a As Double
MsgBox "looking for ID : " + dep_id + " in range " + id_range.Address
a = WorksheetFunction.Match(dep_id, id_range, 0)
MsgBox a
但是,我得到了臭名昭著的错误:
无法获取工作表函数类的 Match 属性
如果我手动输入一个 Excel 单元格 Match(1,$A$7:$A$8,0) 它确实有效,但 VBA 似乎不喜欢它。
【问题讨论】:
-
我怀疑
dep_id是文本,或者单元格中的数据是。 -
很可能正如@Rory 所说。还有很可能
dep_id不是您认为的值——您使用+连接而不是&。1 & 1 = 11或1 + 1 =2. -
请尝试
Dim a As Variant。MsgBox显示什么?这是一个错误吗?如果是这样,dep_id有什么格式,与匹配范围内的格式相反?dep_id的值取自哪里? -
“混乱”并非来自数字。它来自不同的格式。这种方法是搜索相同的实体...如果你也想使用字符串,你应该调整变量构建的方式。类似:
If IsNumeric(dep_id) Then dep_id = CDbl(dep_id)。但是你是怎么申报的呢?对于这种方法,它应该是String。或Variant... -
如果您将工作表中的单元格格式化为文本并重新输入任何现有的数字数据,那么您的代码应该可以正常工作。正如您所注意到的,将“1”与 1 进行比较不适用于匹配。