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

时间:2017-06-26 14:08:28

标签: excel vba excel-vba variables syntax

我在理解变量在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 =(我可以放在这里/不放在这里将此值存储为变量)

2 个答案:

答案 0 :(得分:4)

  

Evaluate("SUM(D1:D10)")相当于[D1:D10]

不,不是。

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

因此,错误正在发生,因为myVar2Integer,您要为其分配变量数组。

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

'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