【问题标题】:Excel VBA Type Mismatch Error passing range to arrayExcel VBA类型不匹配错误将范围传递给数组
【发布时间】:2014-08-11 01:14:26
【问题描述】:

我正在尝试检索工作表中单元格数组的值(存储为数组而不是简单单元格),但由于某种原因不断收到运行时错误 13 类型不匹配。我读过关于类似问题的帖子,但其中许多似乎与数组类型错误(即 NOT Variant 类型)或静态大小有关。

这里是调试中出现错误的相关行:

Dim SizeSelection() As Variant
SizeSelection = Workbooks("Wheels.xlsx").Worksheets("Test").Range("B1:W1")

我也试过

Dim SizeSelection() As Variant
SizeSelection = Array(Workbooks("Wheels.xlsx").Worksheets("Test").Range("B1:W1"))

但仍然得到同样的错误。除了上面提到的 2 个常见错误之外,有没有人知道为什么我会得到类型不匹配?我试过删除数组并将值存储在常规单元格中,但这没有任何区别。

哦,我应该提到我要检索的数据在另一个工作簿中(尽管从上面的代码中应该很清楚)并且该工作簿已经打开。

谢谢! 迈克

【问题讨论】:

标签: arrays excel vba type-mismatch


【解决方案1】:

Dim SizeSelection() As Variant 更改为Dim SizeSelection As Variant 应该没问题。

【讨论】:

  • 我也应该承认,我实际上并不知道为什么在这种情况下使用括号会导致错误,特别是因为Dim Arr() As Variant: Arr = Range("A1:C5") 是可以接受的,但Dim Arr() As Variant: Arr = ThisWorkbook.Sheets(1).Range("A1:C5") 不是。我只有自己遇到过才知道。
  • 嗨,您可能对我在 OP 问题中发布的链接感兴趣。这实际上回答了他和你的问题。
  • 感谢您的快速回复!由于某种原因,声明不带括号的变量不起作用,但声明一个范围变量并将 SizeSelection 设置为等于该变量就可以了。 @L42 感谢文章的链接,我在搜索中没有遇到那个链接。老实说,我并不完全理解其背后的原因,但至少现在我知道如果我再次遇到这种情况时的解决方法!非常感谢你拯救了我的理智!
  • @MikeG 这很简单。您只需要明确指示 excel 将您传递给变体变量数组的内容,特别是如果您传递的内容可能是两件事之一。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-12
  • 1970-01-01
  • 1970-01-01
  • 2020-12-10
  • 1970-01-01
  • 2018-08-11
相关资源
最近更新 更多