我正在为客户编写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
非常冗长,但如果有帮助,我很乐意提供它。
答案 0 :(得分:1)
试试这个,它在我的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...
替换为totalRows = activesheet.cells(1048576,1).End(xlup).Row
请注意,这假设列A(该范围内的1
)具有到最后一行的数据。如果没有,请选择其他列(B
= 2
,C
= 3
,D
= 4
等。)
答案 1 :(得分:1)
暂且不使用ActiveSheet property和。选择片刻,这个:
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而不是Worksheet.UsedRange property的数据块,没有'岛屿'作为流氓最后的细胞'被忽略,除非底行确实有一个值..