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,它在昨天晚上的最后一次修订时就在代码中。我简单地取出它进行了一次破解/变通,但在调试几分钟后又将其放回原处。