Clever-Excel-Forum

Normale Version: Checkboxen in Frame automatisch erzeugen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
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
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
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
Hallo Uwe,
noch ne Frage
Zitat:With Me.Frame1.Controls.Add("Forms.CheckBox.1")
Was bedeutet das .1 am Ende ??

Gruß
Klaus
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
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
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
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
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
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
Seiten: 1 2