在所有表格上运行脚本excel

我有这个脚本search一个定义的string,并删除列,如果它find它。 我想要在工作簿中的所有工作表上执行相同的search。 到目前为止,我试图像这样设置它。 但它只能在活动表单上运行。

Sub RunMacroOnAllSheetsToRight() For i = ActiveSheet.Index To Sheets.Count Call MyFunction(i) Next i End Sub Function MyFunction(i) Dim c As Range Dim str As String str = "SearchStringHere" For Each c In ActiveSheet.UsedRange If InStr(c.Value, str) > 0 Then c.EntireColumn.Delete Shift:=xlToLeft End If Next c End Function 

脚本现在循环,但由于某种原因只能删除单列。 需要能够匹配和删除每个工作表的多个列。

你只需要改变你的“function”中的ActiveSheet,它会更好!

顺便说一句:你可以有一个带有参数的Sub(如下),只有当你有输出结果(你没有在你的例子中)时才需要一个函数。

2主要改变: – 增加了设置Ws = Nothing来释放Ws – 通过列更改增量,因为当删除列越来越多时,你会错过分析现在是列(j)的下一列(j + 1)

 Sub RunMacroOnAllSheetsToRight() Application.ScreenUpdating = False For i = ActiveSheet.Index To Sheets.Count Column_Delete i, "SearchStringHere" Next i Application.ScreenUpdating = True End Sub Sub Column_Delete(ByVal Sheets_Index As Integer, ByVal Str_to_Find As String) Dim Ws As Worksheet Set Ws = Worksheets(Sheets_Index) Dim EndColumn As Integer EndColumn = Ws.Cells(1, Columns.Count).End(xlToLeft).Column 'descending travel of the columns as we are going to delete some of them For j = 1 To EndColumn If InStr(Ws.Cells(1, EndColumn - j + 1), Str_to_Find) > 0 Then Ws.Columns(EndColumn - j + 1).EntireColumn.Delete Shift:=xlToLeft End If Next j 'Don't forget to free Ws (like I did...) Set Ws = Nothing End Sub