【问题标题】:Type mismatch error 13 in VBA在 VBA 中键入不匹配错误 13
【发布时间】:2017-11-24 23:08:20
【问题描述】:

所以我正在为 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”等值。另外,我已经尝试使用 @987654326 @它仍然不起作用。

【问题讨论】:

  • columns(index) & counter + 11 没有产生您认为的 xlA1 样式的范围地址(例如 A5:A627)。
  • 你是从哪里复制粘贴的?是否设置了 originaldata 工作簿?相同的工作表名称?该错误是类型不匹配,因此看起来它不能 1) 从originaldata.worksheets("Top Visitors").Range(columns(index) & counter + 11) 获取值(“列”数组是否公开设置在您粘贴它的位置...或者它无法理解 originaldata.Worksheets ("每日访问者").Range("A5:A627")`
  • 我也不知道 Jeeped 是什么意思,对我来说看起来不错,我认为你正在循环使用 indexcounter 这些值一个一个地改变,给你一个单元格范围和值
  • 正如 Jeeped 所写,columns(index) & counter + 11 没有提供像 A1 这样的地址。好吧,您写道columns(index) 具有字符串值,因此我认为您应该在将计算加入列变量之前将其转换为字符串。试试columns(index) & CStr(counter + 11),我想它会解决你的问题。
  • 如果columns 是一个局部变量,它会隐藏/隐藏全局范围的Columns 成员,该成员返回一个Range 对象。这使您的代码混乱。考虑创建一个edit 以包含所有相关变量的声明。那就是说你很可能不需要那个 columns 字符串数组。

标签: vba excel type-mismatch


【解决方案1】:

如果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)

【讨论】:

  • Excuse my sub-par hand-drawing skills: 把这个留在这里...meta.stackexchange.com/questions/138031/…
  • @MacroMan 如果不是真的,我猜这个表情包就不会好笑了? ;)
  • 谢谢你们!!我能够修复它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-31
  • 2015-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多