Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Checkboxen in Frame automatisch erzeugen
#1
Hallo zusammen,
ich hab da eine Anforderung und muss in einem Frame so an die 100 Checkboxen, Textboxen etc. erstellen.
Gibt es ne Möglichkeit die ganzen Checkboxen automatisch zu generieren ?:s
Wenn ja, hat da jemand von euch schon sowas, oder kann jemand mir einen Tipp geben wie ich sowas anstellen muss.
Vielen Dank

Gruß
Klaus
Antworten Top
#2
Hallo Klaus,

so z.B.:

Code:
Private Sub UserForm_Initialize()
  Dim i As Long, j As Long
  For i = 1 To 10
    For j = 1 To 10
      With Me.Frame1.Controls.Add("Forms.CheckBox.1")
        .Top = 15 * j
        .Left = 15 * i
      End With
    Next j
  Next i
End Sub

Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • DeBabba
Antworten Top
#3
Hallo Uwe
vielen dank
Das ist wirklich alles ??? Ich bin erstaunt.
Dann kann ich ja auch den Namen der Checkboxen anpassen usw.
Cooool :100:
Vielen Vielen Dank

Gruß
Klaus
Antworten Top
#4
Hallo Uwe,
noch ne Frage
Zitat:With Me.Frame1.Controls.Add("Forms.CheckBox.1")
Was bedeutet das .1 am Ende ??

Gruß
Klaus
Antworten Top
#5
Hallo Klaus,

das ist eine ProgID, welche so vorgegeben ist.

Aus der Hilfe für Add:

Die ProgID-Werte für einzelne Steuerelemente sind:
Kontrollkästchen Forms.CheckBox.1
Kombinationsfeld Forms.ComboBox.1
Befehlsschaltfläche Forms.CommandButton.1
Rahmen Forms.Frame.1
Abbildung Forms.Image.1
Bezeichnungsfeld Forms.Label.1
Listenfeld Forms.ListBox.1
Multiseiten Forms.MultiPage.1
Optionsfeld Forms.OptionButton.1
Bildlaufleiste Forms.ScrollBar.1
Drehfeld Forms.SpinButton.1
Register Forms.TabStrip.1
Textfeld Forms.TextBox.1
Umschaltfeld Forms.ToggleButton.1

Copyright© 1996 Microsoft Corporation.


Gruß Uwe
Antworten Top
#6
Hi Uwe
Ah ja..
und wie bekomme ich das hin , dass die eingefügten Forms auch erhalten bleiben ?
Mein Gedanke ist, dass ich mir Frames halbwegs automatisch erstellen kann
Etwas so msgbox In Welcher Form soll
Wieviele ...
und dann gehts los und das Formular ist bestückt
Also die Forms in der Entwicklungsumgebung erzeugen ?

Kannst Du mir das auch weiterhelfen ??
Gruß
Klaus
Antworten Top
#7
Hallo Klaus,

eigentlich würde es aus meiner Sicht reichen, wenn Du Excel das Userform zur Laufzeit erzeugen lässt. Es geht aber auch, wie von Dir gewünscht. Bei Microsoft gibt es da einen Artikel drüber, wo ein Userform mit einer Checkbox erzeugt wird:
http://support.microsoft.com/kb/185774/de
Falls Du den durchgehst, beachte bitte am Anfang den Hinweis auf den Verweis zu "Microsoft Visual Basicfor Applications Extensibility"
Hier mal ein angepasster VBA-Code auf basis der Microsoft-Seite, siehe auch die Kommentare. Eingaben usw. sind noch nicht dabei, ist aber erst mal ein Funktionsbeispiel.

