在各种工作表中设置单元格中避免循环

Gar*_*ent 5 excel vba excel-vba

我可以将多个工作表中的特定单元格设置为相同的值,而不使用类似以下内容的循环:

Sub ThisWorks()
    Sheets(Array("Sheet1", "Sheet3")).Select
    Sheets("Sheet1").Activate
    Range("B9").Select
    ActiveCell.FormulaR1C1 = "=""x"""
End Sub
Run Code Online (Sandbox Code Playgroud)

运行上面的宏在Array()中包含的工作表中的所有B9中放置相同的值

我试图通过创建和使用与上述代码等效的Object来做同样的事情:

Sub ThisPartiallyWorks()
    Dim obj As Object
    Set obj = Sheets(Array("Sheet1", "Sheet3"))
    obj.Select
    Range("A2").Formula = "=""x"""
End Sub
Run Code Online (Sandbox Code Playgroud)

这样运行没有错误,但只有一个工作表在所需的单元格中获得="x".

我究竟做错了什么??

编辑#1

瓦西里的帖子给了我线索................这个版本似乎工作:

Sub Finally()
    Dim obj As Object
    Set obj = Sheets(Array("Sheet1", "Sheet3"))
    obj.Select
    obj(1).Activate
    Range("B9").Select
    ActiveCell.FormulaR1C1 = "=""x"""
End Sub
Run Code Online (Sandbox Code Playgroud)

虽然这似乎违反了Select可以避免的概念.

Vas*_*zha 4

我知道这并不完全是您想要的,但作为减少编码的选项之一。

Sub test()
    Dim obj As Object, i&
    Set obj = Sheets(Array("Sheet1", "Sheet3"))
    For i = 1 To obj.Count: obj(i).[B9].Formula = "=""x""": Next
End Sub
Run Code Online (Sandbox Code Playgroud)

编辑#1

可能看起来像这样

Sub Finally()
    Dim obj As Object
    Set obj = Sheets(Array("Sheet1", "Sheet3"))
    obj.Select: obj(1).[B9].Activate: ActiveCell.Formula = "=""x"""
End Sub
Run Code Online (Sandbox Code Playgroud)