Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA Userform Checkboxen per Makro erstellen

VBA Userform Checkboxen per Makro erstellen
25.07.2017 14:13:43
Bernd
Servus zusammen,
ich bastle seit Stunden an einer Userform zur Erstellung standardisierter Fehlerberichte, die ich automatisch an einen definierten Mailverteiler weiterleiten möchte.
Als Beispiel mal meine neutrale Mappe:
https://www.herber.de/bbs/user/115045.xlsm
In der Userform Multipage sollen die Kollegen auf Seite 1 Basisinformationen zur Maschine und dem Fehlerbild schreiben. Das funktioniert soweit.
Auf MP Seite 2 sollen sie dann fallspezifische Dateianhänge hinzufügen (PDF und JPG). Das funktioniert auch schon soweit.
Auf Seite 3 soll ihnen dann eine Liste an Mailempfängern angezeigt werden, an die dieser Bericht gesendet werden soll. Und das funktioniert leider nicht mehr.
Ich habe den Code für den Mailverteiler bereits in einer anderen Mappe und dort funktioniert er, nur leider scheint das mit der Multipage und den Frames nicht zu funktionieren?
Der (vermutlich) relevante Code-Auszug (fett):

Private Sub UserForm_Initialize()
Set WS = ThisWorkbook.Sheets("Projekte")
intLZ = WS.Cells(Rows.Count, 1).End(xlUp).Row
' Projekte in Combobox1 laden
With Me.ComboBox1
For i = 1 To intLZ
.AddItem WS.Cells(i, 1).Value
Next i
End With
' Projekte in Combobox1 laden ENDE
' Info auflisten
Dim top, left, height, width As Integer
Dim myControl As Control
Me.MultiPage1.Pages(2).Visible = True
Me.MultiPage1.Value = 2
With Me
Set WS = ThisWorkbook.Sheets("Info")
intLZ = WS.Cells(Rows.Count, 1).End(xlUp).Row
'Startwerte Checkbox
left = 10
top = 10
height = 15
width = 150
With Me.Frame7
For i = 2 To intLZ
Set myControl = Controls.Add("Forms.Checkbox.1")
myControl.left = left
myControl.top = top
myControl.height = height
myControl.width = width
myControl.Name = "CheckboxAN" & i
myControl.Caption = WS.Cells(i, 3).Value
If WS.Cells(i, 5).Value  "" Then
myControl.Value = True
End If
top = top + 15
Next i
End With
Me.Frame7.height = top + 70
left = 10
top = 10
height = 15
width = 150
With Me.Frame8
For i = 2 To intLZ
Set myControl = Controls.Add("Forms.Checkbox.1")
myControl.left = left
myControl.top = top
myControl.height = height
myControl.width = width
myControl.Name = "CheckboxCC" & i
myControl.Caption = WS.Cells(i, 3).Value
If WS.Cells(i, 6).Value  "" Then
myControl.Value = True
End If
top = top + 15
Next i
End With
Me.Frame6.height = top + 100
Me.Frame8.height = top + 70
Me.Repaint
End With
' Info auflisten ENDE
' Startseite Multipage ist immer 0
Me.MultiPage1.Value = 0
Me.MultiPage1.Pages(1).Visible = False
Me.MultiPage1.Pages(2).Visible = False
' Startseite Multipage ist immer 0 ENDE
Me.DTPicker1.Value = Date
Me.DTPicker2.Value = Now
Me.CommandButton9.Enabled = False
Me.CommandButton11.Enabled = False
Me.CommandButton12.Enabled = False
'Me.CommandButton14.Enabled = False
Me.CommandButton16.Enabled = False
End Sub
Kann sich bitte jemand erbarmen und mir meinen Fehler aufzeigen?
Vielen Dank und Grüße
Bernd
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Userform Checkboxen per Makro erstellen
25.07.2017 15:46:42
mmat
Da fehlt ein Punkt

Set myControl = .Controls.Add("Forms.Checkbox.1")

Gelöst, Danke
25.07.2017 15:55:26
Bernd
Servus mmat,
kleine Ursache, riesen Auswirkung. Da hätte ich noch wochenlang suchen können.
Thema gelöst, vielen lieben Dank!
Grüße, Bernd
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA Userform Checkboxen per Makro erstellen


