2015-05-31 1 views
0

Итак, вот в чем проблема: В моей пользовательской форме у меня есть 2 флажка. Я хочу использовать значение флажка для выполнения определенного задания.Как исправить ошибку времени выполнения 424 при доступе к значению CheckBox в Excel VBA?


Пример:

Sub main() 
    UserForm1.Show 
    If UserForm1.CheckBox1.Value=True Then 
     MsgBox("Awesome") 
    End If 
End Sub 

Теперь моя проблема состоит в том, что он продолжает давать мне ошибку времени выполнения 424. Может кто-нибудь помочь мне с этим? Ваша помощь очень признательна. Спасибо.


Update:

Sub main() 
    UserForm1.Show 
    If UserForm1.CheckBox1.Value=True Then 
     Worksheets(1).Activate 
     If UserForm1.CheckBox1.Value=True Then 
      MsgBox("Awesome") 
     End If 
    End If 
End Sub 

Хорошо, теперь он останавливается после worksheets(1).Activate. Ваша помощь очень признательна. Спасибо.

ответ

0

Решение: Этот код работает для меня:

Sub main() 
    If UserForm1.CheckBox1.Value = True Then 
     MsgBox "Checkbox is checked" 
    End If 
End Sub 

Объяснение: Ошибка возникает потому, что вы не указали, какой объект (в данном случае: какая форма) CheckBox1 принадлежит. Поэтому я добавил UserForm1. в заявлении If. Во-вторых, CheckBox1.Value является булевым свойством, то есть значение будет True при проверке, а не 1.

enter image description here

Дополнительная информация: Пожалуйста, обратите внимание, что запуск If положение только после того, как UserForm1.Show (как вы делали в вашем примере) никогда не будет работать в случае, если вы собираетесь установить флажки после команды .Show. Форма будет показана, а предложение If должно быть запущено до того, как вы даже захотите установить этот флажок. Таким образом, код в моем ответе должен перейти в другой Sub, например. один запустится, когда вы нажмете кнопку в своей форме (у вас есть что-то вроде «ОК» или «Закрыть» на ней? Если да, дважды щелкните по кнопке в редакторе макросов и добавьте туда код). Дайте мне знать, если вам нужно больше контекста.

Update (в соответствии с просьбой в комментариях): Вот что у меня есть:

Sub a() 
    ' This launches the form 
    ' I added this to a normal Module in the 
    ' VBA editor 
    UserForm1.Show 
End Sub 

Private Sub CommandButton1_Click() 
    ' This is what is executed when clicking 
    ' the "OK" button 
    ' To add this code, add a button to your 
    ' form, double click it and paste this code 
    If UserForm1.CheckBox1.Value = True Then 
     Worksheets(1).Activate 
     MsgBox "Awesome" 
    End If 
    ' Update 2: Close form but keep 
    ' Checkbox1.Value available 
    Userform1.Hide 
End Sub 

Запуск a (от "Макросы" диалога на вкладке "Разработчик") дает мне:

enter image description here

Выбор флажок и нажав OK возвращает это:

enter image description here

+0

ОК, ваше решение работает.вы можете помочь мне с обновленным вопросом @nhee –

+0

Ваш код (из обновления в вашем вопросе) отлично подходит для меня. Мне также показаны Лист 1 и окно сообщения. Вы видели «дополнительную информацию» в своем ответе? – nhee

+0

И почему у вас есть два предложения 'If' с тем же условием в обновленном коде? – nhee