2015-05-01 2 views
0

Я создал пользовательскую форму, на которой есть две кнопки. Один называется CmdCon6, а другой называется CmdLbs6. Когда вы нажимаете, они должны закрыть текущую пользовательскую форму, вытащить другую пользовательскую форму и вытащить значения из 4-го столбца на листе18 и добавить их в combobox с именем x48 (обе новые пользовательские формы имеют combobox с именем x48) в новой пользовательской форме , Диапазон значений ячеек, которые будут добавлены в combobox x48, будет уменьшаться, но никогда не будет превышать 20 (следовательно, почему я добавил цикл). Все работает отлично и делает то, что, как предполагается, будет делать, когда я нажимаю кнопку CmdCon6, но когда я нажимаю кнопку CmdLbs, она дает мне ошибку времени выполнения '70', разрешенную и выделяет 20-ю строку кода (строка между If и end, если в Sub CmdLbs_Click()).VBA combobox additem и получение ошибки во время выполнения 70

Я попытался изменить имя combobox x48 в пользовательской форме frmInputLbs6 и сохранить его как x48 для пользовательской формы frmInputCon6, но я все равно получил ту же ошибку.

Любые предложения по устранению этой проблемы? Я в тупике и не могу думать об этом. Заранее спасибо!

Private Sub CmdCon6_Click() 
    Unload Me 

    For x = 1 To 20 
     If Sheet18.Cells(x, 4).Value <> "" Then 
      frmInputCon6.x48.AddItem Sheet18.Cells(x, 4) 
     End If 
    Next x 

    frmInputCon6.Show 
End Sub 

Private Sub CmdLbs6_Click() 
    Unload Me 

    For x = 1 To 20 
     If Sheet18.Cells(x, 4).Value <> "" Then 
      frmInputLbs6.x48.AddItem Sheet18.Cells(x, 4) 
     End If 
    Next x 

    frmInputLbs6.Show 
End Sub 

ответ

0

Элементы управления UserForms являются закрытыми по умолчанию. Вы должны получить доступ к ним через коллекцию Controls:

Private Sub CmdLbs6_Click() 
    Unload Me 

    For x = 1 To 20 
     If Sheet18.Cells(x, 4).Value <> "" Then 
      frmInputLbs6.Controls("x48").AddItem Sheet18.Cells(x, 4) 
     End If 
    Next x 

    frmInputLbs6.Show 
End Sub 

Я бы также отметить, что, хотя вы говорите, что «они предполагают, чтобы закрыть текущий UserForm», это не то, что происходит. Ваши формы также на самом деле не полностью разгружены до тех пор, пока другие форма закрыта. Метод .Show по умолчанию является модальным, поэтому в коде выше frmInputCon6 не до конца разгружается до послеfrmInputLbs6 не работает.

Просто что-то, о чем нужно помнить, потому что это действительно испортило ваш стек событий. Вы можете увидеть результаты с помощью этого простого тестового кода. Добавить UserForm1 и UserForm2, и поставить кнопку на каждом из них и следующий код:

UserForm1:

Private Sub CommandButton1_Click() 
    Unload Me 
    UserForm2.Show 
End Sub  '<--Put a breakpoint here. 

Private Sub UserForm_Terminate() 
    Debug.Print "UserForm1 closed" 
End Sub 

UserForm2:

Private Sub CommandButton1_Click() 
    Unload Me 
    UserForm1.Show 
End Sub  '<--Put a breakpoint here. 

Private Sub UserForm_Terminate() 
    Debug.Print "UserForm2 closed" 
End Sub 

Поставьте точку останова на End Sub s каждого события Click(), запустите одну из форм и нажмите кнопки, чтобы прыгать назад и вперед несколько раз. Затем закройте одну из форм и подсчитайте, сколько раз вы ударяете точки останова, прежде чем вы действительно выйдете.

+0

Спасибо за ответ! Я добавил коллекцию элементов управления в код, но я все еще получаю ту же ошибку. Я в тупике, почему работает CmdCon6_Click() Sub, но просто получает ошибку в CmdLbs6_Click() Sub. Хорошая точка в методе .Show. Я провел ваш пример и понял, что вы имели в виду. Мне любопытно, если не закрытие каждой пользовательской формы, прежде чем переходить к следующему, является причиной ошибки. Спасибо – CitySushi

+0

Пара других причин, по которым вы можете получить это: Является ли свойство 'RowSource'' x48' установленным? Является ли свойство 'Locked' равным True? Установлен ли «ControlSource»? Установлен ли 'BoundColumn'? – Comintern

+0

Исправлено! Свойство RowSource для x48 было задано как «месяцы» в пользовательской форме frmInputLbs6. Я удалил «месяцы», и это сработало. Спасибо за ваше время и понимание! – CitySushi

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