Excel 我收到运行时错误“91”:工作表上未设置对象变量或With block变量。可能没有选择工作表?
我遇到运行时错误“91”:当我尝试运行此代码时,未设置对象变量或With block变量。错误出现在第8行。在我的本地人窗口中,我看到: 表达式:值:类型 LR:0:0 i:0:0 ws:Nothing:工作表 所以我相信这不是选择工作表,但我可能离这里很远。 我还是VBA脚本的新手,因此任何帮助都将不胜感激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
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统计数据,它现在正在抓取这张表。不过,我现在遇到了一个不同的错误。