Если вы возвращаете логическое значение, вы должны возвращать истинное значение только в том случае, если все выполнено правильно, поэтому вы не получите ложноположительный результат, если что-то не получится.Вы можете использовать проверку, если для пустой ячейки ячейка имеет длину 0, т.е. если Len = 0. То, что вы делаете в своем операторе If Not, проверяет, находится ли значение ascii для c между значениями ascii от 0 до 9, так что вы можетеиспользуйте операторы или, чтобы проверить, находится ли он между a и z или A и Z или есть ли пробел, который является символом 32 - Chr (32):
Function chk2(A As String) As Boolean
Dim i As Integer, l As Integer, c As String
chk2 = false
l = Len(A)
If l = 0 then
'do something if the cell is blank
chk2 = true
ElseIf l = 4 Then
For i = 1 To l
c = Mid(A, i, 1)
If Not ((c >= "0" And c <= "9") Or (c >= "a" And c <= "z") Or (c >= "A" And C <= "Z") Or c = Chr(32)) Then
Exit Function
End If
Next i
chk2=true
End If
End Function