VBA: Button, wechsle Dich!

Format-Schaltflächen ökonomisch programmieren

Stand: 4. Mai 2011

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.

Mitglied werden

Als zahlendes Mitglied von akademie.de haben Sie vollen Zugriff auf alle Inhalte und können alle PDF-Dateien, Checklisten, Mustervorlagen und Anwendungen herunterladen.

Sind Sie sich noch unsicher? Dann wählen Sie die Option “akademie.de kostenlos testen”. So können Sie sich 14 Tage in Ruhe umschauen. Downloads stehen Ihnen in dieser Zeit nicht zur Verfügung. Gefällt Ihnen akademie.de nicht, reicht ein formloser Widerruf per E-Mail innerhalb der ersten 14 Tage. Es entstehen für Sie keine Kosten. Widerrufen Sie nicht, erhalten Sie nach Ablauf von 14 Tagen vollen Zugriff und der Mitgliedsbeitrag wird abgebucht.

Ich bin bereits Mitglied
Mitglied werden!
Ich entscheide mich für folgende Zahlungsweise:

Inhalt

Downloads zu diesem Beitrag

Newsletter abonnieren