Clever-Excel-Forum

Normale Version: VBA: Dynamische UserForm
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hi zusammen,

ich versuche stets meine Kenntnisse in VBA zu erweitern, jedoch stehe ich hier auf dem Schlauch und freue mich auf eure Beiträge.
Da ich purer Anfänger bin, habe ich das Problem wahrscheinlich nicht optimal beschrieben und auch nicht optimal gelöst. Ich hoffe trotzdem, dass das ganze Variablendurcheinander einigermaßen verständlich ist.
Ich weiß ehrlich gesagt nicht, ob es Sinn macht eine Vorlagedatei zu erstellen. Wenn es euch hilft, mache ich dies gerne.
Wenn Ihr Fragen habt oder ich spezifische Bereiche besser erklären müsste, lasst es mich gerne wissen. Wenn alles kompletter Bullshit ist versuche ich es nochmal neu und verständlicher zu schreiben xD
Code:
Sub Userform_initialize()

Dim Faktor As Integer 'Anzahl der Positionen
Dim FaktorCheck As Integer 'Zählt wie viele Checkboxen es gibt
Dim Aktivieren As Integer 'While Schleife, um alle Checkboxen zu aktivieren
Dim PositionenAnlegen As Integer 'While Schleife, die bei jeder zusätzlichen Position, um einen hochgesetzt wird
Dim ZähleBisElf As Integer 'Um die 11 Checkboxen in einer Position anzusprechen
Dim PositionenAnlegenBisElf As Integer 'Um die jeweilige der 11 Checkboxen in einer Position anzusprechen


Faktor = PositionsAnzahl.Anzahl 'Je nachdem wie viele Positionen angelegt werden sollen (wird zuvor in UserForm PositionsAnzahl abgefragt) erscheinen so viele Positionen in der UserForm
FaktorCheck = 11 * Faktor 'Pro Position gibt es 11 Checkboxes, die alle deaktiviert sind (weshalb auch immer). Es ist möglich bis zu 50 Positionen zu erstellen also max. 550 Checkboxes
'Zur Info die Checkboxes sind vorher schon alle erzeugt worden (Top = 5000; Left = Haben alle Checkboxes gleich), da ich nicht weiß, wie man neue erstellt (Nachteil ist der Performanceverlust)
Aktivieren = 0
PositionenAnlegen = 1 'Eine Position wird immer angelegt (bzw. wurde schon angelegt)
ZähleBisElf = 1
PositionenAnlegenBisElf = 0

Do While Aktivieren < FaktorCheck 'Hier versuche ich alle genutzen Checkboxen zu aktivieren(Code fehlerhaft)
Me.Controls("CheckBox" & (Aktivieren)).Enabled = True
Aktivieren = Aktivieren + 1
Loop

Do While PositionenAnlegen < Faktor 'Hier versuche ich die jeweils 11 Checkboxen pro Position im Abstand von 15 (in der gewollten Anzahl = Faktor) untereinander zu anzusprechen und u verschieben. Wie gesagt eine Position wurde schon erzeugt, weshalb ich anfange die 12. Checkbox anzusprechen
    Do While ZähleBisElf < 12
        PositionenAnlegenBisElf = 12 * PositionenAnlegen + ZähleBisElf '12*1+1=12; 12*1+2=13; 12*1+3=14
        Me.Controls("CheckBox" & (PositionenAnlegenBisElf)).Top = 30 + 15 * PositionenAnlegen 'verschiebt die Checkbox 15 unter den schon angelegten
        ZähleBisElf = ZähleBisElf + 1
    Loop

PositionenAnlegen = PositionenAnlegen + 1 'Nächste Position
ZähleBisElf = 1 'Um die andere While Schleife wieder zu aktivieren
Loop

'Beim durchlauf von PositionenAnlegen, wird eine weitere Position angelegt
'   Bei der anderen while Schleife werden alle 11 Checkboxes angesprochen und verschoben, die im Nummernkreis passen (Bei 2 Pos -> Nummernkreis = 12-22; Bei 3 Pos -> Nummernkreis = 23-34 etc.
'       Sobald der Nummernkreis abgearbeitet wurde wird aus der while Schleife raus gesprungen und evtl. die nächste Position angelegt.
'           Wenn keine Position mehr angelegt werden soll wird automatisch aus der while Schleife gsprungen


With Positionen_Bearbeiten 'Das hier unten funktioniert sogar
    .Height = 140 + 15 * Faktor
End With

With Positionen_Bearbeiten.CommandButton1
    .Top = 70 + 15 * Faktor
End With

With Positionen_Bearbeiten.CommandButton2
    .Top = 70 + 15 * Faktor
End With




End Sub


Wenn Ihr es bis hier hin geschafft habt, erstmal tausend Dank für eure Unterstützung! Heart

Ich bin gespannt auf eure Antworten und wünsche euch ein angenehmes Wochenende!

Beste Grüße

Nils
Hallo Nils,

klar kann man eine userform mit reichlich Checkboxen vorbelegen. Man könnte die aber auch zur Laufzeit erzeugen. Schaue Dir in dem Zusammenhang aber auch mal die Klassenprogrammierung an - dort mal ein Beispiel mit Buttons:

DatePicker
Hallo

ich bin etwas verwundert wofür man 550 CheckBoxen braucht???  Nach meiner Ansicht verliert man da schnell die Übersicht. Wenn wir eine Beispieldatei sehen und du uns die erwünschte Lösung angibst faellt uns dazu vielleicht eine einfachere Lösung ein.  Einen Versuch ist es sicher wert ....

Gast 123
Hey Leute,

danke für eure schnelle Unterstützung!
Mit Klassenmodulen habe ich bislang noch nicht gearbeitet.
Danke für das Beispiel. Ich schaue dort heute bei Gelegenheit mal rein.

Beigefügt ist nun eine Beispieldatei.
Ziel ist es die Checkboxen jeder Position übereinander zu bekommen.
Das selbe für die Labels.
Wenn ich nicht ganz Banane bin, dann müsste erstmal nur der Code angepasst werden, weil die Syntax nicht stimmt (ich hab keine Ahnung was Me.Controls ist).
Code:
Me.Controls("CheckBox" & (PositionenAnlegenBisElf)).Top = 30 + 15 * PositionenAnlegen
Ich weiß nicht wie Checkboxen in einer While Schleife korrekt angesprochen werden. 

Da pro Position 11 Checkboxen genutzt werden und ich ermöglichen möchte maximal 50 Positionen anzulegen, würde ich vorab 550 Checkboxes erzeugen. 

Checkboxen per VBA zu erzeugen und dann noch korrekt zu verschieben übersteigt meine Kenntnisse bei weitem und auch nach stundenlangem lesen von Forumbeiträgen bin ich diesbezüglich wenig schlauer geworden.
Ich hoffe ihr könnt mir besser helfen :D

Besten Dank für eure Hilfe  Heart

Nils
(23.11.2020, 12:01)w4mbo schrieb: [ -> ](ich hab keine Ahnung was Me.Controls ist).

Moin!
Das Schlüsselwort Me stellt das Parent dar.
In einem Tabellenblatt ist es das TB,
in einer Userform das UF, …

Gruß Ralf
Hey Ralf,
Danke für deine Antwort!
Dann dürfte es ja nicht einmal fehlerhaft sein oder? xD
Hi zusammen,

mir ist gerade erst aufgefallen, dass die Zeilen FaktorCheck = 11 * Faktor und Aktivieren = 0 ohne weiteres gelöscht werden können.