2 Steuerung mit SelectionChange
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 definiertPrivate 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 = OrangeWith ActiveSheetsngSumm = 0'Summieren KategorienCode ausgeblendetEnd With 'ActivesheetGoTo 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 BereichlngLastR = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row 'Letzte Zeile ermittelnIf Target.Rows.Count > 1 Or Target.Columns.Count > 1 Then GoTo Ausstieg 'Aussteigen wenn mehr als eine Zelle selektiertIf lngR > lngLastR + 1 Then GoTo Ausstieg 'Unterhalb letzter benutzter Zeile'Ausgaben korrigieren (Zellfarbe rose)'--------------------------------------------------If lngFarbe = 13408767 Then
strTyp = "A" 'AusgabeUF_KassaBu.Show
End If'Einnahmen korrigieren (Zellfarbe springreen)'-----------------------------------------------------------If lngFarbe = 8388352 Then
strTyp = "E" 'EinnahmenUF_KassaBu.Show
End If'Neue Buchung (Zellfarbe gelb)'------------------------------------------If lngFarbe = 65535 Then
strTyp = "N"UF_KassaBu.Show
Ausstieg: 'keine AktionEnd If'Kassabuch nach Datum sortieren (Zellfarbe violett)'------------------------------------------------------------------If lngFarbe = 10498160 ThenbolOnce = True''strBereich = "A2:D" & lngLastRKassaSort 'Sub LocalMsgBox " Kassabuch nach Datum Sortiert", vbOKOnly, "Kassabuch sortieren."End If
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 .