通过所有工作表循环简单的function

我正在尝试创build一个macros,在工作簿中的每个Worksheet上执行以下操作。

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 

不幸的是,这似乎只是将这个macros应用到当前活动工作表。

我有一种感觉,这与我没有正确引用范围有关(我是VBA的新手,所以任何解释都能帮助我解决问题!)。 IE浏览器。 应该是像ws.Range …等还是应该做一些完全不同的事情?

你很近

 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语句,不需要的操作(如来回粘贴值)等等。

你需要像这样组合他们:

 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来做到这一点, ws.Range().select each time ,或者像上面所做的那样把它们全部封锁在一起。

这就是说,你也可以删除很多不必要的代码,它会看起来像这样…

 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