VBA ошибка в макросе
я пытаюсь познавать макросы в вба и не понимаю, почему мой код не работает, помогите пожалуйста разобраться, как павильно должен выглядить код? Этот не работает, эксель не хочет его воспринимать как макрос вообще
Private Sub warning(var_text As String)
If Range("A1") = "" Then
var_text = "пустая ячейка"
ElseIf Not IsNumeric(Range("A1")) Then
var_text = "нецифровое значение"
End If
MsgBox "Caution : " & var_text & " !"
End Sub
Ответы (3 шт):
Автор решения: arif
→ Ссылка
Макросы отличаются от внутренних подпрограмм тем, что не принимают аргументов. Вывод: напишите макрос (может вызываться кнопкой и.т.д.) и подпрограмму либо функцию отдельно
Public Sub warning() ' это макрос
Dim Stroka as String
Stroka = Range(A5).Value
If CheckWaring(Stroka) then
' что делать если функция нашла ошибку
end if
End sub
Private Function CheckWaring(var_text As String) as boolean
If Range("A1") = "" Then
var_text = "пустая ячейка"
warning = True ' в этом месте мы определяем то, что возвращает функция
ElseIf Not IsNumeric(Range("A1")) Then
var_text = "нецифровое значение"
End If
MsgBox "Caution : " & var_text & " !"
End Sub
Автор решения: vikttur
→ Ссылка
Если это проверка "по кнопке", то передавать в процедуру ничего не нужно:
Private Sub warning()
Dim var_text As String
If Range("A1").Value = "" Then
var_text = "пустая ячейка!"
ElseIf Not IsNumeric(Range("A1").Value) Then
var_text = "нечисловое значение!"
End If
If var_text <> "" Then MsgBox "Caution: " & var_text, 64, ""
End Sub
Если же ячейку нужно проверить в процессе работы другого макроса:
Private Sub test()
Dim var_text As String
Call warning(var_text)
If var_text <> "" Then
MsgBox "Caution: " & var_text, 64, ""
Else
' продолжаем работу'
End If
End Sub
Private Sub warning(sText As String)
Select Case True
Case Range("A1").Value = "": sText = "пустая ячейка!"
Case Not IsNumeric(Range("A1").Value): sText = "нечисловое значение!"
End Select
End Sub
Но правильнее оформить проверку в виде функуции:
Private Sub test()
If fwarning = True Then
MsgBox "Caution: Data error!", 64, ""
Exit Sub
End If
' продолжаем работу
End Sub
Private Function fwarning() As Boolean
If Range("A1").Value = "" Or Not IsNumeric(Range("A1").Value) Then fwarning = True
End Function
Разные способы проверки (If-ElseIf, Select Case, If-Or) приведены для примера.