当我尝试在VBA中设置variables的值时,为什么有时会出错?

理解VBA中的variables是如何工作的,我有点麻烦。 有时当我尝试将一个值放入variables时,我会遇到错误。

例如:

Sub test3() Dim myvar2 As Integer 'Does Not work -- Type Mismatch Error 'myvar2 = [D1:D10] 'Works 'myvar2 = Range("D4") 'myvar2 = Range("D4").Value 'myvar2 = Evaluate("SUM(D1:D10)") MsgBox (myvar2) End Sub 

仅供参考D1:D10中的值都是整数,所以我不知道为什么我会得到这种types的不匹配错误。

评估(“SUM(D1:D10)”)相当于[D1:D10] ..那么为什么一个工作,另一个不工作?

我显然刚刚进入VBA …所以也许这是一个罕见的情况….我所有的其他麻烦是因为我试图使用.Value之后,是不是一个对象。

我已经观看了很多关于variables的video,但是没有一个能回答我的问题。

tl; dr —

myVar =(我可以放在这里/不要把这个值存储为一个variables)

Evaluate("SUM(D1:D10)")等同于[D1:D10]

不,这不对。

[D1:D10]相当于Range("D1:D10")

所以错误的出现是因为myVar2是一个Integer ,你正在分配一个variables数组。

其余的代码“有用”,所以我不确定实际的问题是什么。

 'Works myvar2 = Range("D4") myvar2 = Range("D4").Value myvar2 = Evaluate("SUM(D1:D10)") MsgBox (myvar2) 

或者如果你只是对这些单元格的值感兴趣,你可以将它们存储到一个数组variables,就像你在评论中说的那样。

对于VBA,Excel范围是二维的,所以如果你想有一个一维数组,你需要使用一些其他的方法,而不是简单地给variables赋一个范围。

 Sub arraytest() Dim myarr1D(10) As Integer Dim myarr2D() For n = 1 To Range("D1:D10").Cells.Count myarr1D(n) = Range("D1:D10").Cells(n, 1).Value Next n myarr2D = Range("D1:D10") Debug.Print myarr1D(3) Debug.Print WorksheetFunction.Sum(myarr1D) Debug.Print myarr2D(3, 1) Debug.Print WorksheetFunction.Sum(myarr2D) End Sub