Excel 2013 VBA替代使用激活和select

所以我看看如何避免使用select和激活在另一篇文章这里:

如何避免在Excel VBAmacros中使用select

然而,那个post还没有提到如何避免使用Activate或Select在某些VBA代码中,如下例所示:

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后,这些错误开始发生…

请帮忙 !

关键是要始终以如下方式使用完整的引用:

ExcelFile.SheetInFile.CellOrRangeOnSheet.PropertyOfSaidCellOrRange = something

如果你这样做,那么你不必先select任何东西,但你可以直接对单元格或范围的属性(无论是它的价值或内部颜色或其他)。

上面的代码基本上转换为以下内容:

 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 ,因为每当您未明确引用某些内容时,就会使用当前活动或选定的单元格。 如果你每次都明确声明文件,表格,单元格和范围,那么你不必再select它们了,因为VBA不需要假定Range(Selection, Selection.End(xlToRight)).Select指向ActiveWorkbook.ActiveWorksheeet.Range.....etc.