2014-11-27 3 views
0

У меня есть кнопка управления, когда я нажимаю на нее, она отображает индивидуальную форму пользователя, содержащую выпадающий список с элементами, взятыми из ячеек листа. пользователь должен нажать команду, затем появится пользовательская форма, ему нужно выбрать один элемент из списка, элемент - имя листа в другой книге, соответственно, он будет импортировать данные с этого листа. однако я столкнулся с проблемой: , когда появляется пользовательская форма, я нажимаю на поле со списком, которое не показывает никаких элементов, тогда, если я нажму один раз на пользовательской форме, то снова проверьте со списком, он правильно показывает элементы, если я снова нажму на пользовательскую форму, элементы combobox будут украшены! если я выбрал элемент, он отлично работает. Так что я хочу достичь: я хочу, чтобы combobox показывал элементы напрямую, не нажимая на пользовательскую форму. код заключается в следующем:Элементы combobox Vba UserForm не отображаются до тех пор, пока я не нажму на пользовательскую форму

В UserForm:

Private Sub UserForm_Click() 



Dim mlf As Workbook 

Dim adad As Long 

Dim mada As String 

Dim lastRow As Long 

Set mlf = ActiveWorkbooklastRow = Sheet3.Cells(Rows.Count, 1).End(xlUp).Row 

For adad = 1 To lastRow 

mada = Sheet3.Cells(adad, 1) 

With ComboBox1 

     .AddItem mada 

End With 

Next 

    End Sub 


Private Sub cmdOkay_Click() 

'Verify that an item was selected 

If Me.ComboBox1.BoundValue = vbNullString Then 

    MsgBox "You did not choose an item!", vbOKOnly 

    Exit Sub 

Else 

    MsgBox "You have selected " & Me.ComboBox1.BoundValue, vbOKOnly 

    Sheet3.Cells(1, 2) = Me.ComboBox1.BoundValue 


End If 

    Unload Me 

End Sub 

В CommandButton

Dim testbook As Workbook 

Set testbook = ThisWorkbook 

Set database = Workbooks.Open(Filename:=myPath & myFile) 

testbook.Worksheets("Sheet4").Range("A1:B5").Clear 

With UserForm1 
.Caption = "Settings of the test" 
End With 

Dim lo As Integer 

For lo = 1 To database.Sheets.Count 

    testbook.Sheets("Sheet4").Cells(lo, 1) = database.Worksheets(lo).Name 

Next 

UserForm1.Show 

ответ

1

Это происходит потому, что вы говорите это, чтобы сделать это на событие щелчка.

Изменить

Private Sub UserForm_Click() 

в

Private Sub UserForm_Initialize() 

После того, как вы измените этот вопрос выпадающий будет также уйти.

+0

Я, конечно :) спасибо, это решает проблему –

+0

вы также можете использовать 'UserForm_Activate()', разница с Initialize является: Init срабатывает только один раз, так что если вы скрываете форму он не сбросит форма и данные; с другой стороны, активировать хиты каждый раз, когда отображается форма, поэтому каждый раз она будет сброшена. Конечно, это не повлияет на работу формы, если вы закроете ее с помощью 'unload Form' (или Me), но это будет, если вы« Form.hide ». –

+0

PS: как вы написали свой код, вам нужно сначала «combobox1.clear» перед тем, как заполнить его 'userform_activate' –

Смежные вопросы