Excel 我收到运行时错误“91”:工作表上未设置对象变量或With block变量。可能没有选择工作表?

Excel 我收到运行时错误“91”:工作表上未设置对象变量或With block变量。可能没有选择工作表?,excel,vba,Excel,Vba,我遇到运行时错误“91”:当我尝试运行此代码时,未设置对象变量或With block变量。错误出现在第8行。在我的本地人窗口中,我看到: 表达式:值:类型 LR:0:0 i:0:0 ws:Nothing:工作表 所以我相信这不是选择工作表,但我可能离这里很远。 我还是VBA脚本的新手,因此任何帮助都将不胜感激 Sub ConditionalFormat() Dim LR As Long, i As Long Dim ws As Worksheet With

我遇到运行时错误“91”:当我尝试运行此代码时,未设置对象变量或With block变量。错误出现在第8行。在我的本地人窗口中,我看到:

表达式:值:类型

LR:0:0

i:0:0

ws:Nothing:工作表

所以我相信这不是选择工作表,但我可能离这里很远。 我还是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
几点意见:

在为变量赋值之前,它包含默认值。很长一段时间,这是0;对于工作表或其他对象,这算不了什么

通常,人们会尽量避免在代码中使用.Select,因为它会减慢速度

我也不知道代码会如何处理:使用SheetsOverall Stats.Select 当使用With ws语句时,这意味着类似ws.RangeA1的行可以改为.RangeA1。注意:如果省略句点,即使用RangeA1,代码将默认使用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

@米凯夫。我不小心发得太快了。请参阅我完成的答案。好的,现在它抛出运行时错误“1004”:对象“U工作表”的方法范围在第8行失败still@MikeF. 我打字时无意中把答案寄出了。如果你没有给ws赋值,每次你引用它时它都会抛出一个错误。@MikeF。抱歉,刚刚发现另一个问题。如果您将行总数(即1000000行)附加到G3,则它认为您正在尝试引用G31000000或G-31000范围。这可能就是range方法失败的原因。我修正了我的代码。是的,我更新了我的脚本以反映你的。我有一套ws=sheetsOverall统计数据,它现在正在抓取这张表。不过,我现在遇到了一个不同的错误。