Schritt-für-Schritt-Anleitung

  1. Userform erstellen: Öffne Excel und gehe zu den Entwicklertools. Klicke auf "Visual Basic" und erstelle eine neue Userform.

  2. Multipage hinzufügen: Füge ein Multipage-Steuerelement zur Userform hinzu, um verschiedene Seiten für deine Eingaben zu erstellen.

  3. Checkboxen hinzufügen: Füge unter der zweiten Seite des Multipages Checkboxen hinzu. Verwende dazu den folgenden VBA-Code:

    Private Sub UserForm_Initialize()
       Dim WS As Worksheet
       Dim intLZ As Integer
       Dim top As Integer, left As Integer, height As Integer, width As Integer
       Dim myControl As Control
    
       Set WS = ThisWorkbook.Sheets("Info")
       intLZ = WS.Cells(Rows.Count, 1).End(xlUp).Row
    
       left = 10
       top = 10
       height = 15
       width = 150
    
       With Me.Frame1  ' Ersetze Frame1 mit dem Namen deines Frames
           For i = 2 To intLZ
               Set myControl = .Controls.Add("Forms.Checkbox.1")
               myControl.left = left
               myControl.top = top
               myControl.height = height
               myControl.width = width
               myControl.Name = "CheckboxAN" & i
               myControl.Caption = WS.Cells(i, 3).Value
               If WS.Cells(i, 5).Value <> "" Then
                   myControl.Value = True
               End If
               top = top + 15
           Next i
       End With
       Me.Frame1.height = top + 70
    End Sub
  4. Checkboxen anpassen: Stelle sicher, dass die Checkboxen korrekt in deinem Frame positioniert sind und die Werte aus der entsprechenden Tabelle gezogen werden.

  5. Funktionen testen: Teste deine Userform, indem du sie in der Entwicklungsumgebung ausführst. Überprüfe, ob die Checkboxen korrekt angezeigt werden.


Häufige Fehler und Lösungen

  • Fehlende Eigenschaften: Achte darauf, dass du den Punkt (.) vor Controls.Add nicht vergisst. Der Code sollte folgendermaßen aussehen:

    Set myControl = .Controls.Add("Forms.Checkbox.1")
  • Falsche Frame-Namen: Überprüfe, ob der Name des Frames korrekt ist. Wenn du Frame1 in deinem Code verwendest, stelle sicher, dass es auch in der Userform so benannt ist.

  • Visibility der Seiten: Stelle sicher, dass du die Sichtbarkeit der Seiten korrekt einstellst, indem du sicherstellst, dass die richtige Seite beim Initialisieren der Userform sichtbar ist.


Alternative Methoden

  • Userform mit ActiveX-Steuerelementen: Statt die Standard-Checkboxen zu verwenden, kannst du auch ActiveX-Checkboxen nutzen, die mehr Anpassungsoptionen bieten.

  • Dynamische Checkboxen: Du könntest auch überlegen, die Checkboxen dynamisch aus einer Datenquelle zu generieren, z.B. aus einer Datenbank oder einer externen Datei.


Praktische Beispiele

  1. Fehlerbericht erstellen: Verwende die Userform, um Checkboxen für verschiedene Fehlerarten zu generieren. Die Benutzer können dann den Fehler auswählen, und du kannst die Daten zur Analyse speichern.

  2. Mailversand automatisieren: Nutze die Checkboxen, um zu bestimmen, an wen der Fehlerbericht gesendet werden soll. Wenn Checkboxen aktiviert sind, füge die Empfänger in die E-Mail ein.


Tipps für Profis

  • Mit With Me arbeiten: Verwende With Me, um den Code lesbarer zu gestalten und die Performance zu verbessern. So kannst du mehrere Eigenschaften des Userforms in einem Block setzen.

  • Checkboxen gruppieren: Gruppiere Checkboxen in Frames, um die Benutzeroberfläche übersichtlicher zu gestalten.

  • Ereignisprozeduren nutzen: Implementiere Ereignisprozeduren für die Checkboxen, um sofortige Aktionen auszulösen, wenn ein Benutzer eine Checkbox an- oder abwählt.


FAQ: Häufige Fragen

1. Wie füge ich Checkboxen zu einer bestehenden Userform hinzu?
Du kannst Checkboxen einfach mit dem VBA-Befehl Controls.Add("Forms.Checkbox.1") hinzufügen. Stelle sicher, dass du die richtigen Positionen und Dimensionen angibst.

2. Was mache ich, wenn meine Checkboxen nicht angezeigt werden?
Überprüfe die Sichtbarkeit der Frames und der Userform. Stelle sicher, dass die Werte beim Initialisieren der Userform korrekt zugewiesen werden.

3. Kann ich die Checkboxen auch in einer Tabelle speichern?
Ja, du kannst die Werte der Checkboxen in einer Tabelle speichern, indem du die .Value-Eigenschaft der Checkboxen abfragst und in die Zellen einer Tabelle schreibst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige