2016-06-25 5 views
0

В настоящее время у меня есть UserForm1, который содержит многостраничный список и список. В списке по существу показан диапазон данных самого листа excel.Excel VBA Обновите UserForm из другой кнопки команды UserForm

Я создал Userform2 как всплывающее окно, чтобы заполнить информацию, которая добавлена ​​в лист excel, который затем перемещается в списке в Userform1.

По существу пользователь переходит к списку, нажимает кнопку команды, появляется всплывающее окно, и пользователь заполняет эту информацию, нажимает «ОК», и она отображается в списке.

Проблема, которую я имею, заключается в том, что я не могу получить обновление списка, когда пользователь нажимает «ОК».

код у меня есть в командной кнопке «ОК»:

Private Sub CommandButton1_Click() 


Dim LastRow As Long, ws As Worksheet 

    Set ws = Sheets("Exchange") 

    LastRow = ws.Range("A" & Rows.Count).End(xlUp).Row + 1 

    ws.Range("A" & LastRow).Value = TextBox1.Text 
    ws.Range("B" & LastRow).Value = TextBox2.Text 
    ws.Range("F" & LastRow).Value = TextBox3.Text 
    ws.Range("G" & LastRow).Value = TextBox4.Text 
    ws.Range("E" & LastRow).Value = TextBox5.Text 
    ws.Range("H" & LastRow).Value = ComboBox1.Text 





UserForm2.Hide 

Forms!UserForm1.ListBox1.Requery 
Forms!UserForm1.Repaint 


End Sub 

В настоящее время я получаю ошибку времени выполнения «424» Объект требуется.

Любые предложения по обновлению?

Большое спасибо

+0

не должно использоваться для 'Forms!' ... try' UserForm1.ListBox1.Requery' и 'UserForm1.Repaint' –

+0

Большое спасибо за это. Я только что изменил конечную часть, как было предложено, и я получаю «Ошибка компиляции: метод или элемент данных не найден»? – Edd

+0

Как заполняется список пользователей UserForm1? Под «AddItem» или «RowSource»? В последнем случае, что такое утверждение, устанавливающее его свойство RowSource? – user3598756

ответ

0

А UserForm ListBox не имеет Requery свойство. Если вы установили свойство Row Source в адрес диапазона, тогда значения в ListBox будут обновляться, я считаю, всякий раз, когда лист пересчитывается.

Следующий код показывает это:

Const ADDR As String = "A1:A5" 

Sheet1.Range(ADDR).Value = WorksheetFunction.Transpose(Array(1, 2, 3, 4, 5)) 

UserForm1.Show False 
UserForm1.ListBox1.RowSource = ADDR 

Application.Calculation = xlCalculationManual 
Sheet1.Range("A5").Value = 6 
MsgBox "Ready to see change in listbox." 
Application.Calculate 

Если вы отключили autocalculation, то вы не увидите изменения в вашем ListBox. Возможно, есть другие способы отключения обновления, но я уверен, что EnableEvents и ScreenUpdating не входят в число них.

Вы должны проверить свой объект Calculation и, если вы его отключили, то либо принудите расчет Application.Calculate, либо переустановите свойство Application.Calculation = xlCalculationAutomatic.

+0

Привет, Я проверил дважды, и вычисления все еще автоматический. Если в UserForm1 я добавляю командную кнопку 'UserForm_Initialize', тогда все обновляется отлично. Проблема в том, что я хочу, чтобы это произошло из кнопки закрытия на UserForm2 (это форма для заполнения данных). Если я добавлю «UserForm_Initializ'e к этому действию, я получу« Ошибка компиляции: Sub или Function not defined » – Edd

+0

@Edd, можете ли вы обновить свой вопрос кодом из обеих Userforms. Я не совсем понимаю, что вы говорите, и будет легче увидеть весь код. – Ambie

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