Excel VBA代码,用于对具有未知名称的所有工作表和工作簿执行操作

Excel VBA代码,用于对具有未知名称的所有工作表和工作簿执行操作,excel,vba,Excel,Vba,我有许多报告,其中都有我不需要的小计。它们都在一行上,有一个唯一的数字,然后是“总数”(粗体)。我正在尝试创建代码,该代码将应用于我的所有工作簿,因为我创建的新工作簿将查找并删除任何包含“总计”(粗体)文本的行。我知道如何将其应用于具有我知道的名称的特定工作簿/工作表,但不知道如何将其应用于任何具有任何名称的工作表 Sub Find_Delete_Total() Dim Total_Row As Long Dim X As Long For Each Ws In

我有许多报告,其中都有我不需要的小计。它们都在一行上,有一个唯一的数字,然后是“总数”(粗体)。我正在尝试创建代码,该代码将应用于我的所有工作簿,因为我创建的新工作簿将查找并删除任何包含“总计”(粗体)文本的行。我知道如何将其应用于具有我知道的名称的特定工作簿/工作表,但不知道如何将其应用于任何具有任何名称的工作表

    Sub Find_Delete_Total()
    Dim Total_Row As Long
    Dim X As Long

    For Each Ws In ActiveWorkbook.Worksheets


     With Ws
            With Application.FindFormat.Font
                .FontStyle = "Bold"
                .Subscript = False
                .TintAndShade = 0
            End With
            For X = 1 To 10000



        Total_Row = Cells.Find(What:="Total", _
                After:=Range("A1"), _
                LookAt:=xlPart, _
                LookIn:=xlFormulas, _
                SearchOrder:=xlByRows, _
                SearchDirection:=xlPrevious, _
                MatchCase:=False).Select.Row
                    Selection.Delete Shift:=xlUp

            Next X
        End With
    Next Ws

End Sub

您修改的代码缺少与使用ActiveSheet的
相对应的
结尾
。另外,将
ActiveSheet
更改为
Sht
,并限定
单元格中的相应对象。查找

我做了一些修改,以避免在找不到“总计”时出现错误

Sub Find_Delete_Total()
Dim Total_Row As Long
Dim X As Long
Dim delRow as Range
Dim Sht as Worksheet

For Each Sht In ActiveWorkbook.WorkSheets
    With Application.FindFormat.Font
        .FontStyle = "Bold"
        .Subscript = False
        .TintAndShade = 0
    End With
    With Sht
        For X = 1 To 10000
            Set delRow = .Cells.Find(What:="Total", _
                After:=.Range("A1"), _
                LookAt:=xlPart, _
                LookIn:=xlFormulas, _
                SearchOrder:=xlByRows, _
                SearchDirection:=xlPrevious, _
                MatchCase:=False, _
                SearchFormat:=True)
           If Not delRow Is Nothing Then 
               delRow.EntireRow.Delete Shift:=xlUp
           End If
        Next X
    End With
Next Sht
End Sub

您修改的代码缺少与使用ActiveSheet的
相对应的
结尾
。另外,将
ActiveSheet
更改为
Sht
,并限定
单元格中的相应对象。查找

我做了一些修改,以避免在找不到“总计”时出现错误

Sub Find_Delete_Total()
Dim Total_Row As Long
Dim X As Long
Dim delRow as Range
Dim Sht as Worksheet

For Each Sht In ActiveWorkbook.WorkSheets
    With Application.FindFormat.Font
        .FontStyle = "Bold"
        .Subscript = False
        .TintAndShade = 0
    End With
    With Sht
        For X = 1 To 10000
            Set delRow = .Cells.Find(What:="Total", _
                After:=.Range("A1"), _
                LookAt:=xlPart, _
                LookIn:=xlFormulas, _
                SearchOrder:=xlByRows, _
                SearchDirection:=xlPrevious, _
                MatchCase:=False, _
                SearchFormat:=True)
           If Not delRow Is Nothing Then 
               delRow.EntireRow.Delete Shift:=xlUp
           End If
        Next X
    End With
Next Sht
End Sub


“在出现任何名称的任何工作表时”是指所有打开的工作簿、活动工作表、活动工作簿中的所有工作表或您打开工作簿时的所有工作表?因为我需要运行的报告创建了新工作簿。每次我运行报告时,它们的名称和工作表名称都会更改。我可以问一下为什么x=1到100000的
循环?在这里,这似乎是不必要的开销,看起来它实际上没有做任何事情。@DavidZemens我想我必须使用一个循环来实现我的目标,而10k似乎是一个永远不会被击中的事件数。'对任何出现任何名称的工作表'意味着所有打开的工作簿、活动工作表,活动工作簿中的所有工作表或打开工作簿时的所有工作表?因为我需要运行的报告创建了新工作簿。每次我运行报告时,它们的名称和工作表名称都会更改。我可以问一下为什么x=1到100000的
循环?这似乎是不必要的开销,看起来它实际上什么也没做。@DavidZemens我想我必须使用一个循环来完成我的目标,而10公里似乎是一个永远不会被击中的次数。用'sht.Activate'Replace'替换'ActiveSheet'和'sht.Activate'这几乎是正确的。它现在删除了所有包含单词Total的行,并且没有考虑到粗体要求。关于如何解决这个问题有什么想法吗?@TonyP修改为在
单元格中使用可选参数。Find
SearchFormat:=True
。奇怪的是,它现在不再删除任何行。这回答了我原来的问题,我不想浪费你的时间。如果
SearchFormat
是真的,你不需要指定要搜索的格式吗?@RGA,它在昨天晚上的最后一次修订时就在代码中。我简单地把它拿出来做了一个破解/解决方案,但在调试几分钟后又把它放回去了。这几乎可以正常工作。它现在删除了所有包含单词Total的行,并且没有考虑到粗体要求。关于如何解决这个问题有什么想法吗?@TonyP修改为在
单元格中使用可选参数。Find
SearchFormat:=True
。奇怪的是,它现在不再删除任何行。这回答了我原来的问题,我不想浪费你的时间。如果
SearchFormat
是真的,你不需要指定要搜索的格式吗?@RGA,它在昨天晚上的最后一次修订时就在代码中。我简单地取出它进行了一次破解/变通,但在调试几分钟后又将其放回原处。