Я получаю ошибку во время выполнения '91': переменная объекта или переменная блока не установлены на листе.Возможно, не выбираете лист? - PullRequest
0 голосов
/ 23 мая 2018

При попытке запустить этот код появляется «Ошибка времени выполнения 91»: переменная объекта или переменная блока не установлена ​​».ошибка появляется в строке 8. В моем окне локальных пользователей я вижу:

Выражение: Значение: Тип

LR: 0: 0

i: 0: 0

ws: Ничего: рабочий лист

Так что я считаю, что он не выбирает рабочий лист, но я могу быть далеко здесь.Я новичок в сценариях VBA, поэтому любая помощь будет оценена!

    Sub ConditionalFormat()

    Dim LR As Long, i As Long
    Dim ws As Worksheet


     With Sheets("Overall Stats").Select
        LR = ws.Range("G3" & Rows.Count).End(xlUp).Row 'Line 8 here
            For i = 1 To LR
                With ws.Range("G" & i)
                   If .Value = "ISO2" Then

                        Range("L3").Select
                        Range(Selection, Selection.End(xlDown)).Select
                        Selection.FormatConditions.AddColorScale ColorScaleType:=3

                        End With
                    End If
                End With
            Next i
        End With
    End Sub

1 Ответ

0 голосов
/ 23 мая 2018

Несколько комментариев:

  • Пока переменной не присвоено значение, она содержит значение по умолчанию.В течение долгого времени это 0;для листа (или другого объекта), который Nothing.

  • Обычно люди стараются избегать использования .Select в коде, потому что это замедляет его.

    • Я также не знаю, что код попытается сделать с этим: With Sheets("Overall Stats").Select
  • При использовании оператора With ws это означает, что строкакак ws.Range("A1") может вместо этого стать .Range("A1"). Примечание: если вы пропустите период (т. Е. Используйте Range("A1"), код по умолчанию будет использовать назначенный диапазон из ActiveWorksheet - который не обязательно тот, который указан в операторе With.)


См. Обновленный код ниже:

Sub ConditionalFormat()

    Dim LR As Long, i As Long
    Dim ws As Worksheet

    Set ws = Sheets("Overall Stats")


    With ws
        LR = .Range("G" & .Rows.Count).End(xlUp).Row 'Line 8 here 'removed the `3` from `G3`
        For i = 1 To LR
            With .Range("G" & i)
                If .Value = "ISO2" Then

                    Range(ws.Range("L3"), ws.Range("L3").End(xlDown)).FormatConditions.AddColorScale ColorScaleType:=3

                    'End With 'This line is extraneous and should be removed. It WILL throw an error, if uncommented.
                End If
            End With
        Next i
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...