2014-05-14 3 views
1

Я пытаюсь создать форму на excel, чтобы, когда люди не заполняют определенные ячейки, они получат всплывающие сообщения об ошибках. До сих пор я сделал этот код:Как проверить, является ли ячейка пустой с помощью VBA

If Len(I8) = 0 Then 
MsgBox "Please enter Required Date", vbExclamation 
Exit Sub 
ElseIf Len(D11) = 0 Then 
MsgBox "Please enter your name", vbExclamation 
Exit Sub 
ElseIf Len(H11) = 0 Then 
MsgBox "Please enter Work Phone", vbExclamation 
Exit Sub 
ElseIf Len(L11) = 0 Then 
MsgBox "Please enter Home Phone", vbExclamation 
Exit Sub 
End If 
MsgBox "All mandatory fields have been entered", vbExclamation 
End Sub 

который, казалось, работать, но когда я добавил текст в ячейке I8, то «Пожалуйста, введите нужную дату» MsgBox выскочило в любом случае.

Я также пробовал использовать Count(I8) = 0 и IfEmpty(I8) = True, но ни один из них не был признан должным образом в vba.

Кроме того, если я хочу, чтобы всплывающее сообщение появлялось, когда ячейка не заполнена, если они выбрали «ДА» из раскрывающегося списка, какова будет функция? До сих пор я написал

ElseIf Range("D28") = "P16" And Len(Range("M30")) = 0 Then 
MsgBox "Please Select whether this file is classified as confidential", vbExclamation 
Exit Sub 

Но мне нужна определенная функция, и я не уверен, что выбрать. Есть ли более длинный способ сделать это, чтобы обе ячейки заполнились, если они выбрали yes в первой ячейке?

+1

Что такое 'I8'? Не должно быть 'Range (« I8 »)' возможно или является именем управления –

+0

Вы можете попробовать проверить этот ответ: [Thread] (http://stackoverflow.com/questions/13360651/excel-how-to -check-если-а-клеток является пустым-с-УВОЙ). Надеюсь это поможет. – Weava

+1

Если 'I8' является ячейкой/диапазоном, то это должно быть' If Len (Range ("I8"). Value) = 0 ... 'per @mehow. Приветствия. –

ответ

3

Когда вы используете что-то вроде If Len(I8) = 0 Then в VBA, предполагается, что I8 - это переменная. Поскольку вы, очевидно, не указали эту переменную, Len(I8) всегда будет равна нулю.

Что нужно сделать, это использовать Range("I8") или даже ActiveSheet.Range("I8").Value вместо этого, чтобы получить значение, которое действительно находится в этой ячейке.

Так что ваш код должен измениться:

If Len(Range("I8")) = 0 Then 
MsgBox "Please enter Required Date", vbExclamation 
Exit Sub 
ElseIf Len(Range("D11")) = 0 Then 
MsgBox "Please enter your name", vbExclamation 
Exit Sub 
ElseIf Len(Range("H11")) = 0 Then 
MsgBox "Please enter Work Phone", vbExclamation 
Exit Sub 
ElseIf Len(Range("L11")) = 0 Then 
MsgBox "Please enter Home Phone", vbExclamation 
Exit Sub 
End If 
MsgBox "All mandatory fields have been entered", vbExclamation 
End Sub 

Чтобы избежать такого рода запутанных проблем, вы можете указать Option Explicit в самой верхней части модуля. Это приводит к тому, что excel выдает ошибку, когда вы используете необъявленные переменные, вместо этого, вместо того, чтобы просто догадываться, что с ней делать.

+0

Спасибо. :) Я изменил свой код, как вы предлагали, но когда я поставил «Option Explicit» в верхней части кода, он просто сказал «Ошибка компиляции: недопустимая внутренняя процедура» – desperatehipster

1

Просмотреть комментарии, почему ваш код не работает. Ниже приведены утверждения, которые будут оценивать True, если ваша ячейка пуста:

IsEmpty(myCell) 
myCell.Value = vbNullstring 
Len(myCell) = 0 

Наслаждайтесь!

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