提问人:TigerLily 提问时间:11/17/2023 最后编辑:braXTigerLily 更新时间:11/20/2023 访问量:58
宏 - 删除工作簿中多个工作表上的空白列(具有标题)
Macro - Delete blank columns (which have headers) on multiple worksheets within workbook
问:
请为相对新手提供帮助.....我正在寻找一种方法来删除单个工作簿中多个工作表中的所有空白列(有标题)。
我有一个代码(我没有写),可以删除活动工作表中的所有空白列,这工作正常。但是,我想要一种让此代码同时在多个工作表中工作的方法。我找不到任何东西:
Sub DeleteBlankColumns()
Dim i As Long
Dim lnglastcolumn As Long
Dim delrng As Range
With ActiveSheet
lnglastcolumn = .Cells(1, Columns.Count).End(xlToLeft).Column
For i = 1 To lnglastcolumn
If .Cells(.Rows.Count, i).End(xlUp).row = 1 Then
If delrng Is Nothing Then
Set delrng = .Columns(i)
Else
Set delrng = Union(delrng, .Columns(i))
End If
End If
Next i
End With
delrng.Delete
End Sub
任何帮助非常感谢!
答:
0赞
ipStack
11/17/2023
#1
使用 Sheets 对象:
Sub DeleteBlankColumns(curSheet As Worksheet)
Dim i As Long
Dim lnglastcolumn As Long
Dim delrng As Range
With curSheet
lnglastcolumn = .Cells(1, Columns.Count).End(xlToLeft).Column
For i = 1 To lnglastcolumn
If .Cells(.Rows.Count, i).End(xlUp).Row = 1 Then
If delrng Is Nothing Then
Set delrng = .Columns(i)
Else
Set delrng = Union(delrng, .Columns(i))
End If
End If
Next i
End With
If Not (delrng Is Nothing) Then
delrng.Delete
End If
End Sub
Sub Run()
'DeleteBlankColumns Sheets("Sheet1")
'DeleteBlankColumns Sheets("Sheet2")
For Each sh In ActiveWorkbook.Worksheets
DeleteBlankColumns Sheets(sh.Name)
Next sh
End Sub
评论
0赞
TigerLily
11/17/2023
最后一部分“Run()”是否查找名称为“Sheet1”等的工作表?如果是这样,这可能是一个问题,因为额外工作表的名称是特定于客户端的,并且可能每个月都会更改。对不起,应该在我的请求中更清楚地说明这一点
0赞
ipStack
11/20/2023
这是一个示例,在运行函数中,您可以设置要处理的所有工作表名称。您可以创建一个遍历所有工作表的循环:您要处理哪些叶子?工作簿中的所有工作表?
0赞
TigerLily
11/20/2023
这将是工作簿中的所有工作表
0赞
ipStack
11/20/2023
添加一个“for each”循环...我改变了我的例子。
0赞
TigerLily
11/20/2023
了不起!这很有效,谢谢!不知道如何将其标记为旋转
0赞
FaneDuru
11/17/2023
#2
请尝试下一个改编的代码:
Sub DeleteEmptyColsInAllSheets()
Dim wb As Workbook, sh As Worksheet, delRng As Range, lnglastcolumn As Long, i As Long
Set wb = ActiveWorkbook ' use here the workbook you need
For Each sh In wb.Worksheets
With sh
lnglastcolumn = .cells(1, Columns.count).End(xlToLeft).column
For i = 1 To lnglastcolumn
If .cells(.rows.count, i).End(xlUp).Row = 1 Then
If delRng Is Nothing Then
Set delRng = .Columns(i)
Else
Set delRng = Union(delRng, .Columns(i))
End If
End If
Next i
End With
If Not delRng Is Nothing then
delRng.Delete: Set delRng = Nothing
End If
Next sh
End Sub
评论
0赞
TigerLily
11/17/2023
感谢您的回复。这个问题有一个问题:“运行时错误'91':未设置对象变量或未设置块变量”:(delRng.Delete:设置 delRng = 无)
0赞
FaneDuru
11/17/2023
@TigerLily 这是代码的一部分...我只尝试为下一张纸制作范围。可能有一个工作表没有空列,并且已经是 ()。所以设计了你的代码。无论如何,我会调整我的以初步检查这方面。Nothing
delRng
Nothing
not Set
评论
With Activesheet
For Each ws in Worksheets
With ws
Dim ws as Worksheet
Next
End Sub