Vba excel проверка ввода

 

mamalot

Пользователь

Сообщений: 136
Регистрация: 24.02.2017

Добрый день.
Мучаюсь второй день (тупой я).
Необходимо чтобы после ввода данных в ячейку макрос проверил данные и если оно не проходят по критериям-выходим.
В ячейку вводятся числа (1,2,3,4,5,6,7,8,9,10,11,12)  через запятую в различных комбинациях (может быть просто 4).
Необходимо
получить все числа, разделённые запятыми и если хотябы одно число <1 или >12-выходим.
Не могу извлечь числа расположенные между запятыми.
На форуме находил подобные темы, но прикрутить не смог под свой случай.
Макрос в модуле листа:

Код
Sub Worksheet_Change(ByVal Target As Range)
    Dim tx As String
    Dim i As Long
    Dim t As String
    
    If Intersect(Target, Range("B:B")) Is Nothing Then
        Exit Sub
    End If
    If Target.Count > 1 Then Exit Sub
    tx = Target.Value
    If Len(tx) = 0 Then Exit Sub
    For i = 1 To Len(tx)
        t = Mid(tx, i, 1)
        If IsNumeric(t) Then
        MsgBox t
        If t > 12 Then
        MsgBox "Неверные данные"
        End If
        End If
    Next i
End Sub

Изменено: mamalot21.08.2018 10:23:04

Данный код позволяет выполнять проверку корректности ввода числового значения в текстовое поле (textbox) на форме,
автоматически блокируя ввод запрещенных символов

Используется событие KeyPress элемента управления TextBox

Допустимые символы: цифры от 0 до 9, точка (запятая автоматически заменяется на точку), знак «минус» (перед числом)

Предполагается, что текстовое поле имеет имя TextBox_Multiplier

Private Sub TextBox_Multiplier_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    On Error Resume Next
    Select Case KeyAscii
        Case 48 To 57, 8        ' цифры 0 - 9 и <Backspace> (эти символы всегда разрешены)
        Case 44, 46        ' обработка десятичного разделителя (44 - код запятой, 46 - код точки)
            KeyAscii = 46        ' если в поле  введена запятая, то заменим ее на точку
            If InStr(1, Me.TextBox_Multiplier.Text, ".") Then KeyAscii = 0        ' вторую точку нельзя
        Case 45        ' дефис (минус перед числом)
            If InStr(1, Me.TextBox_Multiplier.Text, "-") Then KeyAscii = 0        ' второй минус нельзя
            If Me.TextBox_Multiplier.SelStart Then KeyAscii = 0        ' минус допустим только перед числом
        Case Else
            KeyAscii = 0        ' остальные символы запрещены
    End Select
End Sub
  • 23055 просмотров

Не получается применить макрос? Не удаётся изменить код под свои нужды?

Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.

Проверка переменных и выражений с помощью встроенных функций VBA Excel: IsArray, IsDate, IsEmpty, IsError, IsMissing, IsNull, IsNumeric, IsObject.

Проверка переменных и выражений

Встроенные функции VBA Excel — IsArray, IsDate, IsEmpty, IsError, IsMissing, IsNull, IsNumeric, IsObject — проверяют значения переменных и выражений на соответствие определенному типу данных или специальному значению.

Синтаксис функций для проверки переменных и выражений:

Expression — выражение, переменная или необязательный аргумент для IsMissing.

Все функции VBA Excel для проверки переменных и выражений являются логическими и возвращают значение типа Boolean — True или False.

Функция IsArray

Описание функции

Функция IsArray возвращает значение типа Boolean, указывающее, является ли переменная массивом:

  • True — переменная является массивом;
  • False — переменная не является массивом.

Пример с IsArray

Sub Primer1()

Dim arr1(), arr2(1 To 10), arr3

    Debug.Print IsArray(arr1)  ‘Результат: True

    Debug.Print IsArray(arr2)  ‘Результат: True

    Debug.Print IsArray(arr3)  ‘Результат: False

arr3 = Array(1, 2, 3, 4, 5)

    Debug.Print IsArray(arr3)  ‘Результат: True

End Sub

Как показывает пример, функция IsArray возвращает True и в том случае, если переменная только объявлена как массив, но еще не содержит значений.

Функция IsDate

Описание функции

Функция IsDate возвращает логическое значение, указывающее, содержит ли переменная значение, которое можно интерпретировать как дату:

  • True — переменная содержит дату, выражение возвращает дату, переменная объявлена с типом As Date;
  • False — в иных случаях.

