【问题标题】:Why do I sometimes get errors when I try to set the value of a variable in VBA?当我尝试在 VBA 中设置变量的值时,为什么有时会出错?
【发布时间】:2017-06-26 14:08:28
【问题描述】:

我很难理解变量在 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

仅供参考,D1:D10 中的值都是整数,所以我不知道为什么会出现类型不匹配错误。

Evaluate("SUM(D1:D10)") 等价于 [D1:D10].. 那么为什么一个有效而另一个无效呢?

我显然刚刚进入 VBA ......所以这可能是一个罕见的情况......我所有其他的麻烦都是因为我试图在不是对象的东西之后使用 .Value。

我看过不少关于变量的视频,但没有一个能回答我的问题。

tl;博士——

myVar =(我可以放什么/不放什么以将此值存储为变量)

【问题讨论】:

  • “不将此值存储为变量”是什么意思?
  • Evaluate("SUM(D1:D10)") NOT 等价于 [D1:D10]
  • 你想要[SUM(D1:D10)] 相当于Evaluate("SUM(D1:D10)")

标签: vba excel variables syntax


【解决方案1】:

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)

【讨论】:

  • @OligarchicTendencies 这不是什么意思
  • @OligarchicTendencies 引发错误的行 (myvar2 = [D1:D10]) 是多余的。它不会影响其他代码行,它不是函数的输入等,它会在后续赋值时立即被覆盖。只需删除此行,完全没有必要。
  • 是的,我想问题是,什么可以存储为变量? --- 一个完整的工作表? ...我想我只需要尝试一下。我不明白如何将范围存储为变量,因为范围包含许多值,它就像连接一样吗?还是变成一个数组??
  • Anything 可以存储为变量,但不能存储为 Integer :) 要存储工作表,请 Dim sh As Worksheet 并分配 @987654330 @ 等。要存储一系列单元格,Dim rng as Range,然后是Set rng = Range("D1:D10"),等等...虽然 VBA 不需要类型声明,但 if 键入了一个变量(例如,As Integer ) 它不能被视为动态类型变量,因此您以后不能将其分配为SheetRangeScripting.FileSystemObject 等。
  • 是的,我知道,这就是为什么其他行被注释掉的原因,我只是一个一个地尝试
【解决方案2】:

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

对于 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-25
    • 2019-11-28
    • 2018-12-12
    • 1970-01-01
    相关资源
    最近更新 更多