Add-In-Tools für den Formularentwurf

Zu benennende Steuerelemente

Bild 1: Zu benennende Steuerelemente

Als ich neulich mal wieder einige Steuerelemente zu einem Formular hinzugefügt habe, die durchnummerierte Namen erhalten sollten wie txt01, txt02 und so weiter, kam die Eingebung: Warum diese langweilige Arbeit immer wieder von Hand erledigen, statt einfach ein Tool dafür zu entwickeln Gesagt, getan: Es sollte ein kleines Add-In her, mit dem sich diese erste kleine Aufgabe vereinfachen ließ. Wie Sie vermutlich auch, programmiere ich nämlich lieber als dass ich immer wiederkehrende Aufgaben durchführe. Das Durchnummerieren von markierten Steuerelementen nach bestimmten Vorgaben soll die erste Funktion dieses Add-Ins sein. Ihnen und mir fallen sicher noch noch weitere Ideen für den Einsatz dieses Add-Ins ein!

Der Auslöser für die Programmierung des in diesem Beitrag beschriebenen Add-Ins ist das unscheinbare Formular aus Bild 1.

Zu benennende Steuerelemente

Bild 1: Zu benennende Steuerelemente

Die drei Kombinationsfelder sollen die Namen cboSucheNach1, cboSucheNach2 und cboSucheNach3 erhalten und die Textfelder rechts daneben die Namen txtSucheNach1, txtSucheNach2 und txtSucheNach3.

Darauf, das von Hand zu erledigen, hatte ich keine Lust. Also habe ich zuerst eine kleine Prozedur geschrieben, die wie in Listing 1 aussieht.

Public Sub SteuerelementeBenennen(strBezeichnung As String, strPlatzhalter As String, intStellen As Integer, _
         Optional intStart As Integer = 1)
     Dim frm As Form
     Dim ctl As Control
     Dim intNummer As Integer
     Dim strStellen As String
     intNummer = intStart
     Set frm = Screen.ActiveForm
     strStellen = String(intStellen, "0")
     For Each ctl In frm.Controls
         If ctl.InSelection Then
             ctl.Name = Replace(strBezeichnung, strPlatzhalter, Format(intNummer, strStellen))
             intNummer = intNummer + 1
         End If
     Next ctl
End Sub

Listing 1: Prozedur zum Benennen von Steuerelementen

Sie erwartet die folgenden Parameter, um die Benennung der Steuerelemente so flexibel wie möglich zu machen:

  • strBezeichnung: Bezeichnung des Steuerelements inklusive eines Platzhalters, an dessen Stelle die Nummern eingetragen werden.
  • strPlatzhalter: Platzhalter, der durch die Nummern ersetzt werden soll.
  • intStellen: Anzahl der Stellen für die Durchnummerierung. Der Wert 2 würde beispielsweise bei den ersten Namen um eine führende 0 ergänzt werden, also beispielsweise 02.
  • intStart: Gibt die Nummer für das erste Steuerelement an. Standardwert ist 1. Geben Sie einen anderen Wert an, wird die Nummerierung mit diesem begonnen.

Ein Aufruf dieser Prozedur sieht beispielsweise wie folgt aus:

SteuerelementeBenennen "cboSucheNach[]", "[]", 1, 1

Hier wird immer der Basisname cboSucheNach[] verwendet, bei dem die Zeichenfolge [] durch die aktuelle Zahl ersetzt wird – in diesem Fall mit einer Stelle, also ohne führende 0 bei den ersten Einträgen.

Die Prozedur trägt zuerst den Wert der Startzahl aus dem Parameter intStart in die Variable intNummer ein. Dann referenziert sie das aktuell geöffnete Formular mit Screen.ActiveForm. Diese erste Fassung enthält noch keine Prüfung, ob beispielsweise überhaupt ein Formular geöffnet ist oder ob der Benutzer Steuerelemente zum Umbenennen markiert hat.

Dann verwendet die Prozedur den Wert aus dem Parameter intStellen, um in strStellen eine Zeichenkette mit so vielen Nullen zu füllen, wie es in intStellen angegeben ist. Damit starten wir in eine For Each-Schleife über alle Steuerelemente des mit frm referenzierten Formulars.

In der Schleife prüfen wir zuerst in einer If…Then-Bedingung, ob das aktuell durchlaufene Steuerelement markiert ist. Dazu nutzen wir die Eigenschaft InSelection. In der If…Then-Bedingung stellen wir die Eigenschaft Name des mit ctl referenzierten aktuellen Steuerelements auf die gewünschte Bezeichnung ein.

Diese ermitteln wir, indem wir den Platzhalter strPlatzhalter in strBezeichnung mit Replace ersetzen, und zwar durch den Wert aus der Variablen intNummer mit dem Format aus strStellen.

Prüfungen

Damit haben wir den größten Teil bereits erledigt. Bevor wir ein Add-In auf Basis dieser Prozedur anlegen, wollen wir jedoch noch zwei Prüfungen einbauen. Die Erste soll untersuchen, ob überhaupt ein Formular in der Entwurfsansicht geöffnet ist. Dazu deklarieren wir eine Variable namens bolEntwurfsansicht:

Dim bolEntwurfsansicht As Boolean

Die Abfrage von Screen.ActiveForm fassen wir in On Error Resume Next/On Error Goto 0 ein, um die Fehlerbehandlung für diese eine Anweisung zu deaktivieren. Der Grund ist, dass der Aufruf ohne geöffnetes Formular einen Fehler auslöst, den wir vermeiden wollen. Dann prüft die Prozedur, ob frm leer ist, was der Fall ist, wenn kein Formular geöffnet ist. Ist frm nicht leer, prüfen wir mit der Eigenschaft CurrentView, ob die aktuelle Ansicht die Entwurfsansicht ist. Falls ja, stellen wir die Variable bolEntwurfsansicht auf True ein:

...
On Error Resume Next
Set frm = Screen.ActiveForm
On Error Goto 0
If Not frm Is Nothing Then
     If frm.CurrentView = acCurViewDesign Then
         bolEntwurfsansicht = True
     End If
End If

Hat bolEntwurfsansicht danach noch den Wert False, ist das aktive Element entweder kein Formular oder dieses ist nicht in der Entwurfsansicht geöffnet. In diesem Fall gibt die Prozedur eine entsprechende Meldung aus und wird abgebrochen:

If bolEntwurfsansicht = False Then
     MsgBox "Es ist kein Formular in der Entwurfsansicht  geöffnet.", vbOKOnly + vbExclamation, "Kein  Formular geöffnet"
     Exit Sub
End If

Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

TestzugangOder bist Du bereits Abonnent? Dann logge Dich gleich hier ein. Die Zugangsdaten findest Du entweder in der aktuellen Print-Ausgabe auf Seite U2 oder beim Online-Abo in der E-Mail, die Du als Abonnent regelmäßig erhältst:

Schreibe einen Kommentar