OptionButtons in einer Userform

Guten Morgen,

ich habe div. gegoogelt, Hilfe gelesen, aber ich werde nicht fündig zu folgendem Problem.
Ich habe ein Userform, darin OptionButtons. Über dies will ich eine bestimmte Option, in meinem Fall einen Daeinamen auswählen. Die Anzahl soll variabel sein, abhängig davon, wieviele Dateien in einem Verzeichnis sind. D.h. ich muss OptionButtons per VBA hinzufügen oder löschen.
Zweckmäßig will ich die ganze Userform per VBA erzeugen und eine entsprechende Anzahl Buttons definieren.

Wer weiss was?

Danke
Laika

Zweckmäßig will ich die ganze Userform per VBA erzeugen und
eine entsprechende Anzahl Buttons definieren.

Hallo Laika,

was genau willst du tun, die UF per Vba zur Entwicklungszeit erstellen oder zur Laufzeit?
Wieviele Dateien sollen denn da ca. auswählbar sein mit den OBs?

Gruß
Reinhard

Hallo Reinhard mal wieder :wink:),

was genau willst du tun, die UF per Vba zur Entwicklungszeit
erstellen oder zur Laufzeit?

Zur Laufzeit. Ich könnte natürlich, wenn das einfacher ist, eine einfache UF konstruieren, diese dann zur Laufzeit entsprechend erweitern.
Z.Zt. habe ich eine mit 12 OB, belege nur die entsprechend er Anzahl vorhanderner Filmdateien, wenn dann eine nicht belegte angeklickt wird, geht’s eben ins Leere - geht auch, ist aber nicht so schön.

Wieviele Dateien sollen denn da ca. auswählbar sein mit den
OBs?

Max. 20, kann auch nur eine sein.
Ich möchte mich

  1. ein bisschen einarbeiten in diese Technik der Dialoge,
  2. einige Einstellungen für meine Vedeobearbeitung (Magix Videodeluxe) vorbereiten und dann mit einer Filmdatei starten. Die Filmdatei ist in einem bestimmten Verzeichnis, das durch die Vorarbeiten bekannt ist.
    Wie gesagt, ein bisschen einarbeiten, und da ist diese Anwendung gerade gut.

Gruß
Laika

Hallo Laika,

was genau willst du tun, die UF per Vba zur Entwicklungszeit
erstellen oder zur Laufzeit?

Zur Laufzeit. Ich könnte natürlich, wenn das einfacher ist,
eine einfache UF konstruieren, diese dann zur Laufzeit
entsprechend erweitern.

ich würde das letztere tun. Aus leidvollen Erfahrungen.
Zur Laufzeit erstellte UFs und ihre Elemente haben seltsame Nebenwirkungen, quasi Kolateralschäden :smile:
Ein Beispiel, du hast da einen CommandButton, den klickst du an oder simulierst das per Code, Im Click-Ereignisses des CommanButton steht

Application.EnableEvenst=false
'Code
Application.EnableEvenst=true

EnableEvents wirkt da Pustekuchen, einige Events werden ungewollt trotzdem durchlaufen. Okay, schrieb ich jetzt aus der Erinnerung,
mag manches nicht so richtig sein aber Fakt bleibt dadurch daß
ich seinerzeit die UF und ihre Elemte zur Laufzeit erstellt hatte
ergaben sich Schwierigkeiten.

Äh, damit will ich keinesfalls gesagt haben daß ich nicht eine UF
auch zur Laufzeit erstelle, seinerzeit war das schon heftiger Code
mit mehreren UFs und insgesamt rel. komplex.

An deiner Stelle würde ich wie schon von dir angedacht eine UF
erstellen und mal hochladen, wenn Code für die Dateien dabei ist den auch, aber ist egal.

Wenn das da max. 20 OBs gibt, okay ist so die Grenze, das könntest du
noch manuell tun alle zu plazieren.
D,h. die UF so groß machen daß alle draufpassen.

