我在理解变量在VBA中的工作方式时遇到了一些麻烦。当我尝试将值放入变量时,有时会出错。
例如:
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
FYI D1:D10中的值都是整数,所以我不知道为什么会出现类型不匹配错误。
评估(“SUM(D1:D10)”)相当于[D1:D10] ..那么为什么一个工作而另一个不工作?
我显然刚刚进入VBA ......所以这可能是一种罕见的情况....我所有的其他麻烦都是因为我试图在不是对象的东西之后使用.Value。
我观看过很多关于变量的视频,但没有一个能回答我的问题。
tl; dr ---
myVar =(我可以放在这里/不放在这里将此值存储为变量)
答案 0 :(得分:4)
Evaluate("SUM(D1:D10)")
相当于[D1:D10]
不,不是。
[D1:D10]
相当于Range("D1:D10")
因此,错误正在发生,因为myVar2
是Integer
,您要为其分配变量数组。
你的其余代码“有效”,所以我不确定实际的问题是什么。
'Works
myvar2 = Range("D4")
myvar2 = Range("D4").Value
myvar2 = Evaluate("SUM(D1:D10)")
MsgBox (myvar2)
答案 1 :(得分:1)
如果您只对这些单元格的值感兴趣,可以将它们存储到数组变量中,就像您在评论中所说的那样。
对于VBA,Excel范围是二维的,所以如果你想拥有一维数组,你需要使用一些其他方法,而不是简单地为变量赋一个范围。
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