“应用程序定义错误或对象定义错误” – 能够在某些电脑上运行脚本,但不能在其他电脑上运行
我正在为客户编写一个VBA加载项。 我testing了我的电脑和同事的电脑上的代码,并执行完美。 但是,当在客户的计算机上进行testing时,我在这条线上出现错误
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
是相当长,但我很乐意提供,如果这将是有益的。
撇开ActiveSheet属性的使用和.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
一直延伸到工作表底部的情况,则前者正试图将其最后一行从工作表中移出,并且会生成此错误。 后者将首先resize,因此要抵消的范围已经less了一行,您将不会收到错误。
尽pipe将工作表填充到底行不是不可能的,但更可能是由于错误地放入最后一行然后删除或格式化到最后一行的值。 这两种情况都不可取。
fwiw,我通常更喜欢Range.CurrentRegion属性,而不是Worksheet.UsedRange属性的数据块没有“孤岛”作为stream氓'最后单元格'被忽略,除非实际上有一个值在底部行..
试试这个,它在我的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
另外,您可以看到如何限制/删除.select
的使用。
如果仍然给出错误,请将totalRows = Activesheet...
replace为totalRows = activesheet.cells(1048576,1).End(xlup).Row
注意,假设列A(该范围中的1
)具有数据最后一行 如果不是,select另一列( B
= 2
, C
= 3
, D
= 4
等)。