Registriert seit: 15.04.2014
Version(en): 2003 -2010
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
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
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:1 Nutzer sagt Danke an Kuwer für diesen Beitrag 28
• DeBabba
Registriert seit: 15.04.2014
Version(en): 2003 -2010
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
Registriert seit: 15.04.2014
Version(en): 2003 -2010
Hallo Uwe,
noch ne Frage
Zitat:With Me.Frame1.Controls.Add("Forms.CheckBox.1")
Was bedeutet das .1 am Ende ??
Gruß
Klaus
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
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
Registriert seit: 15.04.2014
Version(en): 2003 -2010
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
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
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/deFalls 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:1 Nutzer sagt Danke an schauan für diesen Beitrag 28
• DeBabba
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
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
Registriert seit: 15.04.2014
Version(en): 2003 -2010
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 :15
)
Dank Dir schon mal und gebe Dir noch ne Info, ob alles funzt
Gruß
Klaus
Registriert seit: 15.04.2014
Version(en): 2003 -2010
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: :71
:28
Vielen Dank für Deine Hilfe
:97
:74
:23:
Gruß
klaus