Dann wenn du zur Laufzeit weißt wieviele dateien du da hast
setzt du die nicht benötigten OBs auf .visible=false.
Ggfs. noch dazu passend die UF-Höhe verringern.

Z.Zt. habe ich eine mit 12 OB, belege nur die entsprechend er
Anzahl vorhanderner Filmdateien, wenn dann eine nicht belegte
angeklickt wird, geht’s eben ins Leere - geht auch, ist aber
nicht so schön.

Alternativ, die nicht benötigten auch immer sichtbar lassen aber mit .Enabled auf false setzen.

Gruß
Reinhard

2 Like

Hallo laika,

Ich habe ein Userform, darin OptionButtons. Über dies will ich
eine bestimmte Option, in meinem Fall einen Daeinamen
auswählen. Die Anzahl soll variabel sein

kannst du das nicht per Combobox oder Listbox darstellen? Dann kann der Nutzer nur eine Datei auswählen (wenn man es einstellt) und trotzdem ist die UF übersichtlich. Natürlich schauen wie lang (und ob überhaupt) der Pfad mit angegeben werden muss, aber das Problem hättest du auch bei Optionsfeldern.

LG

Hallo Reinhard nochmal,

Dann wenn du zur Laufzeit weißt wieviele dateien du da hast
setzt du die nicht benötigten OBs auf .visible=false.
Ggfs. noch dazu passend die UF-Höhe verringern.

Das mache ich jetzt und … es funltioniert. Ich hatte .visible=false schon mal verwendet, da hat’s nicht funktioniert - muss wohl doch was falsch gemacht/geschrieben haben.
Nebenbei: Die VBA-Hilfe ist da wohl nicht so toll. Gibt man ein Stichwort, z.B. „OptionButton“ ein, kommt ein Haufen kompliziertes Brimborium, mit dem ich, wohl auch die meisten Normalanwender nichts anfangen kann.

Das kannst Du mir sicher auch noch verraten: Wie kriege ich die OptionButtons in einer Schleife gesetzt? Bis jetzt mache ich das so:

Private Sub UserForm\_Initialize()

 OptionButton1.Caption = FilmDatei(1)
 OptionButton2.Caption = FilmDatei(2)
 OptionButton3.Caption = FilmDatei(3)
 :

End Sub

also alle Buttons nacheinander. „FilmDatei“ ist ein Feld, in das vorher die Dateinamen geschrieben wirden. Geht zwar, ist aber nicht so elegant. Ich habe schon eine For Each-Schleife versucht, kriege ich aber nicht zum Laufen.

Danke
Laika

Das kannst Du mir sicher auch noch verraten: Wie kriege ich
die OptionButtons in einer Schleife gesetzt? Bis jetzt mache
ich das so:

Private Sub UserForm_Initialize()

OptionButton1.Caption = FilmDatei(1)
OptionButton2.Caption = FilmDatei(2)
OptionButton3.Caption = FilmDatei(3)

Hallo Laika,

nachfolgender Code ist ein Beispiel wie du OBs mit ihrem Namen und in einer Schleife auch mit ihrem Index ansprechen kannst.
Bau dir eine UF mit 6 OBs…

Gruß
Reinhard

Private Sub UserForm\_Initialize()
Dim N, Filmdatei(1 To 3)
For N = 1 To 3 'Schleife nur um Testdaten zu erzeugen
 Filmdatei(N) = "Film" & N
Next N
With Me
 For N = 1 To 6
 If N 
1 Like

Moin Reinhard,

wieder mal professionelle Beratung und Lösung von Dir - Zeit dafür ein paar Sternchen zu geben.

Das „With Me“-Konstrukt kannte ich nicht. Ich hatte mit

Dim ob As Control

und dann

For Each ob in Filmdatei\_Auswahl

das in verschiedenen Versionen. Hat alles nicht geklappt.

