Add-In-Tools für den Formularentwurf

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

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

Außerdem kann es sein, dass wir die gleichen Steuerelemente zu Testzwecken mehrere Male umbenennen oder dass diese aus anderen Gründen zuvor bereits solche Namen erhalten haben, wie Sie diese mit der Prozedur zuweisen wollen. Dabei kann es vorkommen, dass Sie einem Steuerelement einen Namen geben wollen, der bereits vergeben ist. Dies würde einen Fehler auslösen.

Um dies zu verhindern, durchlaufen wir eine ähnliche For Each-Schleife wie diejenige, welche die gewünschten Namen zuweist, bereits vorher und vergeben Namen wie xyz1, xyz2 und so weiter für die Steuerelemente, bevor diese ihre endgültigen Namen erhalten. Danach müssen wir intNummer erneut mit intStart initialisieren:

For Each ctl In frm.Controls
     If ctl.InSelection Then
         ctl.Name = "xyz" & intNummer
         intNummer = intNummer + 1
     End If
Next ctl
intNummer = intStart

Ungünstige Aktivierreihenfolge

Es kann sein, dass die Aktivierreihenfolge der zu benennenden Steuerelemente nicht der Reihenfolge entspricht, in der die Steuerelemente neben- oder untereinander angeordnet sind.

Die For Each-Schleife über alle Control-Elemente des Formulars durchläuft diese jedoch in der Reihenfolge, die der Aktivierreihenfolge entspricht.

Die Aktivierreihenfolge können Sie jedoch zuvor über den Dialog Reihenfolge einstellen, wenn die Aktivierreihenfolge nicht stimmt (siehe Bild 2). Diesen Dialog öffnen Sie über den Ribbon-Befehl Entwurf|Tools|Eigenschaften.

Aktivierreihenfolge der Steuerelemente

Bild 2: Aktivierreihenfolge der Steuerelemente

Parameter per Formular eingeben

Damit der Benutzer die Parameter bequem eingeben kann, wenn er das Add-In aufgerufen hat, stellen wir ihm ein passendes Formular zur Verfügung. Dieses soll die zuletzt verwendeten Werte außerdem speichern. Dazu erstellen wir zuerst eine Tabelle namens tblOptionen. Diese enthält die Felder aus Bild 3.

Entwurf der Tabelle zum Speichern der Add-In-Optionen

Bild 3: Entwurf der Tabelle zum Speichern der Add-In-Optionen

Das Formular zur Eingabe dieser Optionen benennen wir frmSteuerelementeNummerieren. Nach dem Anlegen stellen wir seine Eigenschaften Datensatzmarkierer, Navigationsschaltflächen, Trennlinien und Bildlaufleisten auf Nein und Automatisch zentrieren auf Ja ein.

Außerdem legen wir als Datensatzquelle die Tabelle tblOptionen fest und stellen die Eigenschaft Zyklus auf Aktueller Datensatz ein. So kann der Benutzer nicht versehentlich einen zweiten Satz Optionen hinzufügen. Schließlich ziehen wir die vier Felder der Tabelle aus der Feldliste in den Detailbereich des Formularentwurfs. Außerdem fügen wir eine Schaltfläche namens cmdSteuerelementeBenennen hinzu. Das Ergebnis finden Sie in Bild 4.

Formular zum Eingeben der Parameter

Bild 4: Formular zum Eingeben der Parameter

Die Prozedur, die durch die Schaltfläche cmdSteuerelementeBenennen ausgelöst wird, braucht nun prinzipiell nur noch die Prozedur SteuerelementeBenennen aufzurufen und dieser die Parameter aus den Textfeldern zu übergeben. Dazu definieren wir die folgende Prozedur:

Private Sub cmdSteuerelementeBenennen_Click()
     SteuerelementeBenennen Me!Bezeichnung, _
         Me!Platzhalter, Me!Stellen, Me!Start
End Sub

Nun öffnen wir das Zielformular in der Entwurfsansicht und markieren die umzubenennenden Felder. Wenn wir dann das Formular frmSteuerelementeNummerieren öffnen, die Parameter einstellen und auf die Schaltfläche cmdSteuerelementeBenennen klicken, erhalten wir die Meldung aus Bild 5.

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar