niedziela, 25 listopada 2012

Zdarzenia - SheetSelectionChange

VBA pozwala na przechwycenie zdarzeń wywoływanych w Excel - Np otwarcie arkusza czy dodanie nowej zakładki. Opcja ta pozwala na zdefiniowanie własnej obsługi popularnych czynności wykonywanych w arkuszu.

Na początek ciekawy przykład ze zdarzeniem SheetSelectionChange - czyli akcją wywoływaną w momencie zmiany zaznaczenia w arkuszu.

Poniżej skrypt dynamicznie kolorujący  tło aktualnie zaznaczonych komórek.


Na początek można wygenerować pusty skrypt dla odpowiedniego zdarzenia.
Uwaga! W okienku rozwijanym opcję General zmieniamy na Workbook tak by można było z listy rozwijanej wybrać odpowiednią opcję.



A potem w to miejsce pustego wklejamy poniższe makro

'wymuszamy jawna deklaracje zmiennych
Option Explicit
Public staryZakres As Range, staryKolor As Single


Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, _
    ByVal Target As Range)
    
    'ignorowanie bledow (gdyby np staryZakres, staryKolor nie istnialy)
    On Error Resume Next
    
    staryZakres.Interior.ColorIndex = staryKolor
    staryKolor = Target.Interior.ColorIndex
    
    Target.Interior.ColorIndex = 45
    
    Set staryZakres = Target
End Sub

Inne zdarzenia dostępne z poziomu arkusza to:
  • Activate
  • AddinInstall
  • AddinUninstall
  • AfterXmlExport
  • AfterXmlImport
  • BeforeClose
  • BeforePrint
  • BeforeSave
  • BeforeXmlExport
  • BeforeXmlImport
  • Deactivate
  • NewSheet
  • Open
  • PivotTableCloseConnection
  • PivotTableOpenConnection
  • RowsetComplete
  • SheetActivate
  • SheetBeforeDoubleClick
  • SheetBeforeRightClick
  • SheetCalculate
  • SheetChange
  • SheetDeactivate
  • SheetFollowHyperlink
  • SheetPivotTableUpdate
  • SheetSelectionChange
  • Sync
  • WindowActivate
  • WindowDeactivate
  • WindowResize

2 komentarze:

  1. Witam .Wiele jest tematów na temat kopiowania danych z arkusza do arkusza lecz nie mogę wykombinować jak
    1.Skopiować tabelkę z zawartością zachowując format czcionkę etc.
    2.W tabeli w arkuszu kopiowanym czasami zwiększam ilość wierszy lecz moje makro tylko kopiuje 7 nie koryguje tego że dodano np.2 wiersze.Dodam że 7 wiersz to wyniki z poprzednich wiec wiersze zawsze dodawane są przed 7.
    3.Po skopiowaniu Tabeli dane powinny być skasowane lecz odmiennie do kopiowania tabele tym razem mi kasuje a nie powinno kasować linii tabeli lecz same dane.

    Makro jakie wydzióbałem

    Sub Przenies2()
    Dim OstW As Long, OstWA As Long
    Sheets("Dane").Select
    OstWA = Cells(ActiveSheet.Rows.Count, "B").End(xlUp).Row
    Range(Cells(7, 1), Cells(OstWA, 8)).Select
    Selection.Copy
    Sheets("Osoby").Select
    OstW = Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row
    Cells(OstW + 3, 1).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    inf = MsgBox("Usunąć dane z 'Dane'?", vbYesNo, "UWAGA")
    If inf = vbYes Then
    Sheets("Dane").Select
    Range(Cells(7, 1), Cells(OstWA, 8)).Select
    Selection.Clear
    Cells(7, 1).Select
    End If
    End Sub

    Czy ktoś jest wstanie pomóc rozwiązać ten problem?

    OdpowiedzUsuń
    Odpowiedzi
    1. Ad 1)

      tak na szybko: zmień xlPasteValues na xlPasteAll

      xlPasteAll - kopiuje wszystko zamiast samych wartości

      Usuń