Диапазон SpecialCells (xlCellTypeVisible) должен читаться как НИЧЕГО в следующем цикле рабочего листа - PullRequest
0 голосов
/ 01 мая 2020

Мне нужна помощь с частью «если диапазон ничего не значит».

Допустим, у меня есть 4 листа:

  • Рабочий лист проекта 1 - должен пропустить, отфильтрованный диапазон - ничто, номер проекта отсутствует в необработанном файле

  • Рабочий лист проекта 2 - необходимо запустить код, подходящий диапазон не является ничем, номер проекта существует

  • Рабочий лист проекта 3 - должен быть пропущен, отфильтрованный диапазон - ничто, номер проекта отсутствует в необработанном файле

  • Рабочий лист проекта 4 - код должен быть запущен, подходящий диапазон не ничего, номер проекта существует

Проект 3 не пропускается, читается диапазон not not последней таблицы (Проект 2). Пожалуйста, сообщите.

Код:

' dim declarations...
' set assignments....

    If Worksheets("Raw").AutoFilterMode = True Then
        Worksheets("Raw").AutoFilterMode = False
    End If

    With ws_raw
        int_last_row_of_raw = .Cells(.Rows.Count, 1).End(xlUp).Row
        int_last_col_of_raw = 16
        Set rng_raw = .Range("A2", .Cells(int_last_row_of_raw, int_last_col_of_raw))
    End With

    With ws_raw.Sort
            .SortFields.Clear
            .SortFields.Add2 Key:=Range("A2"), Order:=xlAscending
            .SortFields.Add2 Key:=Range("L2"), Order:=xlDescending
            .SetRange rng_raw
            .Header = xlYes
            .Apply
    End With

    For Each ws In ThisWorkbook.Worksheets

        If Not ws Is ws_raw _
            And Not ws Is ws_master_tracker _
            And Not ws Is ws_title_page _
            And Not ws Is ws_sample _
            And Not ws Is ws_closing _
            And Not ws Is ws_ref _
            And Not ws Is ws_pdf_template _
            And Not ws.Visible = xlSheetHidden Then

            project_name = ws.Range("E3").Value

            With rng_raw
                    .AutoFilter 1, project_name
            End With


            On Error Resume Next
                Set rng_filtered_raw = ws_raw.Range("J3", ws_raw.Cells(int_last_row_of_raw, int_last_col_of_raw)).SpecialCells(xlCellTypeVisible)
            On Error GoTo 0

            ' not doing its thing on project 3 worksheet
            If rng_filtered_raw Is Nothing Then
                If project_name = "" Then
                    project_name = "[BLANK]"
                End If
                not_found_project_numbers = not_found_project_numbers & ws.Name & " : " & project_name & vbNewLine
                MsgBox ("skipped, project number not found, moving to the next ws")
            Else
                int_last_row_of_ws = 46
                For int_current_row_of_ws = 11 To int_last_row_of_ws

                    cell_value = ws.Cells(int_current_row_of_ws, 3).Value

                    Select Case cell_value

                        'Concept Stage
                        Case Is = "Creation,Overview,Concept,Scope,Potential"
                            module_to_look_for = "Project Creation"

                        Case Is = "Product Briefing !"

                        ' 20 or 30 more cases

                        ' Others that are manually typed
                        Case Else
                            module_to_look_for = "MANUAL"

                    End Select

                    If Not rng_filtered_raw Is Nothing Then
                        If module_to_look_for = "MANUAL" Then
                            ' Do nothing
                            ' Highlight cell, etc.
                        Else
                            look_up_result = Application.WorksheetFunction.VLookup(module_to_look_for, rng_filtered_raw, 3, False)
                            If look_up_result = "" Then
                                ws.Cells(int_current_row_of_ws, 56).Value = "Blank Date!"
                            Else
                                ws.Cells(int_current_row_of_ws, 56).Value = look_up_result
                            End If
                        End If
                    End If
                Next int_current_row_of_ws
            End If
        End If
    Next ws

1 Ответ

1 голос
/ 01 мая 2020

Просто, чтобы немного расширить мой комментарий выше, который, кажется, сделал свое дело:

Из-за On Error Resume Next всякий раз, когда объект диапазона не может быть установлен, объект диапазона не * Значение 1005 * установлено равным нулю, вместо этого оно остается равным тому, что было установлено в предыдущей итерации l oop. (Без оператора On Error Resume Next вы получите ошибку времени выполнения, когда объект диапазона rng_filtered_raw не может быть установлен). По этой причине приведенный ниже условный оператор для отлова, когда объект диапазона является ничем, не работает должным образом.

Следовательно, добавление Set rng_filtered_raw = Nothing перед оператором On Error Resume Next должно решить эту проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...