Excel 2013 VBA替代使用激活并选择

时间:2016-08-09 20:03:37

标签: excel vba

所以我看了一下如何避免在其他帖子中使用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后,这些错误开始发生......

请帮忙!

1 个答案:

答案 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.