Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema CheckBox
BildScreenshot zu CheckBox CheckBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Frame
BildScreenshot zu Frame Frame-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Label
BildScreenshot zu Label Label-Seite mit Beispielarbeitsmappe aufrufen

Formen in UserForm Namen zuweisen per Makro


Betrifft: Formen in UserForm Namen zuweisen per Makro von: kultnoob
Geschrieben am: 11.09.2019 16:09:14

Erst mal Grüße an alle und ich hoffe, es geht hier allen gut.

Habe eine Frage zu einem Problem.

Habe eine Exceldatei mit verschiedenen Sheets. In jedem Sheet sind verschiedene E-Mailadressen.

Über eine bereits bestehende UserForm wird eine andere UserForm angesteuert die auf Basis Anzahl der Sheets in der Excel-Datei Frames (Rahmen) und im Frame eine Checkbox (Kontrollkästchen) erstellt. Am Ende werden zwei CommandButtons eingefügt. Sollten weitere Sheets in der Excel-Datei hinzukommen, passt sich die UserForm automatisch an.
Soweit so gut.

Da manchmal nicht alle E-Mailadressen benötigt werden, soll der User die Checkboxen auswählen können, um zu bestimmen, welche E-Mails in den Sheets gewählt werden sollen. Später wird damit eine Outlook-Einladung erstellt (funktioniert bereits).

Nun meine Frage. Wenn die "Formen" auf der UserForm erstellt werden, möchte ich Ihnen gleich einen eindeutigen Namen zuweisen, damit ich dies später abfragen kann ob ein Hacken gesetzt ist oder nicht. Und genau da hängt es. Wie vergebe ich den Formen einen Namen. Der Sub hört ja irgendwann auf und durch Betätigung des ersten CommandButtons kann ich dann die Abfrage starten sofern jede Checkbox einen eindeutigen Namen bekommen hat. Aktuell befindet sich alles noch in der UserForm mit jeweils 2 CALL-Befehlen auf ein Modul um die Anzahl Sheets und die Bezeichnung der Sheets von einer Prozedur zur anderen zu übergeben.

