What is the difference between Sheets.Select and Sheets.Activate?

后端 未结 3 1704
野性不改
野性不改 2020-12-15 23:00

In VBA for Excel, what is the difference between Sheets.Select and Sheets.Activate ?

相关标签:
3条回答
  • 2020-12-15 23:36

    .activate is you clicking on the worksheet tab.

    .select simulates you doing a control and click on the tab. In VBA you're not in the sheet yet.

    You can .select more than one sheet but .activate only one.

    0 讨论(0)
  • 2020-12-15 23:49

    The difference is in their flexibility.

    Activate make the specified sheet the active sheet, and may only be applied to a single sheet

    Select allow for optionally extending the currently selected sheets to include the specified sheet, eg

    Worksheets("Sheet2").Select Replace:=False
    

    and also allow for selecting an array of sheets

    Sheets(Array("Sheet3", "Sheet2")).Select
    

    In their minimal form Select and Activate do the same thing.

    For example, if only one sheet is currently selected (say Sheet3) or if more than one sheet is selected but excluding say Sheet2, then Worksheets("Sheet2").Select and Worksheets("Sheet2").Activate both make Sheet2 the sole selected and active sheet.

    On the other hand, if say both Sheet2 and Sheet3 are selected and Sheet2 is the active sheet, then Worksheets("Sheet3").Activate leaves both sheets selected and makes Sheet3 the active sheet, whereas Worksheets("Sheet2").Select makes Sheet3 the sole selected and active sheet.

    0 讨论(0)
  • 2020-12-15 23:53

    To expand on the above: When the code below is run with Replace:=False no worksheet deactivation event occurs on sheet4. If Replace:=True is used instead then the de-activation event will fire.

    Preventing the event is desirable in most circumstances as it can cause unexpected behaviour.

    This means that select is only the equivalent of CTRL+Clicking a worksheet tab IF replace:=false is used.

    sub a

    Dim rng As Range
    
    Sheet4.Select Replace:=False
    Set rng = Selection
    
    Sheet5.Select Replace:=True
    Selection = rng.Value
    

    end sub

    Thanks for your posts as it helped me understand the difference.

    Harvey

    0 讨论(0)
提交回复
热议问题