当我尝试在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