2016-08-02 5 views
1

Ich schreibe einen VBA-Code, der von einem UserForm geöffnet wird, das 2 ComboBoxes und 2 TextBoxes enthält, um eine 2D-Matrix nach Benutzerauswahl zu bilden.VBA - Variable erhält ComboBox Wert wird sonst TextBox Wert Fehler

Was ich versuche zu tun ist, haben eine Variable erhalten den Combobox-Wert (eine Variable für jede Combobox) und wenn die Auswahl null ist, dann erhalten die Variablen den Wert der Textfelder. Ich habe den Ausdruck gegoogled, den ich dafür verwenden muss und stolperte auf IsNull, aber der Code funktioniert nicht. Was ich versucht war:

If IsNull(Matrix_Size_1.value) = False And IsNull(Matrix_Size_2.value) = False Then 
    lWidth = Matrix_Size_1.value 
    lHeight = Matrix_Size_2.value 

ElseIf IsNull(Matrix_Size_1.value) = True And IsNull(Matrix_Size_2.value) = True Then 
    lWidth = Matrix_Hand_1.value 
    lHeight = Matrix_Hand_2.value 
End If 

Natürlich muss ich auch plausibler Situationen filtern als: wenn ein Combobox leer ist, dann msgbox, wenn alles leer ist, dann msgbox aber ich werde es behandeln, sobald ich werde verstehen, warum Mein Code funktioniert nicht.

Aber die Fehler, die ich, wenn ich nichts von den Comboboxen wählen DO ist Typenkonflikt obwohl die Wenn Code eine Option für beide der Comboboxen leer sein muss.

Ich würde Ihre Hilfe zu schätzen wissen.

+0

Sie könnte es einfacher finden, die 'ListIndex' Property aus der Combobox-Steuerelement zu verwenden. Wenn ich mich erinnere, wenn ListIndex = -1 ist, dann hat die Box keinen Wert ausgewählt. – Takarii

Antwort

0

Wenn Combobox .Style Eigenschaft als fmStyleDropDownList gesetzt ist, dann diese

If Matrix_Size_1.ListIndex = -1 And Matrix_Size_2.ListIndex = -1 Then 

Wenn Comboboxen verwenden .Style Eigenschaft als fmStyleDropDownCombo gesetzt ist, dann diese Sie können die Style Eigenschaft im Entwurfsmodus

If Len(Trim(Matrix_Size_1.Value)) = 0 And Len(Trim(Matrix_Size_2.Value)) = 0 Then 

verwenden überprüfen indem Sie mit der rechten Maustaste auf die Combobox klicken und auf Eigenschaften klicken.

bearbeiten

Aus den Kommentaren, habe ich verstanden, dass Sie diese wirklich wollen

Dim lWidth As Single, lHeight As Single 

If Len(Trim(Matrix_Size_1.Value)) = 0 And Len(Trim(Matrix_Size_2.Value)) = 0 Then 
    lWidth = Val(Matrix_Hand_1.Value) '<~~> Val will take care of mismatch caused by empty boxes 
    lHeight = Val(Matrix_Hand_2.Value) 
Else 
    lWidth = Val(Matrix_Size_1.Value) 
    lHeight = Val(Matrix_Size_2.Value) 
End If 
+0

Es funktioniert immer noch nicht, auch wenn ich beide Textfelder fülle und die Variablen ihre Werte bekommen sollten. Meine Möglichkeiten sind Single gedimmt, vielleicht ist es das Problem? – vbmolec

+0

Was funktioniert nicht? Wie haben Sie 'lWidth' und' lHeight' deklariert? 'Als Single'? –

+0

@SiddharthRout Sie schlagen mich dazu :) –