我运行我的VBA代码,第一次运行它会得到想要的结果,但是如果第二次运行它,我的列标题就会被删除。仅供参考,我的表从E开始并经过N。我的按钮在O列上,并且在我第二次运行它时也被删除。
切换范围无济于事,将自动筛选设置为false也不起作用。 #
Sub Auto_filter()
Dim sh As Worksheet
Set sh = ThisWorkbook.Worksheets("HP Service Manager")
sh.AutoFilterMode = False
With sh
On Error Resume Next
.ShowAllData
.Range("E1:N1").AutoFilter 1, "IM*"
AutoFilter = False
End With
End Sub
# 期望不会删除列标题。
答案 0 :(得分:0)
问题出在您共享的第二个代码中。
代码首先在此处设置范围:
Set Rng = Range("E1", Cells(iRow, "E"))
然后在此处尝试删除该范围内的所有可见单元格(应用过滤器之后)
Rng.SpecialCells(xlCellTypeVisible).EntireRow.Delete
其中还包括标题单元格。
因此,一种简单的处理方法可能是设置另一个这样的范围
Set Rng2 = Range("E2", Cells(iRow, "E"))
然后使用它删除数据
Rng2.SpecialCells(xlCellTypeVisible).EntireRow.Delete
以下是重写的功能,供您参考。这只会删除从第2行开始的空白行。如果没有要删除的空白行等,您可能需要添加一些错误处理。
Sub DeleteRowsAll()
Dim iRow As Long
Dim Rng As Range
Application.ScreenUpdating = False
Rows(1).Insert
Range("E1").Value = "rabbitohs"
With ActiveSheet
.UsedRange
iRow = .Cells.SpecialCells(xlCellTypeLastCell).Row
Set Rng = Range("E1", Cells(iRow, "E"))
Rng.AutoFilter Field:=1, Criteria1:=""
Set Rng2 = Range("E2", Cells(iRow, "E"))
Rng2.SpecialCells(xlCellTypeVisible).EntireRow.Delete
.UsedRange
End With
End Sub
答案 1 :(得分:0)
(async function () {
reading reed permanent {
if (reed === 1){
post data to cloud;
setTimeout( () => { if(reed still open) {/*do what you want after timeout*/} }, 20 );
}
}
})();
结束子