Hallo Leute.
Ich habe ein Makro geschrieben welches unter bestimmten Voraussetzungen ein UserForm lädt mit einer Kombobox und Button.
Das Läuft auch aber,
das Makro soll warten bis ich in der Kombobox was gewählt und den Okay Button gedrückt habe.
Ich bekomme es einfach nicht hin, wie kann ich das umsetzen?
DANKE
Hallo,
hier ein kleines Beispiel:
- Button im Sheet öffnet die Userform
- Die KomboBox ermöglicht eine Auswahl
- Der CommandButton startet eine Aktion
mfg
PS: In Foren ist es nicht so einfach Hilfe mit xlsm-Files anzubieten
Moin,
eine UserForm ist auch nur eine Klasse, also kannst du ihr einfach eine Function schenken, die dir das Ergebnis der Auswahl zurückgibt. Dabei läuft dein Haupt-Code auch nicht weiter:
Code:
Option Explicit
'ClassName: ChoiceBox
Private mRetVal As Variant
Public Function GetChoice(choices As Variant, Optional Prompt As String = "Bitte Auswahl treffen")
If IsArray(choices) Then
Me.ComboBox1.List = choices
Else
Me.ComboBox1.AddItem choices
End If
Me.Show
GetChoice = mRetVal
End Function
Private Sub CommandButton1_Click()
'OK
If Me.ComboBox1.ListIndex <> -1 Then
mRetVal = Me.ComboBox1.Text
Me.Hide
Else
MsgBox "Bitte erst eine Auswahl treffen, oder Abbrechen", vbCritical
End If
End Sub
Private Sub CommandButton2_Click()
'Cancel
mRetVal = -1
Me.Hide
End Sub
aufrufen kannst du den Code beispielsweise wie folgt:
Code:
Option Explicit
Sub test()
Dim cb As New ChoiceBox
Dim auswahl As Variant
auswahl = cb.GetChoice(Array("Franz", "jagt", "im", "komplett", "verwahrlosten", "Taxi", "quer", "durch", "Bayern"))
If auswahl = -1 Then
Debug.Print "Abgebrochen"
Else
Debug.Print auswahl
End If
End Sub
Aber unabhängig davon; sobald du die UserForm mit der .Show()-Methode modal anzeigst (das ist der Standard) fährt der Code erst fort, wenn du die Userform wieder ausgeblendet hast.
Viele Grüße
derHöpp
Hallöchen,
oder so:
Code:
Private Sub CommandButton1_Click()
If Me.ComboBox1.ListIndex > -1 Then Unload Me
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = 0 Then Cancel = True
End Sub
Der zweite Teil verhindert dann noch, dass das UF über X verlassen wird. Statt Unload Me kannst Du auch Me.Hide nehmen, wenn Du den Inhalt der Combo danach aus ihr holen willst. Ich würde aber ggf. eine Variable verwenden ...
Moin,
ich bin inhaltlich ganz bei dir und Matthieu. In diesem Fall würde ich allerdings sagen, dass die Business-Logik nie skaliert werden muss. Zudem scheint der TE weder an Programmierung noch an der Begleitung seiner eigenen Threads interessiert.
Aber ja, als Faustregel: Objekte werden -wenn überhaupt- nur im Terminate-Event entladen und wie sooft betont, eine UserForm wird nur als Klassenmodul benutzt, das nur für Tests mit den Public-Accessors verwendet wird und sonst natürlich über eigene Accessoren bedient wird.
Viele Grüße
derHöpp