2017-05-04 226 views
1

我一直在使用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我試過vbNullStringisEmpty() = TRUE,其中他們都沒有刪除行。我直接在電子表格中使用公式=ISBLANK(),結果是真實的。

我注意到,如果我多次運行代碼,最終會刪除所有我想要的行。我問自己爲什麼它不能在第一次運行中將其全部清除?謝謝。

+5

建議:嘗試向後運行循環:'For i = nLines to 2 Step -1'。 – paulsm4

+3

解釋是:假設你有10行(編號從1到10),你刪除第2行,然後第3到10行向上移動一個併成爲第2行到第9行(第3行成爲第2行,第4行成爲第3行,... )。所以這些行改變了他們的立場。 **但現在'我'增量,你走一條線**,但它不應該因爲下一行已經成爲*當前*線,這就是爲什麼我們錯過了這條線。如果從最後開始,那麼行向下移動並不重要,因爲我們向上走。 –

+0

@裴,那麼你解釋後似乎很簡單。謝謝! – jf8769

回答

0

解決方案確實非常簡單,只需要按照paulsm4的建議反向運行環路。我不得不爲For i = nLines to 2 Step -1更改For i = 2 To nLines

解釋是,當VBA刪除該行並將其向上移動時,計數器遞增並向下一行,「丟失」一些行,如Peh解釋的那樣。