2016-12-16 91 views
0

我正在Excel VBA中編寫腳本,我在Userform中工作。在這Userform,我有兩個ComboBox,ComboBox1ComboBox4ComboBox都是在腳本中填充的下拉列表。組合框選擇不出現在第一次單擊Excel VBA

我已經使ComboBox4得到填充,並取決於ComboBox1上的用戶輸入。我寫了下面的代碼:

Private Sub UserForm_Activate() 

    With ComboBox1 
     .AddItem "Afghanistan" 
     .AddItem "Åland Islands" 
     .AddItem "Albania" 
     .AddItem "Algeria" 
     .AddItem "American Samoa" 
     .AddItem "Andorra" 
    End With 

    With ComboBox4 
     .AddItem "Africa" 
     .AddItem "Americas" 
     .AddItem "Asia" 
     .AddItem "Europe" 
     .AddItem "MENA" 
     .AddItem "Other" 
    End With 
End Sub 

Private Sub ComboBox1_Change() 

If ComboBox1 = "" Then 
    ComboBox4 = vbNullString: ComboBox4.Enabled = True 
Else 
    Dim index As Integer 
    index = ComboBox1.ListIndex 

Select Case index 
    Case Is = 0 
     ComboBox4.Value = "Asia" 
     ComboBox4.Enabled = False 
    Case Is = 1 
     ComboBox4.Value = "Europe" 
     ComboBox4.Enabled = False 
    Case Is = 2 
     ComboBox4.Value = "Europe" 
     ComboBox4.Enabled = False 
    Case Is = 3 
     ComboBox4.Value = "MENA" 
     ComboBox4.Enabled = False 
    Case Is = 4 
     ComboBox4.Value = "Asia" 
     ComboBox4.Enabled = False 
    Case Is = 5 
     ComboBox4.Value = "Europe" 
     ComboBox4.Enabled = False 
End Select 

End If 

End Sub 

一切似乎工作正常。唯一的問題是ComboBox1有一個奇怪和令人討厭的行爲:每當我打開Userform並從ComboBox1的下拉列表中選擇一個選項或開始鍵入它時,它不會選擇該選項或鍵入該字母,除非我這樣做兩次。所以,如果我從列表中選擇一個選項,它將保持空白,直到我再次選擇它;如果我開始輸入,我輸入的第一個字母就不會出現,只有那些來自第二個輸入的字母。

我不明白髮生了什麼事情,並且對它進行了研究,儘管沒有成功。感謝您的幫助!

+1

我想用'combobox2'你的意思'combobox4'?這對我來說似乎很好。這是完整的代碼嗎? – MiguelH

+0

對不起,是的。 'ComboBox4'。這是完整的代碼。 – franciscofcosta

回答

1

使用ComboBox1_AfterUpdate()事件,而不是ComboBox1_Change()事件

1

在你的敘述你講述ComboBox1CombBox2,而你的代碼顯示ComboBox1CombBox4

只是檢查你不搞亂事情

然後,也許你有一些ComboBox2_Change(或ComboBox4_Change),改變你的代碼ComboBox1值,從而干擾ComboBox1_Change

BTW,你可以採用更短的代碼爲ComboBox1_Change,就像如下:

Private Sub ComboBox1_Change() 
    If ComboBox1 = "" Then 
     ComboBox4 = vbNullString: ComboBox4.Enabled = True 
    Else 
     ComboBox4.Enabled = False 
     Select Case ComboBox1.ListIndex 
      Case 0, 4 
       ComboBox4.Value = "Asia" 
      Case 1, 2, 5 
       ComboBox4.Value = "Europe" 
      Case 3 
       ComboBox4.Value = "MENA" 
      Case Else 
       ComboBox4.Enabled = True 
     End Select 
    End If 
End Sub 

,你會改變一切ComboBox4出現於ComboBox2

+0

@franciscofcosta,有沒有反饋? – user3598756

相關問題