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.

VBA: Dynamische UserForm
#1
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
Antwortento top
#2
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
   \\\|///      Hoffe, geholfen zu haben.
   ( ô ô )      Grüße, André aus G in T  
 ooO-(_)-Ooo    (Excel 97-2016)
Antwortento top
#3
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
Antwortento top
#4
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


Angehängte Dateien
.xlsm   Vorlage.xlsm (Größe: 22,72 KB / Downloads: 4)
Antwortento top
#5
(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
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antwortento top
#6
Hey Ralf,
Danke für deine Antwort!
Dann dürfte es ja nicht einmal fehlerhaft sein oder? xD
Antwortento top
#7
Hi zusammen,

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


Gehe zu:


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