我正在尝试创建一个宏,它在工作簿中的每个工作表上执行以下操作。
Range("U10").Select
FormulaR1C1 = "=R3C2"
Range("U10").Select
Selection.AutoFill Destination:=Range("U10:U19"), Type:=xlFillDefault
Range("U10:U19").Select
Selection.Copy
Range("V10").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("V10:V19").Select
Selection.Copy
Range("U10").Select
ActiveSheet.Paste
Range("V9:V19").Select
Selection.ClearContents
Range("A16").Select
Selection.ClearContents
我试过了:
Sub parse()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
'The above code
Next ws
End Sub
不幸的是,这似乎只是将此宏应用于当前活动工作表。
我有一种感觉,这与我没有正确引用范围有关(我是VBA的新手所以任何解释都可以帮助我找到解决方案!)。 IE浏览器。它应该像ws.Range ......等或者我应该做一些完全不同的事情吗?
答案 0 :(得分:6)
你非常接近
Sub parse()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
ws.Range("U10:U19").FormulaR1C1 = "=R3C2"
ws.Range("U10:U19").Value=ws.Range("U10:U19").value
ws.Range("A16").ClearContents
Next ws
End Sub
Tim和Gimp表示,压缩代码的次数越多,维护的效率越高,越容易。这包括避免.Select
语句,不需要的操作(比如你来回粘贴值)等等。
答案 1 :(得分:0)
你需要像这样组合它们:
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
With ws
.Range("U10").Select
FormulaR1C1 = "=R3C2"
.Range("U10").Select
Selection.AutoFill Destination:=.Range("U10:U19"), Type:=xlFillDefault
.Range("U10:U19").Select
Selection.Copy
.Range("V10").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
.Range("V10:V19").Select
Selection.Copy
.Range("U10").Select
ActiveSheet.Paste
.Range("V9:V19").Select
Selection.ClearContents
.Range("A16").Select
Selection.ClearContents
End With
Next ws
原因是你需要在每个范围引用前加上应该使用的范围的工作表。你可以使用ws.Range().select each time
来完成这项工作,或者像我上面那样将它们全部封锁..
话虽如此,你也可以在yoru代码中删除很多不必要的行,它看起来像这样......
Sub parse()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
With ws
.Range("U10").FormulaR1C1 = "=R3C2"
.Range("U10").AutoFill Destination:=.Range("U10:U19"), Type:=xlFillDefault
.Range("U10:U19").Copy
.Range("V10").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
.Range("V10:V19").Copy
.Range("U10").Paste
.Range("V9:V19").ClearContents
.Range("A16").ClearContents
End With
Next ws
End Sub