Пример с IsDate

Sub Primer2()

Dim d1 As String, d2 As Date

    Debug.Print IsDate(d1)  ‘Результат: False

    Debug.Print IsDate(d2)  ‘Результат: True

d1 = «14.01.2023»

    Debug.Print IsDate(d1)  ‘Результат: True

    Debug.Print IsDate(Now)  ‘Результат: True

End Sub

Функция IsEmpty

Описание функции

Функция IsEmpty возвращает значение типа Boolean, указывающее, содержит ли переменная общего типа (As Variant) значение Empty:

  • True — переменная содержит значение Empty;
  • False — переменной присвоено значение, отличное от Empty.

Пример с IsEmpty

Sub Primer3()

Dim s As String, v As Variant

    Debug.Print IsEmpty(s)  ‘Результат: False

    Debug.Print IsEmpty(v)  ‘Результат: True

v = 125

    Debug.Print IsEmpty(v)  ‘Результат: False

Range(«A1»).Clear

    Debug.Print IsEmpty(Range(«A1»))  ‘Результат: True

Range(«A1») = 123

    Debug.Print IsEmpty(Range(«A1»))  ‘Результат: False

End Sub

Как видно из примера, функцию IsEmpty можно использовать для проверки ячеек на содержание значения Empty (пустая ячейка общего формата).

Функция IsError

Описание функции

Функция IsError возвращает логическое значение, указывающее, является ли аргумент функции значением ошибки, определенной пользователем:

  • True — аргумент функции является значением ошибки, определенной пользователем;
  • False — в иных случаях.

Пользователь может определить одну или несколько ошибок для своей процедуры или функции с рекомендациями действий по ее (их) исправлению. Возвращается номер ошибки с помощью функции CVErr.

Пример с IsError

Допустим, пользователь определил, что ошибка №25 означает несоответствие аргумента функции Vkuba числовому формату:

Function Vkuba(x)

    If IsNumeric(x) Then

        Vkuba = x ^ 3

    Else

        Vkuba = CVErr(25)

    End If

End Function

Sub Primer4()

    Debug.Print Vkuba(5)  ‘Результат: 125

    Debug.Print IsError(Vkuba(5))  ‘Результат: False

    Debug.Print Vkuba(«пять»)  ‘Результат: Error 25

    Debug.Print IsError(Vkuba(«пять»))  ‘Результат: True

End Sub

Функция IsMissing

Описание функции

Функция IsMissing возвращает значение типа Boolean, указывающее, был ли необязательный аргумент типа данных Variant передан процедуре:

  • True — если в процедуру не было передано значение для необязательного аргумента;
  • False — значение для необязательного аргумента было передано в процедуру.

Пример с IsMissing

Function Scepka(x, Optional y)

    If Not IsMissing(y) Then

        Scepka = x & y

    Else

        Scepka = x & » (а необязательный аргумент не подставлен)»

    End If

End Function

Sub Primer5()

    Debug.Print Scepka(«Тропинка», » в лесу»)  ‘Результат: Тропинка в лесу

    Debug.Print Scepka(«Тропинка»)  ‘Результат: Тропинка (а необязательный аргумент не подставлен)

End Sub

Функция IsNull

Описание функции

Функция IsNull возвращает логическое значение, указывающее, является ли Null значением переменной или выражения:

  • True — значением переменной или выражения является Null;
  • False — в иных случаях.

Пример с IsNull

Функция IsNull особенно необходима из-за того, что любое условие с выражением, в которое входит ключевое слово Null, возвращает значение False:

Sub Primer6()

Dim Var

Var = Null

    If Var = Null Then Debug.Print Var  ‘Результат: «»

    If Var <> Null Then Debug.Print Var  ‘Результат: «»

    If IsNull(Var) Then Debug.Print Var  ‘Результат: Null

End Sub

Функция IsNumeric

Описание функции

Функция IsNumeric возвращает значение типа Boolean, указывающее, можно ли значение выражения или переменной рассматривать как число:

  • True — если аргумент функции может рассматриваться как число;
  • False — в иных случаях.

Пример с IsNumeric

Sub Primer7()

Debug.Print IsNumeric(«3,14»)  ‘Результат: True

Debug.Print IsNumeric(«четыре»)  ‘Результат: False

End Sub

Функция IsObject

Описание функции

Функция IsObject возвращает логическое значение, указывающее, является ли переменная объектной:

  • True — переменная содержит ссылку на объект или значение Nothing;
  • False — в иных случаях.

