我有两个Macro,它按日期过滤工作表列,然后删除不相关的列。
然而,这是非常错误的,我需要一些帮助来纠正这一点。
这是第二个宏应该做的事情:
1)在应用过滤器后删除可见行,第一行(标题)除外 - 目前,它删除包括第一行在内的所有可见行,即使我有{{ 1}}我的代码中的函数。
2)删除所有过滤器 - 现在工作正常
Offset
答案 0 :(得分:2)
SpecialCells将像上一个答案一样工作。
Sub Button1_Click()
Dim sh As Worksheet, rng As Range, LstRw As Long
Set sh = Sheets("Sheet1")
With sh
LstRw = .Cells(.Rows.Count, "A").End(xlUp).Row
Set rng = .Range("A2:A" & LstRw).SpecialCells(xlCellTypeVisible)
rng.EntireRow.Delete
.AutoFilterMode = False
End With
End Sub
答案 1 :(得分:1)
删除过滤数据行是我在使用excel中的表时需要的时间,但在删除重要内容时,我永远不会相信宏。如果您仍想使用它,这可能对您有用:
Sub DeleteVisibleRows()
Dim ws As Worksheet
Dim lastrow As Long, i As Long
Set ws = ThisWorkbook.Worksheets("Consolidated")
With ws
lastrow = .Cells(.Rows.Count, "B").End(xlUp).Row
For i = lastrow To 2 Step -1 'To 2 Assuming first row contains headers
If .Rows(i).Hidden = False Then
.Rows(i).Delete
End If
Next
.ShowAllData 'remove filtered data
End With
End Sub
答案 2 :(得分:0)
如果您使用SELECTION
,则无需定义工作表。您需要的所有内容都与您的选择相关 - 您的选择可能不在Consolidated
工作表上,但它始终位于您选择的父对象上。
以下代码假定您已应用过滤器 - 如果不是,则标题下方的所有内容都将被删除。
Public Sub DeleteVisibleRows()
Dim WorkRng As Range
Set WorkRng = Selection
With WorkRng
.Offset(1, 0).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible).EntireRow.Delete
End With
WorkRng.Parent.AutoFilterMode = False
End Sub
编辑:该代码太长了,我将摆脱一些垃圾。
Public Sub DeleteVisibleRows()
With Selection
.Offset(1, 0).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible).EntireRow.Delete
.Parent.AutoFilterMode = False
End With
End Sub