在VBA中键入不匹配错误13

时间:2017-06-21 21:11:50

标签: excel vba excel-vba type-mismatch

所以我在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但它仍然无效。

1 个答案:

答案 0 :(得分:2)

如果Application.Match找不到任何内容,it returns a Variant/Error给调用者 - 并且您尝试将该错误分配给仅整数变量==>类型不匹配。投注好钱这是你的问题,因为代码偶尔会工作。

请原谅我的低于手绘技巧:enter image description here

这样修改你的代码:

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)