声明中的多个对象

时间:2014-10-03 09:44:49

标签: vba excel-vba excel

我想知道为什么这个简单的代码会抛出一个" Object Required"我尝试运行它时出错。我无法找到任何理由为什么VBA会遇到麻烦。它编译好,但无法运行。

Sub Test()

Dim X, Y, Z As Range

Set X = Sheets(1).Range("A1")
Set Y = Sheets(2).Range("A1")
Set Z = Sheets(3).Range("A1")


With X And Y And Z
.Value = "Test" 'FAILS HERE
End With


End Sub

我确定它的东西很小,或者VBA可能无法解决这个问题?

3 个答案:

答案 0 :(得分:4)

如果你这么做,请创建一个辅助程序:

Sub setValueOf(value As String, ParamArray ranges())
   Dim i As Long
   For i = 0 To UBound(ranges)
      ranges(i).value = value
   Next
End Sub

然后您可以传递1个或更多范围;

setValueOf "Test", Sheets(1).Range("A1"), Sheets(2).Range("A1"), Sheets(3).Range("A1"), [B5], ...

答案 1 :(得分:3)

VBA正试图使用​​逻辑' X和Y和Z'作为你的with语句中的对象,这可能不是你想要的

你需要:

X.Value = "Test"
Y.Value = "Test"
Z.Value = "Test"

而不是

(X AND Y AND Z).Value = "Test"

答案 2 :(得分:2)

您可以使用循环设置范围值: -

Sub Test()

Dim i

For i = 1 to 3
    sheets(i).range("A1").value = "TEST"
Next  

End Sub