Функция IsObject актуальна для переменных типа Variant, которые могут содержать как ссылки на объекты, так и значения других типов данных.

Пример с IsObject

Sub Primer8()

Dim myObj As Object, myVar As Variant

    Debug.Print IsObject(myObj)  ‘Результат: True

    Debug.Print IsObject(myVar)  ‘Результат: False

Set myVar = ActiveSheet

    Debug.Print IsObject(myVar)  ‘Результат: True

End Sub


1 / 1 / 0

Регистрация: 20.04.2012

Сообщений: 46

1

Проверка правильности ввода числа

05.05.2012, 16:21. Показов 10500. Ответов 5


Студворк — интернет-сервис помощи студентам

Здравствуйте. Вот есть две переменные и нужно сделать так, чтоб когда мы вводили какой-то символ или букву вместо числа, при выводе значения писалось ошибку или т.п.. Пытался с IntNum=Aplication.InputBox(…), но при запуске кода, все время выскакивали ошибке в данной строчке.



0



KoGG

5590 / 1580 / 406

Регистрация: 23.12.2010

Сообщений: 2,366

Записей в блоге: 1

05.05.2012, 17:27

2

Visual Basic
1
2
3
4
5
6
7
8
9
10
    Dim a As Variant
    Do
        a = InputBox("Введите число")
        If a Like "*[!,[-].0-9]*" Then
            MsgBox "Это не число!"
        Else
            a = Replace(S, ",", ".", 1, , vbTextCompare) ' Меняем , на .
            Exit Do
        End If
    Loop



1



Казанский

15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

05.05.2012, 17:33

3

Можно объявить переменные определенного типа и обрабатывать ошибку:

Visual Basic
1
2
3
4
5
6
7
8
9
10
Dim IntNum As Long
On Error Resume Next
inp: IntNum = InputBox("Введите число")
If Err Then
    Err.Clear
    If MsgBox("Ошибка! Повторить ввод?", vbYesNo + vbExclamation) = vbNo Then Exit Sub
    GoTo inp
End If
On Error GoTo 0
' продолжение



1



1 / 1 / 0

Регистрация: 20.04.2012

Сообщений: 46

05.05.2012, 17:37

 [ТС]

4

Хм, интересные варианты. Попробую. Спасибо.



0



Dragokas

Эксперт WindowsАвтор FAQ

17992 / 7618 / 890

Регистрация: 25.12.2011

Сообщений: 11,351

Записей в блоге: 17

05.05.2012, 18:04

5

Через функцию проверки типа:

Visual Basic
1
2
3
4
do
  Num = InputBox("Введите число")
  if not isnumeric(num) then If MsgBox("Ошибка! Повторить ввод?", vbYesNo) = vbNo Then Exit Sub
loop until isnumeric(num)



1



1 / 1 / 0

Регистрация: 20.04.2012

Сообщений: 46

05.05.2012, 18:40

 [ТС]

6

Все варианты подходят, спасибо.



0



События:

KeyDown
KeyUp
KeyPress

Посылаются форме когда производится ввод данных. Событие KeyPress возникает когда пользователь нажимает клавишу, у которой есть ASCII код. Это событие не сгенирируется при нажатии функциональных клавиш. При том эти события есть как у формы:

Private Sub UserForm_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

End Sub

Так и у элементов управления TextBox, например:

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

End Sub

А это в свою очередь позволяет проверять ввод. Например, если в поле нужно ввести цифру, то легко проверить, что вводит пользователь. События KeyUp и KeyDown применяются для специальных функциональных клавиш или комбинаций типа Ctrl+Del, так как событие KeyPress их не отловит. Удобно использовать данное событие для проверки заполненности полей. Вот форма:

А вот код для нее. В момент нажатия ввода символа в поле проверяется заполненость полей:

Private Sub Test()
	Dim ctrl As Control
	Dim bool As Boolean
	bool = True
	For Each ctrl In Controls
		If TypeName(ctrl) = "TextBox" Then
			If ctrl.Text = "" Then
				bool = False
			End If
		End If
	Next ctrl
	UserForm1.CommandButton1.Enabled = bool
End Sub

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
	Call Test
End Sub

Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
	Call Test
End Sub

Private Sub TextBox3_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
	Call Test
End Sub

Like this post? Please share to your friends:
  • Vba excel примеры это
  • Vba excel проверить число или нет
  • Vba excel примеры помощь
  • Vba excel проверить цвет ячейки
  • Vba excel примеры открыт файл