所以我看了一下如何避免在其他帖子中使用Select和Activate:
How to avoid using Select in Excel VBA macros
但是,其他帖子仍未提及我如何避免在某些VBA代码中使用Activate或Select,如下例所示:
ThisWorkbook.Sheets("Data").Activate
ThisWorkbook.Sheets("Data").Select
Range("A1").Select
Range(Selection, Selection.End(xlToRight)).Select
With Selection.Interior
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorDark1
.TintAndShade = -0.149998474074526
.PatternTintAndShade = 0
End With
我需要弄清楚如何避免使用.Activate以及如何避免使用.Select,因为这段代码在这些代码中给我一个错误......
从Excel 2010升级到Excel 2013后,这些错误开始发生......
请帮忙!
答案 0 :(得分:1)
关键是始终以如下方式使用完整引用:
ExcelFile.SheetInFile.CellOrRangeOnSheet.PropertyOfSaidCellOrRange = something
如果你这样做,那么你不必先选择任何东西,但你可以直接寻址单元格或范围的属性(无论是它的值还是内部颜色或其他任何东西)。
通过以上代码,您的代码基本上转换为以下内容:
With ThisWorkbook.Sheets("Data")
With .Range(.Range("A1"), .Range("A1").End(xlToRight)).Interior
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorDark1
.TintAndShade = -0.149998474074526
.PatternTintAndShade = 0
End With
End With
请注意,您的代码之间仅需要selection
,因为无论何时未能明确引用某些内容,都会使用当前活动或选定的单元格。如果您每次都明确声明文件,工作表,单元格和范围,那么您不必再选择它们,因为VBA不必假设Range(Selection, Selection.End(xlToRight)).Select
引用ActiveWorkbook.ActiveWorksheeet.Range.....etc.
。