Code:
Sub Add_UF_CBO()
    'Variablendeklaration
    Dim mynewform As Object, mycheckbox As Object, myframe As Object
    Dim iCnt%, strCode$
    'vorhandenes UserForm zuweisen
    Set mynewform = _
      Application.VBE.ActiveVBProject.VBComponents("UserForm2")
    'Schleife fuer n Checkboxen (hier fest 10)
    For iCnt = 1 To 10
      'neue Checkbox im Rahmen Frame1 hinzufuegen
      Set mycheckbox = mynewform.Designer.Controls("Frame1").Add("Forms.CheckBox.1")
      'Mit der neuen checkbox...
      With mycheckbox
         .Name = "Check_" & iCnt
         .Caption = "Check here " & iCnt
         .Left = 10
         .Top = 20 * iCnt
         .Height = 20
         .Width = 100
      End With
      'Ereigniscode fuer Checkbox erstellen
      strCode = "Private Sub Check_" & iCnt & "_Click" & vbLf
      strCode = strCode & "   MsgBox ""Check_" & iCnt & " gedrückt!" & vbLf
      strCode = strCode & "End Sub"
      'Ereigniscode in das Codemodul der Userform schreiben
      ThisWorkbook.VBProject.VBComponents("Userform2") _
         .CodeModule.AddFromString strCode
    'Ende Schleife fuer n Checkboxen (hier fest 10)
    Next
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • DeBabba
Antworten Top
#8
Hallo Klaus,

ich konnte leider nicht eher (Abteilungsnachmittag: Besichtigung Ludwigsburger Schloss hinter den Kulissen mit anschließender intensiver Besprechung im Brauhaus am Bahnhof. ;) )

Also erst einmal 2 Prozeduren zum Resetten der UF.
Denn es ist nervig, wenn man rumspielt und zig Elemente in der UF (auch übereinander) hat und wieder löschen muss.

Code:
Sub UserForm1_Alles_Leeren()
  ActiveWorkbook.VBProject.VBComponents("UserForm1").Designer.Controls.Clear
End Sub

Sub UserForm1_Frame1_Leeren()
  ActiveWorkbook.VBProject.VBComponents("UserForm1").Designer.Frame1.Controls.Clear
End Sub

Und nun ein Beispiel wie vorher, aber ohne Ereignisprozedurenzuweisungen wie bei André:

Code:
Sub UserForm_Frame1_Bestuecken()
  Dim i As Long, j As Long
  Dim AnzahlSpalten As Variant, AnzahlZeilen As Variant
  With ActiveWorkbook.VBProject.VBComponents("UserForm1").Designer
    AnzahlZeilen = InputBox("Anzahl Zeilen:", , 2)
    AnzahlSpalten = InputBox("Anzahl Spalten:", , 2)
    If IsNumeric(AnzahlSpalten) And IsNumeric(AnzahlZeilen) Then
      If AnzahlSpalten * AnzahlZeilen Then
        For i = 1 To AnzahlZeilen
          For j = 1 To AnzahlSpalten
            With .Frame1.Controls.Add("Forms.CheckBox.1")
              .Top = 15 * j
              .Left = 15 * i
            End With
          Next j
        Next i
      Else
        MsgBox "Die Angaben waren nicht verwertbar!"
      End If
    Else
      MsgBox "Die Angaben waren nicht verwertbar!"
    End If
  End With
End Sub

Gruß Uwe
Antworten Top
#9
Hi Uwe,
vielen Dank für Dein Script.
Ich werde das mal testen, sobald ich aus den verschiedenen Freitagsbesprechungen raus bin (bei mir ohne Brauhaus :1527)
Dank Dir schon mal und gebe Dir noch ne Info, ob alles funzt

Gruß
Klaus
Antworten Top
#10
Hallo Uwe,
sorry , hatt am Freitag keinen Bock mehr
Aber jetzt
Funktioniert Prima.
Ich werde das Ganze etwas erweitern (Größe, Schriftgröße, Position, Beschriftung usw.
Sobald ich das fertig habe, sende ich Dir das mal zu
:100: :7171:28Thumbsupsmileyanim
Vielen Dank für Deine Hilfe
:9798:7464:23:

Gruß
klaus
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste