2016-08-02 68 views
1

我正在編寫一個VBA代碼,它是從用戶窗體打開的,其中包括2個組合框和2個文本框,以便根據用戶的選擇形成2D矩陣。VBA - 變量獲取ComboBox值其他獲取TextBox值錯誤

我想要做的是,有一個變量獲取組合框值(每個組合框的一個變量),如果選擇爲空,則變量獲取文本框的值。 我google了我需要使用的表達和偶然發現IsNull,但代碼不起作用。我試過了:

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 

當然我也有過濾更合理的情況是:如果一個組合框爲空,則MSGBOX,如果一切都是空的,則MSGBOX但我會處理這一次,我就會明白爲什麼我的代碼不起作用。

但是,如果我不從組合框選擇什麼我得到的錯誤是類型不匹配即使如果代碼有兩個組合框的是空的選項。

我很感謝您的幫助。

+0

您可能會發現更容易從ComboBox控件使用'ListIndex'屬性。如果我記得,如果ListIndex = -1,那麼該框沒有選擇任何值。 – Takarii

回答

0

如果組合框.Style屬性設置爲fmStyleDropDownList然後用這個

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

如果組合框.Style屬性設置爲fmStyleDropDownCombo然後用這個

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

您可以在設計模式檢查Style財產通過右鍵單擊組合框並單擊屬性。

編輯

從評論,我已經認識到你真正想要這個

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

即使填充兩個文本框,變量也應該獲取它們的值,它仍然不起作用。我的變化是單調的,也許是問題所在? – vbmolec

+0

什麼不行?你怎麼聲明'lWidth'和'lHeight'。 '單身'? –

+0

@SiddharthRout你打我吧:) –