VBA: Button, wechsle Dich!

Format-Schaltflächen ökonomisch programmieren

Von: Lorenz Hölscher
Stand: 4. Mai 2011
Ersten Kommentar schreiben

Inhalt

Downloads zu diesem Beitrag

Newsletter abonnieren

Flexible Schaltflächen

Wenn Sie auf einem selbstprogrammierten Dialog viele Textboxen mit Bedienungselementen brauchen, können Sie den Aufwand mit einem einfachen Trick reduzieren: Anstatt zu jeder Textbox die passenden Buttons vorzubereiten, verschieben Sie diese einfach immer nur zur gerade aktiven Textbox. Das macht sowohl den Dialog übersichtlicher als auch den VBA-Code erheblich kürzer, wie Lorenz Hölscher weiß.

Flexible Schaltflächen

Auf vielen selbstprogrammierten Dialogen gibt es Eingabefelder mit der Möglichkeit, deren Inhalt fett, kursiv o. ä. zu formatieren. Das führt dann oft dazu, dass neben jedem Eingabefeld die Format-Schaltflächen eingebaut werden, wie es das folgende Beispiel zeigt:

Ein schlecht gestalteter Dialog, der mit Schaltflächen überladen ist

Zwar "weiß" dann jede Schaltfläche, zu welchem Eingabefeld sie gehört, aber dafür müssen Sie auch jedes ihrer Klick-Ereignisse einzeln programmieren. Im obigen Beispiel sind das für 7 Eingabefelder schon 21 ..._Click-Prozeduren. Das ist nicht nur optisch überladen, sondern auch ein riesiger Code-Aufwand.

Stattdessen benötigen Sie lediglich ein Schaltflächen-Paket, welches Sie jeweils zum gerade aktuellen Eingabefeld schieben. Dieses lässt sich immer mit Me.ActiveControl ermitteln, am besten beim ..._Enter-Ereignis des Eingabefeldes, denn nur dann ändert es sich sinnvollerweise.

Damit sich das ActiveControl nicht versehentlich ändert (z. B. beim Klick auf eine Schaltfläche!!), speichern Sie dieses sofort in einer Modul-öffentlichen Variablen m_ctlEdit. Jedes der Eingabefelder wird später diese Variable beeinflussen und die Schaltflächen zu sich heranholen. Daher können Sie das sofort in eine eigene Prozedur HoleButtons auslagern, welche von allen Eingabefeldern aus aufgerufen wird:

Option Explicit

Dim m_ctlEdit As TextBox
Dim m_strNameAktiv As String

Private Sub edtVorname_Enter()
	HoleButtons
End Sub
Private Sub edtNachname_Enter()
	HoleButtons
End Sub
Private Sub edtStrasse_Enter()
	HoleButtons
End Sub
Private Sub edtPLZOrt_Enter()
	HoleButtons
End Sub
Private Sub edtTelefon_Enter()
	HoleButtons
End Sub
Private Sub edtFax_Enter()
	HoleButtons
End Sub
Private Sub edtEmail_Enter()
	HoleButtons
End Sub

Private Sub HoleButtons()
	m_strNameAktiv = Mid(Me.ActiveControl.Name, 4)
	Set m_ctlEdit = Me.Controls("edt" & m_strNameAktiv)
End Sub

Hier heißen die Beschriftungsfelder lbl... und die Eingabefelder edt... mit dem gleichen Namen, wie es die so genannte Ungarische Notation sowieso nahe legt. Das hat unter anderem den Vorteil, dass zu jedem Eingabefeld immer das zugehörige Beschriftungsfeld ermittelbar ist.

Als Mitglied können Sie diesen Beitrag weiterlesen!

Werden Sie Mitglied und testen Sie akademie.de 14 Tage lang kostenlos!

In den ersten 14 Tagen haben Sie Zugriff auf alle Inhalte auf akademie.de, außer Downloads. Sie können in dieser Zeit ohne Angabe von Gründen stornieren. Eine E-Mail an service@akademie.de genügt. Nur wenn Sie Mitglied bleiben, wird der Mitgliedsbeitrag nach Ende der 14tägigen Stornofrist abgebucht.

Ich bin bereits Mitglied
Jetzt Mitglied werden und akademie.de 14 Tage kostenlos testen
Ich entscheide mich für folgende Zahlungsweise:
14 Tage Stornorecht:
Ich kann meine Mitgliedschaft in den ersten 14 Tagen jederzeit formlos stornieren, z.B. per E-Mail an service@akademie.de.