所以我在VBA中为宏编写代码,每当我尝试运行它时,我总是在一行上得到相同的错误。有什么奇怪的是,该行在程序的早期工作,但它第二次使用它时停止工作(我没有更改任何代码;我真的复制并粘贴它)。这是代码:
positioninDailyVisitors = Application.Match(originaldata.Worksheets("Top Visitors Chart").Range(columns(index) & counter + 11), originaldata.Worksheets("Daily Visitors").Range("A5:A627"), 0)
一些背景知识:positioninDailyVisitors
是一个整数变量,columns(index)
是一个String
类型的数组,它列出的值类似于" A"," B"等。此外,我已经尝试使用Application.WorksheetFunction.Match
但它仍然无效。
答案 0 :(得分:2)
如果Application.Match
找不到任何内容,it returns a Variant/Error
给调用者 - 并且您尝试将该错误分配给仅整数变量==>类型不匹配。投注好钱这是你的问题,因为代码偶尔会工作。
这样修改你的代码:
If Not IsError(Application.Match(originaldata.Worksheets("Top Visitors Chart").Range(columns(index) & counter + 11), originaldata.Worksheets("Daily Visitors").Range("A5:A627"), 0)) Then & _
positioninDailyVisitors = Application.Match(originaldata.Worksheets("Top Visitors Chart").Range(columns(index) & counter + 11), originaldata.Worksheets("Daily Visitors").Range("A5:A627"), 0)
或许更可行/可读:
Dim errVar As Variant
errVar = Application.Match(originaldata.Worksheets("Top Visitors Chart").Range(columns(index) & counter + 11), originaldata.Worksheets("Daily Visitors").Range("A5:A627"), 0)
If Not IsError(errVar) Then positioninDailyVisitors = CInt(errVar)