我有一個 Vba for 回圈,使用自動過濾器,然后將資料存盤到一個陣列中。下面標記的部分通常在幾個回圈后出現錯誤,說“找不到單元格”,然后在重新運行幾次或插入訊息框后再次作業。有什么建議可以從頭到尾運行而不會出現問題嗎?
For Each C In rng1.SpecialCells(xlCellTypeVisible).Rows
With rng2
.AutoFilter field:=9, Criteria1:=C.Columns(4)
.AutoFilter field:=12, Criteria1:=C.Columns(5)
DirArray(0) = rng2.SpecialCells(xlCellTypeVisible).Rows(1).Columns(23).Value <------------------- ERROR STARTS HERE //
DirArray(1) = rng2.SpecialCells(xlCellTypeVisible).Rows(1).Columns(24).Value
Set rng3 = rng2.SpecialCells(xlCellTypeVisible).Rows(1).Columns(1)
Set rng4 = rng2.SpecialCells(xlCellTypeVisible).Rows(1).Columns(1).End(xlDown).End(xlToLeft)
For Each i In x.Sheets("Sheet1").Range(rng3, rng4).Rows
If i.Columns(24) - i.Columns(23) > DirArray(1) - DirArray(0) Then
DirArray(0) = i.Columns(23).Value
DirArray(1) = i.Columns(24).Value
DirArray(2) = i.Columns(39).Value
DirArray(3) = i.Columns(40).Value
DirArray(4) = i.Columns(20).Value
End If
Next i
C.Columns(15).Value = DirArray(2
End With
Next C
uj5u.com熱心網友回復:
我假設當應用自動篩選導致 rng2 中沒有單元格可見時,它在回圈中失敗。SpecialCells(xlCellTypeVisible) 在沒有單元格的時候會報錯,所以不能直接測驗。
您在設定“嘗試”使用范圍的自動過濾器后添加了一個測驗,然后如果測驗通過,則將回圈的其余部分包裝在 if 陳述句中。例如:
For Each C In rng1.SpecialCells(xlCellTypeVisible).Rows
With rng2
.AutoFilter field:=9, Criteria1:=C.Columns(4)
.AutoFilter field:=12, Criteria1:=C.Columns(5)
Set lngTest = 0
On Error Resume Next
Set lngTest = rng2.SpecialCells(xlCellTypeVisible).Count
On Error Goto 0
If lngTest > 0 Then
DirArray(0) = rng2.SpecialCells(xlCellTypeVisible).Rows(1).Columns(23).Value
DirArray(1) = rng2.SpecialCells(xlCellTypeVisible).Rows(1).Columns(24).Value
Set rng3 = rng2.SpecialCells(xlCellTypeVisible).Rows(1).Columns(1)
Set rng4 = rng2.SpecialCells(xlCellTypeVisible).Rows(1).Columns(1).End(xlDown).End(xlToLeft)
For Each i In x.Sheets("Sheet1").Range(rng3, rng4).Rows
If i.Columns(24) - i.Columns(23) > DirArray(1) - DirArray(0) Then
DirArray(0) = i.Columns(23).Value
DirArray(1) = i.Columns(24).Value
DirArray(2) = i.Columns(39).Value
DirArray(3) = i.Columns(40).Value
DirArray(4) = i.Columns(20).Value
End If
Next i
C.Columns(15).Value = DirArray(2
End If
End With
Next C
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/484139.html
下一篇:VBA“未定義用戶定義型別”