Da ich sowas noch nie gemacht hatte, musste ich mich ein wenig durchtesten und anbei das, was ich bisher umgesetzt habe. Für Hilfe bedanke ich mich im Voraus.

              Sub UserForm_Click()
              
                  Dim NFrame As MSForms.Frame
                  Dim NCheckbox As MSForms.Checkbox
                  Dim NCommand1 As MSForms.CommandButton
                  Dim NCommand2 As MSForms.CommandButton
                  Dim a, b As Integer
                  Dim Anzahl As String
                  
              '    'UserForm 2 ausblenden
              '    UserForm2.Hide
              '
              '    'UserForm 3 einblenden
              '    UserForm3.Show
                  
                  'Verweis auf das Makro Sheets_zaehlen
                  Call Sheets_zaehlen
                      
                  'Die Variable b als 0 definieren, da diese dazu dient die Rahmen der Checkboxen innerhalb    _
              _
              _
              der UserForm3 vom Top aus zu verschieben
                  b = 0
                  
                  'Schleife für die Anzahl Sheets
                  For a = 1 To Sheet_Anzahl
                  
                      'Befehl zur Erstellung des Rahmens in welcher später die Checkbox (Kontrollkästchen)  _
              dargestellt werden
                      Set NFrame = Me.Controls.Add("Forms.Frame.1", "Frame")
                      
                      'Definition der Position des Rahmens auf Basis der Variable a
                      With NFrame
                      
                          .Height = 42
                          .Left = 42
                          .Top = 126 + b
                          .Width = 246
                      
                          Sheet_Zahl = a
                      
                          Call Sheet_Namen_uebergeben
                          
                          With .Add("Forms.Checkbox.1", "Checkbox")
              
                              .Caption = " " & Sheet_Namen
                              .Name = "Checkbox" & a          '''''''''wie kann man einen Namen der  _
              erstellten Form geben????
                              .Font.Name = "Porsche Franklin Gothic"
                              .Font.Size = 18
                              .Height = 26
                              .Left = 6
                              .Top = 6
                              .Width = 224
              
                          End With
                          
                      End With
                      
                      'Höhe der Userform definieren
                      With UserForm3
                      
                          'Höhe der Userform auf 265 Pixel definieren - b wird ab dem zweiten Rahmen hochgezä  _
               _
              _
              hlt
                          .Height = 265 + b
                      
                      End With
              
                      'Die Variable b um 62 Pixel hochzählen, damit der nächste Rahmen 62 Pixel mehr Abstand   _
               _
              _
              hat vom Top als der vorherige Rahmen
                      b = b + 62
                  
                  Next a
                  
                  'Einfügen des Commandbuttons 1
                  Set NCommand1 = Me.Controls.Add("Forms.CommandButton.1", "CommandButton")
                  
                  With NCommand1
                  
                      .Caption = "Einladung erstellen"
                      .Font.Size = 12
                      .Font.Name = "Porsche Franklin Gothic"
                      .Height = 30
                      .Left = 12
                      .Top = 125 + b
                      .Width = 138
                  
                  End With
                  
                  'Einfügen des Commandbuttons 2
                  Set NCommand2 = Me.Controls.Add("Forms.CommandButton.1", "CommandButton")
                  
                  With NCommand2
                  
                      .Caption = "Zurück"
                      .Font.Size = 12
                      .Font.Name = "Porsche Franklin Gothic"
                      .Height = 30
                      .Left = 180
                      .Top = 125 + b
                      .Width = 138
                  
                  End With
                  
              '    Prüfen, welche Kontrollkästchen gewählt wurden
                  
              
              
              End Sub
              

              Option Explicit
              
                  Public Sheet_Anzahl As Integer
                  Public Sheet_Namen As String
                  Public Sheet_Zahl As String
                  Public a As Integer
                  
                          
              Sub Sheets_zaehlen()
                  
                  'Anzahl der Sheets zählen
                  Sheet_Anzahl = ActiveWorkbook.Sheets.Count
                  
              End Sub
              
              Sub Sheet_Namen_uebergeben()
              
                  a = Sheet_Zahl
              
                  'Auf Basis der Variable "Sheetzahl" den Namen des Sheets auslesen und der Variable  _
              Sheets_Namen übergeben
                  Sheet_Namen = ActiveWorkbook.Sheets(a).Name
              
              End Sub
              
              

  

Betrifft: AW: Formen in UserForm Namen zuweisen per Makro von: 1712501.html
Geschrieben am: 11.09.2019 16:25:11

Hallo,

im Prinzip, indem Du den Index mit übergibst, allerdings wird der Objektname + Index beim Erstellen über die .Add-Methode automatisch verwendet, wäre also nicht nötig:

Set NFrame = Me.Controls.Add("Forms.Frame.1", "Frame" & a)

Gruß, Mullit
  

Betrifft: AW: Formen in UserForm Namen zuweisen per Makro von: 1712578.html
Geschrieben am: 12.09.2019 07:46:38

Hi Mullit,

vielen Dank für die Unterstützung.

Set NFrame = Me.Controls.Add("Forms.Frame.1", "Frame" & a)
Die Idee mit "& a" bei der .add Methode habe ich bereits probiert.

Nur wenn die UserForm3 erstellt ist, gibt es auf dieser ja die Möglichkeit, die Checkboxen auszuwählen, was auch funktioniert. Der nächste Step wäre nun die Betätigung des CommandButtons1 mit der Caption "Einladung erstellen". Doch wie spreche ich diese im Editor an?

Wenn ich einen CommandButton1 händisch in der UserForm3 erstelle, kann ich einen Code folgendermaßen hinterlegen. (Code ohne Sinn und Verstand kurz notiert)

            Sub CommandButton1_Click()
            
            If UserForm3.Frame1.CheckBox1 = True Then
               Exit Sub
            End If
            
            End Sub
            
Nur wenn ich auf den CommandButton1 klicke, passiert nichts. Das Makro läuft nicht weiter bzw. greift nicht auf die Prozedur zu. Irgendwie stehe ich auf dem Schlauch und sehe den Fehler nicht.

Auf der anderen Seite könnte ich die CommandButtons bereits erstellen und diese verschieben sich einfach mit den Frames und Checkboxen.

Möchte nur verstehen, wo hier mein Logikfehler liegt.

Vielen Dank im Voraus.

Grüße
  

Betrifft: AW: Formen in UserForm Namen zuweisen per Makro von: 1712622.html
Geschrieben am: 12.09.2019 09:55:53

Hallo,

einem zur Laufzeit erstellten CommandButton kannst du nur über eine Klasse ein Makro zuweisen. Ich mach dir mal ein Beispiel:

https://www.herber.de/bbs/user/132002.xlsm

Gruß
Nepumuk

  

Betrifft: AW: Formen in UserForm Namen zuweisen per Makro von: 1712688.html
Geschrieben am: 12.09.2019 13:56:39

Hi Nepumuk,

vielen Dank für die Hilfe. Habe mir dein Excel-Beispiel mal angeschaut und muss zugeben... ich check es nicht wirklich. Aber ich baue auf Basis Deiner Excel mal meine Excel um und schaue, ob es dann funktioniert. Melde mich und poste dann mal das, was ich zusammengekocht habe.
Vielleicht verstehe ich es dann auch besser.

Grüße

  

Betrifft: AW: Formen in UserForm Namen zuweisen per Makro von: 1712692.html
Geschrieben am: 12.09.2019 14:41:21

Hi,

also der Umbau hat geklappt und ich kann nun auch den CommandButton zugreifen aber ich verstehe nicht, wie ich auf die CheckBox zugreifen kann.

        'Befehl zur Erstellung des Rahmens in welcher später die Checkbox (Kontrollkästchen)  _
         dargestellt werden
                 Set NFrame = Me.Controls.Add("Forms.Frame.1", Name:="Frame" & a)
                 
                 'Definition der Position des Rahmens auf Basis der Variable a
                 With NFrame
                 
                     .Height = 42
                     .Left = 42
                     .Top = 126 + b
                     .Width = 246
                 
                     Sheet_Zahl = a
                 
                     Call Sheet_Namen_uebergeben
                     
                     With .Add("Forms.Checkbox.1", Name:="Checkbox" & a)
         
                         .Caption = " " & Sheet_Namen
                         .Font.Name = "Porsche Franklin Gothic"
                         .Font.Size = 18
                         .Height = 26
                         .Left = 6
                         .Top = 6
                         .Width = 224
         
                     End With
Hier erstelle ich den Rahmen und darin die Checkbox mit Bezug auf die Variable a die mit 1 beginnt. Aber bei der Abfrage, ob die Checkbox aktiviert ist oder nicht, bekomme ich immer eine Fehlermeldung. :(

Egal ob ich Checkbox oder Checkbox1 schreibe. Entweder fehlt ein Objekt oder Methode oder Datenobjekt nicht gefunden.



Grüße
  

Betrifft: AW: Formen in UserForm Namen zuweisen per Makro von: 1712696.html
Geschrieben am: 12.09.2019 14:52:34

Hallo,

du musst, wie in meinem Beispiel, die Checkbox einer Objektvariablen zuweisen und diese dann an die Klassen übergeben.

Gruß
Nepumuk

  

Betrifft: AW: Formen in UserForm Namen zuweisen per Makro von: 1712938.html
Geschrieben am: 13.09.2019 15:00:52

Hi Nepumuk,

bin mir nicht mal sicher, ob ich verstehe was Du programmiert hast. Somit kann ich dies leider nicht umsetzen. Mit Klassen hatte ich bisher nichts am Hut. Trotzdem danke ich Dir sehr für Deine Zeit und Mühe. Muss mich da richtig einarbeiten aber Stand jetzt verstehe ich es nicht.

Bin zwar den Code mehrfach durchgegangen um die Zusammenhänge zu verstehen und dennoch ist es verwirrend.

Entweder ich komm noch dahinter, oder ich suche mir eine andere Lösung. Bringt ja nichts etwas zu programmieren, was man nicht versteht.

Dennoch danke ich Dir.

Grüße

  

Betrifft: AW: Formen in UserForm Namen zuweisen per Makro von: 1712942.html
Geschrieben am: 13.09.2019 15:04:52

Zusatz:

Was ich auch noch nicht ganz verstehe ich folgendes.

Für die CommandButtons ist das glaube ich klar.
Aber wenn ich eine Anzahl Checkboxen habe, die auch noch variieren kann, wie soll ich dann allen eine Objektvariable zuweisen und an die Klassen übergeben?

  

Betrifft: AW: Formen in UserForm Namen zuweisen per Makro von: 1712960.html
Geschrieben am: 13.09.2019 15:46:14

Hallo,

du musst nur die Checkbox an die Klasse übergeben die beim Klick auf den Button abgefragt wird. So wie in meinem Beispiel.

Gruß
Nepumuk

  

Betrifft: AW: Formen in UserForm Namen zuweisen per Makro von: 1713252.html
Geschrieben am: 16.09.2019 09:29:52

Hi Nepumuk,

habe jetzt mal versucht, mein Makro in Deine Beispiel-Datei einzubinden. Zum Teil funktioniert es aber es endet mit einer Fehlermeldung.

Wenn ich Dein Makro ausführe und die Checkbox nicht auswähle, dann erhalte ich eine Nachricht "Mach was". Wenn ich in dem von mir geänderten Makro keine Checkbox auswähle, erhalte ich den Fehler Objektvariable oder With-Blockfariable nicht festgelegt. Hier springt er hin, wenn ich auf Debuggen klicke.

Private Sub mobjCommandButton_Click()
   
       ''''''''''''''''''''''''''
       If Not CheckBox.Value Then MsgBox "Haben Sie alle Verteiler gewählt?"
       
   End Sub
Wenn ich eine oder mehrere Checkbox(en) auswähle, kommt die gleiche Fehlermeldung.
So wie ich das sehe, hänge ich immer noch an der Vergabe der Namen und die Übergabe an die Klasse.
Anbei die modifizierte Datei.

https://www.herber.de/bbs/user/132050.xlsm

Vielleicht siehst Du, warum das nicht so will...

Vielen Dank im Voraus.

Grüße
  

Betrifft: AW: Formen in UserForm Namen zuweisen per Makro von: 1713259.html
Geschrieben am: 16.09.2019 10:07:53

Hi Nepumuk,

ok, Fehler gefunden. Arbeite und teste weiter... :)

Grüße

  

Betrifft: AW: Formen in UserForm Namen zuweisen per Makro von: 1713269.html
Geschrieben am: 16.09.2019 10:52:46

Hi Nepumuk,

nein ich bekomme es nicht hin.
Der erstellte Commandbutton wird mit folgenden Sub aufgerufen.

Private Sub mobjCommandButton_Click()
 
     Dim cbox As Control
     Dim a, c As Integer
 
     ''''''''''''''''''''''''''
     If Not CheckBox.Value Then MsgBox "Bitte wählen Sie mindestens einen Verteiler."
     
 End Sub
Somit müsste ich die Abfrage auch über den oben dargestellten Sub aufrufen. Sofern dies korrekt ist.

Wenn ich jetzt keine Checkbox auswähle kommt die MsgBox. Wähle ich aber eine oder mehrere Checkbox(en) wähle, kommt ebenfalls die MsgBox.

Komme nicht weiter....

Grüße
  

Betrifft: AW: Formen in UserForm Namen zuweisen per Makro von: 1713303.html
Geschrieben am: 16.09.2019 14:08:03

Hi Nepumuk,

habe es jetzt zu 99% hinbekommen. Muss noch ein paar Kleinigkeiten ändern aber im Grunde läuft es. Den Rest sollte ich jetzt gelöst bekommen... hoffe ich...

Vielen Dank für die Hilfe und sollte es wider erwarten nicht klappen, melde ich mich noch einmal.

Grüße

  

Betrifft: AW: Formen in UserForm Namen zuweisen per Makro von: 1712939.html
Geschrieben am: 13.09.2019 15:00:53

Hi Nepumuk,

bin mir nicht mal sicher, ob ich verstehe was Du programmiert hast. Somit kann ich dies leider nicht umsetzen. Mit Klassen hatte ich bisher nichts am Hut. Trotzdem danke ich Dir sehr für Deine Zeit und Mühe. Muss mich da richtig einarbeiten aber Stand jetzt verstehe ich es nicht.

Bin zwar den Code mehrfach durchgegangen um die Zusammenhänge zu verstehen und dennoch ist es verwirrend.

Entweder ich komm noch dahinter, oder ich suche mir eine andere Lösung. Bringt ja nichts etwas zu programmieren, was man nicht versteht.

Dennoch danke ich Dir.

Grüße

Beiträge aus dem Excel-Forum zum Thema "Formen in UserForm Namen zuweisen per Makro"