Excel 2016中Match函数不可用?代码报错‘Sub或Function未声明’
原因与解决方法
问题根源
VBA里不能直接调用Match、Index这类Excel工作表函数——它们属于Excel的工作表函数库,并非VBA的内置函数。直接写函数名的话,VBA会将其判定为未声明的自定义函数,因此抛出“Sub or Function not declared”错误。
修复代码
给这两个函数加上WorksheetFunction前缀,明确告诉VBA要调用Excel的工作表函数:
ItemID = WorksheetFunction.Index(Sheets("SD_invTypes").Range("A:A"), WorksheetFunction.Match(ItemName, Sheets("SD_invTypes").Range("B:B"), 0))
进阶处理(可选)
如果ItemName找不到匹配项,上面的代码会直接触发运行时错误。想要优雅处理这种场景,可以改用Application.Match(不带WorksheetFunction),它找不到匹配时会返回错误值,配合IsError判断即可:
Dim matchResult As Variant matchResult = Application.Match(ItemName, Sheets("SD_invTypes").Range("B:B"), 0) If Not IsError(matchResult) Then ItemID = WorksheetFunction.Index(Sheets("SD_invTypes").Range("A:A"), matchResult) Else ' 此处编写无匹配时的逻辑,比如赋值为空或给出提示 ItemID = "" End If
另外要确认SD_invTypes工作表确实存在,且ItemName变量有有效内容,避免引发其他潜在问题。
内容的提问来源于stack exchange,提问作者Pavetta
相关产品推荐
相关产品推荐

