我正在嘗試編寫一個 VBA 程式碼,如果行中的值等於“”,則該程式碼會自動隱藏行。我的值範圍是A37:A400。因為我的範圍太大了,所以我以前的 VbA 速度很慢,而且一次只看一行。任何製作快速程式碼的想法,程式碼將遍歷這個大列表並快速隱藏行。現在隱藏太長的行需要大約一分鐘的時間。
Sub HideRows()
Dim cell As Range
For Each cell In Range("A37:A400")
If Not IsEmpty(cell) Then
If cell.Value = "" Then
cell.EntireRow.Hidden = True
End If
End If
Next
End Sub
答案1
嘗試Application.ScreenUpdating = False
在隱藏程式碼之前添加,並Application.ScreenUpdating = True
在隱藏程式碼之後添加。通常,此技巧可將大多數 VBA 巨集的速度提高約 10 倍,因為應用程式不必在程式碼執行時不斷重繪自身。
這對您的情況應該有所幫助,因為您是單獨檢查每個單元格並單獨隱藏行,而不是批量隱藏行。
答案2
我不明白你的程式碼是如何運作的。
你有以下兩行
If Not IsEmpty(cell) Then
If cell.Value = "" Then
如果第一行不為空,則第二行將始終傳回 false。第一行說“如果單元格不為空”,下一行說“如果該行為空”......好吧,它已經被評估為不為空。因此,你永遠不能隱藏該行,所以我不知道你的程式碼是如何工作的 - 我懷疑程式碼之外還有其他事情發生,但是...
不過,這在我的機器上運作良好
Sub Button1_Click()
Dim cell As Range
For Each cell In Range("A1:A1600")
If cell.Value = "" Then
cell.EntireRow.Hidden = True
End If
Next
End Sub
我有1600行,執行需要5秒左右