Jetzt läuft’s, bis dann mal wieder.
Laika

Ach ja: Wo gibt es denn eine Doku, in der man auch mal die einfachen Sachen nachlesen kann? Ich hatte mich bisher relativ stark auf ein schon älteres Buch „VBA-Programmierung mit Excel 7“, Michael Kofler und gelegentlich die Hilfe und Online gestützt.

Hallo Laika,

wieder mal professionelle Beratung und Lösung von Dir - Zeit
dafür ein paar Sternchen zu geben.

ach, lass mal mit den Sternchen, die sind hier wertlos.
Ich mag gedeckte Schecks *Dollarzeichen in den Augen hab*
oder vllt. paar Fläschen Wein, Rot, Rose, weiß ist egal, Hauptsache trocken.

Das „With Me“-Konstrukt kannte ich nicht.

Mein Verhältnis zu Me ist ambivalent. Schon schick und kurz.
Wenn es im Modul einer Userform steht so ist es die UF.
Steht es aber im Modul eines Blattes so ist es das Blatt.

D.h. für mich, „lese“ ich komplexen Code mit vielen Modulen so
muß ich bei jedem „Me“ prüfen für was es gerade steht.
Bei With Userform1 oder With Worksheets(„TabelleX“) nicht.
Das heißt nun nicht daß ich bei „normalen“ Vbaprojekten Me nicht benutze.

Ach ja: Wo gibt es denn eine Doku, in der man auch mal die
einfachen Sachen nachlesen kann? Ich hatte mich bisher relativ
stark auf ein schon älteres Buch „VBA-Programmierung mit Excel
7“, Michael Kofler und gelegentlich die Hilfe und Online
gestützt.

K.A. Ich benutze keine Bücher, ich hab wie du die Hilfe, Google
und mich. Kofler ist empfehlenswert, also kein Fehlkauf.

Gruß
Reinhard

@Reinhard & Tobi@s und andere …
Hallo,

kurze Antwort nochmal, vielleicht auch zum allgemeinen Interesse.

Ich habe mich im Wesentlichen an Reinhards Vorschlag gehalten:

  • Eine Userform mit 25 OptionButtons definiert,
  • den benötigten Buttons verpasse ich die Filmdateinamen (.Caption) und schalte sie auf .Visible = True,
  • den Rest auf .Visible = False,
  • die UserForm passe ich entsprechend der Anzahl sichtbarer Buttons in der Höhe an.
    Mehr als 25 Dateien darf man dann eben nicht machen.

So sieht es aus:

Private Sub UserForm\_Initialize()

 Const UF\_ZUSATZ\_HOEHE% = 25
 Const UF\_BASIS\_HOEHE% = 80
 Dim i1%
 '------------------------------------------

 'TextBox1 als Überschrift
 Me.Label1.Caption = "Das Projektverzeichnis """ & [FILM\_VERZEICHNIS] & Projektname & "\Film\"" enthält folgende Filmdateien:" & vbLf & \_
 "Eine auswählen und VDL damit starten"

 'OptionButtons der UserForm entsprechend der Anzahl Filme
 'im Projektverzeichnis visible machen.
 'Das Feld "Filmdatei" wurde im Modul "INI\_Datei" gefüllt
 With Me
 For i1 = 1 To 25
 If Filmdatei(i1) "" Then
 .Controls("OptionButton" & i1).Visible = True
 .Controls("OptionButton" & i1).Caption = Filmdatei(i1)
 Else
 .Controls("OptionButton" & i1).Visible = False
 End If
 Next i1
 End With

 'Höhe der Userform "Filmdatei\_Auswahl" entsprechend der Anzahl Filme setzen
 Filmdatei\_Auswahl.Height = UF\_BASIS\_HOEHE + Anz\_Filmdateien \* UF\_ZUSATZ\_HOEHE

End Sub

Gruß und schönen Rest-Sonntag
Laika