b.wag Ответов: 1

Как я могу правильно обрабатывать "1004" не найденных ячеек?


Привет,

Я просматривал этот форум и другие, чтобы найти подходящий ответ, но не наткнулся ни на один, который подходит или работает.

У меня есть следующий код:
'Filter data by PO and by material number
                For z = 2 To LastRowUqPO
                    'Filter by unique PO
                    On Error GoTo ErrorM
                    wbIT.Sheets("Bewerkingen").Range("A1:E" & LastRowBewerking).AutoFilter _
                    field:=2, Criteria1:=wbIT.Sheets("Bewerkingen").Range("G" & z).Value, Operator:=xlFilterValues
                    On Error GoTo 0
                    For w = 2 To LastRowUqMat
                        'Filter by unique material number
                        On Error GoTo ErrorL
                        wbIT.Sheets("Bewerkingen").Range("A1:E" & LastRowBewerking).AutoFilter _
                        field:=3, Criteria1:=wbIT.Sheets("Bewerkingen").Range("H" & w).Value, Operator:=xlFilterValues
                        On Error GoTo 0
                        ''Copy filtered data to new area
                        On Error GoTo ErrorL
                        Set rngCopy = wbIT.Sheets("Bewerkingen").Range("B2:C" & LastRowBewerking).SpecialCells(xlCellTypeVisible)
                        If rngCopy Is Nothing Then GoTo NextL
                        wbIT.Sheets("Bewerkingen").Range("B2:C" & LastRowBewerking).SpecialCells(xlCellTypeVisible).Copy
                        On Error GoTo 0


Я добавил следующую обработку ошибок:
                        ''Error handling for NextM
ErrorM:                 If Err.Number = 1004 Then
                            GoTo NextM
                        Else
                            On Error GoTo 0
                        End If
                        ''Error handling for NextL
ErrorL:                 If Err.Number = 1004 Then
                            GoTo NextL
                        Else
                            On Error GoTo 0
                        End If


Хотя я считаю, что у меня есть много обработки ошибок, я все еще не могу пройти мимо этой части кода:
''Copy filtered data to new area
                        On Error GoTo ErrorL
                        Set rngCopy = wbIT.Sheets("Bewerkingen").Range("B2:C" & LastRowBewerking).SpecialCells(xlCellTypeVisible)
                        If rngCopy Is Nothing Then GoTo NextL


Список объявлений:
Dim wbIT As Workbook
Dim wbSAP As Workbook
Dim wbPGTL As Workbook
Dim DataFile As String
Dim LastRow As Long
Dim LastCol As Long
Dim LastRowIO As Long
Dim LastColIO As Long
Dim LastRowIOP As Long
Dim LastRowFY As Long
Dim i As Long
Dim w As Long
Dim x As Long
Dim y As Long
Dim z As Long
Dim Folder As String
Dim StrFile As String
Dim findrow As Range
Dim findrownumber As Long
Dim LastRowPGTL As Long
Dim LastRowPO As Long
Dim LastRowUnique As Long
Dim LastRowBewerking As Long
Dim LastRowUqPO As Long
Dim LastRowUqMat As Long
Dim LastRowUnq As Long
Dim LastRowUnq2 As Long
Dim FirstRowSum As Long
Dim LastRowSum As Long
Dim PotentialIssue As String
Dim rngDupl() As Range
Dim rngCell As Range
Dim rngCheck As Range
Dim lduplicates As Long
Dim myPath As String
Dim myStart As String
Dim myFile As String
Dim fileType As String
Dim rngSort As Range
Dim rngKey As Range
Dim rngCopy As Range


Может быть, вы, ребята, видите, что я упускаю?

Ошибка: 1004 ячейки не найдены

Отфильтрованные данные действительно пусты, поэтому мне нужен код для перехода к следующей итерации цикла. В текущем коде неизбежно не будет видимых ячеек в определенной комбинации фильтров, но все они должны быть проверены.

Код отлично работает до тех пор, пока есть отфильтрованные значения.

Если вам потребуется дополнительная информация, я буду рад ее предоставить.

Заранее благодарю вас!

Что я уже пробовал:

Об ошибке GoTo NextL/NextM
если rngCopy - это ничто, то GoTo NextL/NextM
изменение настроек захвата ошибок в настройках Tools >

1 Ответов

Рейтинг:
1

Maciej Los

Ваш код является неполным, поэтому он делает его нечитаемым. Что касается меня, то есть для многих On Error команды...


Очень простое использование обработчика ошибок и возвращающей подпрограммы (подходит для вас)-это:

Sub FilterAndCopyData()
    Dim wbIT As Workbook, wbDst
    'other variables
    Dim srcWsh As Worksheet, dstWsh As Worksheet
    Dim rangeToCopy As Range

    On Error Goto Err_FilterAndCopyData

    Set wbIT = Application.Worksbooks.Open("fullfilename")
    Set wbDst = ThisWorkbook
    Set srcWsh = wbIT.Worksheets("Bewerkingen")
    Set dstWsh = wbDst.Worksheets("AllData")

    For z = 2 To LastRowUqPO
        'Filter data
         Set rangeToCopy = srwsh.Range("A1:E" & LastRowBewerking).AutoFilter _
                    field:=2, Criteria1:=wbIT.Sheets("Bewerkingen").Range("G" & z).Value, Operator:=xlFilterValues
        'try to copy
        rangeToCopy.Copy
        'and paste
        dstWsh.Range("RangeToPasteData").PasteSpecial xlPasteValues

'subroutine where error handler returns in case of 1004 error message
NextRow:        
        Application.CutCopyMode = False
    Next z

Exit_FilterAndCopyData:
    'clean up
    On Error Resume Next
    Set rangeToCopy = Nothing
    'other instructions
    Exit Sub

Err_FilterAndCopyData:
    Select Case Err.Number
        Case 1004
            'go to the next row in a for-next loop
            Resume NextRow 'here!

        Case Else
            MsgBox Err.Description, vbExclamation, Err.Number
            Resume Exit_FilterAndCopyData
    End Select

End Sub


Удачи вам!