2013-12-06 3 views
1

У меня есть поиск по тому же вопросу, и я видел несколько подобных сообщений, однако мой Userform по-прежнему не может работать. Я новичок в VBA и Userform.Проверьте, что по крайней мере 1 установлен флажок

У меня есть в общей сложности 12 флажков (12 месяцев), и я должен проверить, проверен ли хотя бы один из CheckBox.

Dim atLeastOneChecked As Boolean 
atLeastOneChecked = False 
Dim ctrlNCK As Control 
For Each ctrlNCK In Controls 
    If TypeName(ctrlNCK) = "chkMonth" Then 
     If ctrlNCK.Value = True Then atLeastOneChecked = True 
    End If 
Next ctrlNCK 

If Not atLeastOneChecked = True Then 
    MsgBox "Month cannot be empty.", vbExclamation, "Input Data" 
    Exit Sub 
    End If 
+0

Когда вы говорите «не может работать», вы имеете в виду, что он всегда возвращает False? –

+0

Да. Он всегда возвращает False, 'MsgBox' будет всплывать. – Gervina

ответ

0

Это проверялось, но попробовать:

If Left(ctrlNCK.Name,8) = "chkMonth" Then 

Я бы никогда не ожидал Тип быть "chkMonth". Это предполагает, что каждое релевантное имя CheckBox начинается с «chkMonth».

Если вам нужен только один и только один месяц, я бы подумал об использовании OptionButtons в Frame.

+0

Вы можете попробовать 'If InStr (ctrlNCK.Name," chkMonth ") = 1 Then', чтобы избежать ошибок для элементов управления с именами короче 8 символов. – Excellll

+0

@Excellll, я не думаю, что это вызывает ошибку. Например, '? left («a», 8) 'в окне« Немедленное окно »дает« a ». И из справки Excel 2010 есть следующее: «Если число больше или равно количеству символов в строке, возвращается вся строка». –

+0

@DougGlancy Спасибо за ваши ответы! Это работает :) Все мое имя 'CheckBox' начинается с' 'chkMonth'', я назвал его' 'chkMonth01" ... "chkMonth12" '. И я хочу, чтобы пользователь мог выбрать более 1 месяца, поэтому я использовал «CheckBox». Могу ли я спросить вас, только 'OptionButton' используется в' Frame'? Или 'CheckBox' можно использовать и в' Frame'? – Gervina

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