select,插入,剪切,粘贴在所有的工作表上给出了一个错误

我打算将这个VBA执行循环到所有的工作表。 显然,它只能在当前活动的工作表上工作。 对于其他工作表,这是无法重复的。 为什么?

Sub adjustcolumns1() Dim ws As Worksheet For Each ws In ActiveWorkbook.Worksheets Columns("B:B").Select Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove Columns("D:D").Select Selection.Cut Columns("B:B").Select ActiveSheet.Paste Columns("D:D").Select Selection.Delete Shift:=xlToLeft Columns("H:H").Select Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove Columns("J:J").Select Selection.Cut Columns("H:H").Select ActiveSheet.Paste Columns("J:J").Select Selection.Delete Shift:=xlToLeft Next ws End Sub 

您不能在不可见的表格上“select”,但不想“select”,这是从不编辑录制的macros语音中学习到的坏习惯。 因此,让我们调整您的macros,直接将命令发送到所需的范围而无需select,然后将这些命令绑定到工作表循环。

 Option Explicit Sub AdjustColumns1() Dim ws As Worksheet For Each ws In ActiveWorkbook.Worksheets ws.Columns("B:B").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove ws.Columns("D:D").Copy ws.Range("B1") ws.Columns("D:D").Delete Shift:=xlToLeft ws.Columns("H:H").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove ws.Columns("J:J").Copy ws.Range("H1") ws.Columns("J:J").Delete Shift:=xlToLeft Next ws End Sub 

而且我们真的可以缩短更多:

 Option Explicit Sub AdjustColumns1() Dim ws As Worksheets For Each ws In ActiveWorkbook.Worksheets ws.Columns("C:C").Cut ws.Columns("B:B").Insert Shift:=xlToRight ws.Columns("J:J").Cut ws.Columns("I:I").Insert Shift:=xlToRight Next ws End Sub