我有一个脚本,我设计的是为了隐藏不包含数据的行,脚本从第7行开始查看列A.如果找到不包含值的行,它将隐藏那些行的视线。不幸的是,这个脚本需要1分钟才能在目前的大型工作表上运行。
是否有人建议如何重写此脚本以使其更快?它需要在最多5秒内运行
Sub hideAllRows()
Dim Checklist As Variant
UnlockSheet
Call Show_Hide("Row", "7:519", True)
Call Show_Hide("Row", "529:1268", True)
Checklist = ActiveSheet.Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row).Value
For I = UBound(Checklist, 1) To LBound(Checklist, 1) Step -1
If Checklist(I, 1) <> "" Then
Rows(I & ":" & I).Select
Selection.EntireRow.Hidden = False
End If
Next I
答案 0 :(得分:2)
我已编辑了您的代码,以使事情变得更简单。 其中一个问题是您的代码正在“疯狂地”触发事件(每次执行Select时,都会触发事件)。
一个。如果您想按原样使用代码,我建议您在开头添加
Application.EnableEvents = False
并添加到最后一行:
Application.EnableEvents = true
B中。我建议你在循环结束后进行“一击”。方法如下:
Dim Checklist As Variant
dim sRowsToHide as string
UnlockSheet
Application.ScreenUpdating = False
Call Show_Hide("Row", "7:519", True)
Call Show_Hide("Row", "529:1268", True)
Checklist = ActiveSheet.Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row).Value
For I = UBound(Checklist, 1) To LBound(Checklist, 1) Step -1
If Checklist(I, 1) <> "" Then
if sRowsToHide = "" then
sRowsToHide = I & ":" & I
else
sRowsToHide = sRowsToHide & "," & I & ":" & I
end if
End If
Next I
ActiveSheet.Range(sRowsToHide).EntireRow.Hidden = True
Application.ScreenUpdating = True
您可以使用以下行来查看此类内容的工作方式:
ActiveSheet.Range("2:2,14:14,17:17,19:19").EntireRow.Hidden = True
答案 1 :(得分:0)
您可以尝试使用ScreenUpdating,它只会在循环完成后更新工作表而不是每次更新
Dim Checklist As Variant
UnlockSheet
Application.ScreenUpdating = False
Call Show_Hide("Row", "7:519", True)
Call Show_Hide("Row", "529:1268", True)
Checklist = ActiveSheet.Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row).Value
For I = UBound(Checklist, 1) To LBound(Checklist, 1) Step -1
If Checklist(I, 1) <> "" Then
Rows(I & ":" & I).Select
Selection.EntireRow.Hidden = False
End If
Next I
Application.ScreenUpdating = True
答案 2 :(得分:0)
以下内容将隐藏A列中所有具有常量的行(例如类型值)。
Sub hide_A_values()
With ActiveSheet.Columns("A")
.SpecialCells(xlCellTypeConstants).EntireRow.Hidden = True
End With
End Sub
下一个将隐藏在A列中包含公式的所有行。
Sub hide_A_values()
With ActiveSheet.Columns("A")
.SpecialCells(xlCellTypeFormulas).EntireRow.Hidden = True
End With
End Sub
最后,这将隐藏所有具有常量的行(例如类型值)或A列中的公式。
Sub hide_A_values()
With ActiveSheet.Columns("A")
Union(.SpecialCells(xlCellTypeConstants), .SpecialCells(xlCellTypeFormulas)).EntireRow.Hidden = True
End With
End Sub
问题是如果没有要隐藏的常量或公式,则必须提供错误控制或冒险处理可怕的Runtime error: 1004 No cells were found
。 On Error Resume Next
通常负责此事。
Sub hide_A_values()
With ActiveSheet.Columns("A")
On Error Resume Next
.SpecialCells(xlCellTypeConstants).EntireRow.Hidden = True
.SpecialCells(xlCellTypeFormulas).EntireRow.Hidden = True
On Error GoTo 0
End With
End Sub
唯一没有涉及的案例是返回空字符串(例如“”)的公式,这些公式不被视为真正的空白。