2 Steuerung mit SelectionChange

Direkt zum Seiteninhalt

2 Steuerung mit SelectionChange

Tiggi
Veröffentlicht von Martin Küttel in VBA APP · 1 Mai 2022
Tags: VBACode
Tabelle Journal des Kassabuch
Diese Tabelle dient nun als Beispiel. Sie ist auch auf meiner Webseite zu finden Link.



Die Inhalte sind frei erfunden und dienen nur zur Erklärung der Bedienung.
Steuerung mit der Funktion Sub Worksheet_SelectionChange
Grundsätzlich erfogt Aktivierung der Funktion auf einen Zellenwechsel (SelectionChange) des Benutzer.
Das heisst man kann erkennen, was der Benutzer auf der Tabelle gerade anwählt. Genau darauf basiert nun die Steureung der Tabelle.

Zur Steuerung verwende ich hier die Zellfarbe (Interior.Color) zum Erkennen was der Benutzer anwählt respektive ausführen möchte. Das folgende Bild erklärt welche Reaktion beim Anklicken einer farbigen Zelle ausgeführt wird.


Hier der Code der diese Steuerung ausführt
PS: Die verwendeten Variablen sind Public in einem separaten Modul definiert
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   ' Tabelle Journal (Selektion ermitteln)
   If bolOnce = True Then Exit Sub 'auf Zellenwechsel nicht reagieren (Zugriff einer Funktion)
   lngR = Target.Row       'gewählte Zeilennummer in einer Variablen sichern
   lngC = Target.Column   'gewählte Spaltenummer in einer Variablen sichern
   lngFarbe = ActiveSheet.Cells(lngR, lngC).Interior.Color 'Farbe der gewählten Zelle einlesen (Long Wert)
   lngLastR = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row   'Letzte Zeile in der Spalte 1 ermitteln
   ' ****************************
   ' ausführbare Funktionen abarbeiten
   '*****************************
   'Monatsummen erzeugen (Zellfarbe Orange)
   '----------------------------------
   If lngFarbe = 6740479 And lngR = 2 Then 'Interior.Color = Orange
       With ActiveSheet
           sngSumm = 0
           'Summieren Kategorien
          Code ausgeblendet
       End With 'Activesheet
       GoTo Ausstieg
   End If 'Monatssummierung organge Zellen

   'Menü öffnen (Zeilfarbe hellblau)
   '-------------------------------------------
   If Target.Interior.Color = RGB(197, 217, 241) Then UF_Control_KassaBu.Show ' Dialog Menü öffnen

   'Nicht im Buchungsbereich  (Zellfarbe weiss)
   '--------------------------------
   If lngR < 3 And lngC > 4 Then GoTo Ausstieg 'Aussteigen wenn nicht im benutzten Bereich
   lngLastR = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row   'Letzte Zeile ermitteln
   If Target.Rows.Count > 1 Or Target.Columns.Count > 1 Then GoTo Ausstieg 'Aussteigen wenn mehr als eine Zelle selektiert
   If lngR > lngLastR + 1 Then GoTo Ausstieg 'Unterhalb letzter benutzter Zeile  

   'Ausgaben korrigieren (Zellfarbe rose)
   '--------------------------------------------------
   If lngFarbe = 13408767 Then
       strTyp = "A" 'Ausgabe
       UF_KassaBu.Show
   End If

   'Einnahmen korrigieren (Zellfarbe springreen)
   '-----------------------------------------------------------
   If lngFarbe = 8388352 Then
       strTyp = "E" 'Einnahmen
       UF_KassaBu.Show
   End If
   'Neue Buchung (Zellfarbe gelb)
   '------------------------------------------
   If lngFarbe = 65535 Then
       strTyp = "N"
       UF_KassaBu.Show
   End If
   'Kassabuch nach Datum sortieren (Zellfarbe violett)
   '------------------------------------------------------------------
   If lngFarbe = 10498160 Then
       bolOnce = True
       ''strBereich = "A2:D" & lngLastR
       KassaSort   'Sub Local
       MsgBox " Kassabuch nach Datum Sortiert", vbOKOnly, "Kassabuch sortieren."
   End If
Ausstieg:       'keine Aktion
   bolOnce = False
ActiveSheet.Columns("A:G").AutoFit 'Alle Zellen ihrem Inhalt anpassen
   ActiveSheet.Cells(1, 1).Select
End Sub

Erklärungen zum Code
Kommentare sind grün eingefärbt.
Der eingerückte Text zeigt die Strukturierung (Verschalchtelung) im Code.
UF_Formname.Show öffnet einen Dialog zur Eingabe von Daten.
Wenn eine Userform Daten in die Tabelle abpeichert, muss verhindert werden, dass die Sub [SelectChange] ausgeführt wird.
Das wird mit dem Befehl [If bolOnce = True Then Exit Sub] verhindert.
Mein Trick;
Vor den Verlassen der Sub sehen sie immer den Befehl ActiveSheet.Cells(1, 1).Select
alternativ kann auch ActiveSheet.Range("A1").Select) stehen.
Das bezweckt, dass der Bediener in keiner Zelle selber Daten eingeben kann (ausser in Zelle A1, diese wird aber nie abgefragt), denn es wird immer, auch wenn eine Zelle auserhalb des Arbeitsbereich (Zellfarbe Weiss) selektiert wird,  sofort auf die Zelle A1 umgesteuert. Das bedeute auch, dass man auf das Sperren von Tabelle oder Zellbereichen einer Tabelle verzichten kann .






Zurück zum Seiteninhalt