Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen

Fehler bei ComboBox ohne Eingabe

Betrifft: Fehler bei ComboBox ohne Eingabe von: Sascha
Geschrieben am: 29.09.2020 13:59:06

Hallo zusammen,

Ich verwende in einer VBA-UserForm mehrere ComboBoxen.
Eine For Each-Schleife füllt mittels .AddItem-Methode die ComboBoxen mit Werten.
Zuätzlich füge ich händisch den Wert "" per .AddItem ein.

Folgende Eigenschaften gelten für die ComboBoxen:
MatchEntry = 1 - fmMatchEntryComplete
MatchRequired = True
Style = 0 - fmStyleDropDownCombo

Über ein Makro lese ich letztlich ein Tabellenblatt aus und weise somit den ComboBoxen Initialwerte zu.
So weit, so gut. Mein Problem beginnt, nachdem ein Change-Event die ComboBoxen cmb_Material1 bis 10 aktualisiert. Hierbei erhalten manche dieser Boxen den Wert "".
Aktiviert man eine solche ComboBox mittels Maus, Tab oder Enter, so gibt Excel an, der Eigenschaftswert sei ungültig. Daraufhin muss das Auswahlmenü der ComboBox geöffnet und der Wert "" manuell angewählt werden. Dann ist Excel zufrieden. Highlightet man die angeblich fehlerhafte ComboBox jedoch nicht, gibt es auch keinen Fehler.

Kann mir vielleicht jemand erklären, wie die Meldung zustande kommt, bzw. wie ich dieses Verhalten im Coding abfangen kann?

Hier geht es zur Beispiel-Datei. Die UserForm kann über den CommandButton "Bearbeiten" aufgerufen werden.
https://www.herber.de/bbs/user/140515.xlsm

Sollten Probleme mit der Beispieldatei bestehen, sagt mir gerne Bescheid. Dann versuche ich die Sache noch etwas deutlicher zu machen.

Besten Dank im Voraus und viele Grüße,
Sascha

Betrifft: AW: Fehler bei ComboBox ohne Eingabe
von: Nepumuk
Geschrieben am: 29.09.2020 15:45:01

Hallo Sascha,

teste mal:

Private Sub PlanAuslesen()
    
    'aktuelle Werte in die UserForm einladen
    Dim Spalte As Long, Zeile As Long, i As Integer
    
    '''Zeile und Spalte festlegen
    If cmb_Gelege.Value = "Geb01" Then
        Zeile = 13
        Spalte = 2
    ElseIf cmb_Gelege.Value = "Geb02" Then
        Zeile = 13
        Spalte = 5
    End If
    
    If Not cmb_Gelege.Value = "" Then 'Prüfung, ob ComboBox cmb_Gelege gefüllt ist
        
        With Worksheets("Schmelzplan")
            
            For i = 1 To 10
                
                With .Cells(Zeile, Spalte)
                    If .Text = vbNullString Then
                        Controls("cmb_Material" & CStr(i)).ListIndex = 0
                    Else
                        Controls("cmb_Material" & CStr(i)) = .Text 'Material
                    End If
                End With
                
                Controls("tbx_Faktor" & CStr(i)) = .Cells(Zeile, Spalte + 1).Value 'Faktor
                Controls("tbx_Menge" & CStr(i)) = .Cells(Zeile, Spalte + 2).Value 'Menge
                
                Zeile = Zeile + 1
                
            Next i
        End With
    End If
End Sub

Gruß
Nepumuk

Betrifft: AW: Fehler bei ComboBox ohne Eingabe
von: Sascha
Geschrieben am: 30.09.2020 07:25:46

Hallo Nepumuk,

dein Workaround hat einwandfrei funktioniert und mit etwas Recherche verstehe ich jetzt auch, warum Fehler aufgekommen ist. In Punkto Error-handling muss ich wohl noch einiges lernen. :D

Als netten Nebeneffekt kenne ich jetzt auch die Konstante vbNullString. Habe mich etwas belesen und werde sie künftig an Stelle "" nutzen.

Besten Dank für deine schnelle Hilfe!
VG, Sascha