我一直在使用IF條件來查找電子表格中的空白單元格,然後刪除我不想要的部分並將其他單元格向上移動。它進展順利,但是當我使用這個數據庫時,代碼不會刪除一些行。VBA不刪除空白單元
這裏是下面的部分在那裏找到並刪除該行的一部分:
Dim wb As Workbook
Dim Disciplinas As Worksheet
Set wb = ThisWorkbook
Set Disciplinas = wb.Sheets("Disciplinas")
Dim start_time As range
Dim i As Integer, nLines As Integer
nLines = Disciplinas.Cells(Rows.Count, 2).End(xlUp).Row
Set start_time = Disciplinas.Rows(1).Find(what:="HR_INICIO", LookIn:=xlValues, lookat:=xlWhole)
For i = 2 To nLines
If Disciplinas.Cells(i, start_time.Column) = "" Then
Disciplinas.Cells(i, 2).Resize(, 13).Delete Shift:=xlUp
End If
Next
這裏是文件:Spreadsheet(我有麻煩的細胞E105 E125到其他的人已經。在我第一次運行代碼時被刪除)。
而不是If Disciplinas.Cells(i, start_time.Column) = "" Then
我試過vbNullString
和isEmpty() = TRUE
,其中他們都沒有刪除行。我直接在電子表格中使用公式=ISBLANK()
,結果是真實的。
我注意到,如果我多次運行代碼,最終會刪除所有我想要的行。我問自己爲什麼它不能在第一次運行中將其全部清除?謝謝。
建議:嘗試向後運行循環:'For i = nLines to 2 Step -1'。 – paulsm4
解釋是:假設你有10行(編號從1到10),你刪除第2行,然後第3到10行向上移動一個併成爲第2行到第9行(第3行成爲第2行,第4行成爲第3行,... )。所以這些行改變了他們的立場。 **但現在'我'增量,你走一條線**,但它不應該因爲下一行已經成爲*當前*線,這就是爲什麼我們錯過了這條線。如果從最後開始,那麼行向下移動並不重要,因爲我們向上走。 –
@裴,那麼你解釋後似乎很簡單。謝謝! – jf8769