【问题标题】:Excel error with match "Unable to get the Match property of the worksheetfunction class"Excel 错误与匹配“无法获取工作表函数类的匹配属性”
【发布时间】: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 = 111 + 1 =2.
  • 请尝试Dim a As VariantMsgBox 显示什么?这是一个错误吗?如果是这样,dep_id 有什么格式,与匹配范围内的格式相反? dep_id 的值取自哪里?
  • “混乱”并非来自数字。它来自不同的格式。这种方法是搜索相同的实体...如果你也想使用字符串,你应该调整变量构建的方式。类似:If IsNumeric(dep_id) Then dep_id = CDbl(dep_id)。但是你是怎么申报的呢?对于这种方法,它应该是String。或Variant...
  • 如果您将工作表中的单元格格式化为文本并重新输入任何现有的数字数据,那么您的代码应该可以正常工作。正如您所注意到的,将“1”与 1 进行比较不适用于匹配。

标签: excel vba


【解决方案1】:

问题是 dep_id 是一个字符串,但我的范围值被格式化为 General 所以它被认为是 Integer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-09
    • 2017-05-24
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多