2015-10-15 91 views
0

我是新來的VBA excel,我堅持一個小問題。我有一個數據列表,我有兩個任務要完成。運行時錯誤91對象變量或塊變量未設置

第一個將刪除J列中任何等於0的值的行;

第二部分:我想遍歷剩餘的行並刪除I列中的值大於值J列中的任何行。

不過,我發現了以下錯誤:VBA運行時錯誤91對象變量或帶塊變量未設置

這是各國行:

For rw = .Cells(rows.Count, "E").End(xlUp).Row To 2 Step -1 

完整的代碼

Private Sub clearupdata_Click() 

Dim rows As Range, OSQty As Range, value As Long, rw As Long 

Set OSQty = Range("j2") 

Do Until OSQty.value = "" 
    value = Val(OSQty.value) 
    If (value = 0) Then 
     If rows Is Nothing Then 
      Set rows = OSQty.EntireRow 
     Else 
      Set rows = Union(OSQty.EntireRow, rows) 
     End If 
    End If 
    Set OSQty = OSQty.Offset(1) 
Loop 

If Not rows Is Nothing Then rows.Delete 

With Worksheets(1) '<~~ worksheet ~~> 
    For rw = .Cells(rows.Count, "E").End(xlUp).Row To 2 Step -1 
     If .Cells(rw, "I").Value2 > .Cells(rw, "J").Value2 Then 
      .rows(rw).EntireRow.Delete 
     End If 
    Next rw 
End With 

End Sub 
+1

使用'rows'作爲一個Range對象變量名是不是一個好主意因爲barrowc表示已經在應用程序,工作表和範圍對象 – barrowc

+0

上定義了'Rows'屬性,rows.count可能會認爲它是名爲rows的範圍變量。我嘗試重命名它的工作範圍 –

回答

1

只是改變:

For rw = .Cells(rows.Count, "E").End(xlUp).Row To 2 Step -1 

For rw = .Cells(.rows.Count, "E").End(xlUp).Row To 2 Step -1 

不同的是,當你從不同的表中rows.count不是在同一張紙上,因此跌倒在調用該函數。

+0

解決方案沒問題,但解釋應該稍有不同。它與不同的表單無關,'rows.count'沒有點將永遠不會工作,因爲'.Rows'是'Sheet'類的一個方法,並且總是必須以該類的對象爲前綴。 – mielk

+0

夠公平的。我真的認爲,如果沒有指定這種情況下的工作表,默認情況下需要'activesheet',並且我認爲它會正常運行,而我剛剛檢查過它沒有。 – Raugmor

0
Dim rows2 As Range 

不會.Cells(.rows.Count, "E").End(xlUp).Row後來妥協,

因爲rows.count會引發錯誤,+1 barrowc

相關問題