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可以避免的概念.
我知道这并不完全是您想要的,但作为减少编码的选项之一。
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)