"Application Defined or Object Defined Error" - 能够 运行 在某些 PC 上编写脚本,但在其他 PC 上不能

"Application Defined or Object Defined Error" - Able to run script on some PCs but not others

我正在为客户编写 VBA 插件。我在我的电脑和同事的电脑上测试了代码,它执行得非常完美。但是在客户的电脑上测试的时候,在这行报错

 ActiveSheet.UsedRange.Offset(1, 0).Resize(ActiveSheet.UsedRange.Rows.Count - 1).Rows.Select

根据我的阅读,这 可能 是由于使用了 .select,但是,我不太确定应该用什么代替。

下面是整个区块:

ActiveSheet.UsedRange.Offset(1, 0).Resize(ActiveSheet.UsedRange.Rows.Count - 1).Rows.Select
Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$G2>30"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Font
    .Color = -16751204
    .TintAndShade = 0
End With
With Selection.FormatConditions(1).Interior
    .PatternColorIndex = xlAutomatic
    .Color = 10284031
    .TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = True

关于为什么会发生此错误的任何想法?整个 Sub 很长,但如果对您有帮助,我很乐意提供。

试试这个,它在我的 Excel (2010):

中运行良好
Sub tester()
Dim totalRows As Long
totalRows = ActiveSheet.UsedRange.Rows.Count
With ActiveSheet.UsedRange.Offset(1, 0).Resize(totalRows - 1).Rows

    .FormatConditions.Add Type:=xlExpression, Formula1:="=$G2>30"
    .FormatConditions(.FormatConditions.Count).SetFirstPriority

    With .FormatConditions(1)
        .Font.Color = -16751204
        .Font.TintAndShade = 0
        .Interior.PatternColorIndex = xlAutomatic
        .Interior.Color = 10284031
        .Interior.TintAndShade = 0
        .StopIfTrue = True
    End With

End With

End Sub

此外,您可以查看如何limit/remove使用.select

如果仍然出现错误,请将 totalRows = Activesheet... 替换为 totalRows = activesheet.cells(1048576,1).End(xlup).Row 请注意,这假定 A 列(该范围内的 1)具有转到最后一行的数据。如果不是,请选择另一列(B = 2C=3D=4 等)。

暂时搁置 ActiveSheet property 和 .Select 的使用,这个:

With ActiveSheet.UsedRange
    .Offset(1, 0).Resize(ActiveSheet.UsedRange.Rows.Count - 1).Rows.Select
End With

...和这个不一样:

With ActiveSheet.UsedRange
    .Resize(ActiveSheet.UsedRange.Rows.Count - 1).Offset(1, 0).Rows.Select
End With

如果您 运行 遇到 Excel 认为 .Usedrange 一直延伸到工作表底部的情况,则前者试图将其最后一行推离工作表,您将生成此错误。后者首先调整大小,因此要偏移的范围已经少了一行,你不会得到错误。

虽然将工作表填充到最后一行并非不可能,但更有可能是由于错误地将值放入最后一行然后删除或格式化到最后一行。这两种情况都不可取。

fwiw,我通常更喜欢 Range.CurrentRegion property instead of the Worksheet.UsedRange property 用于没有 'islands' 的数据块,因为流氓 'last cells' 将被忽略,除非底行中确实有一个值..