Проверка десятичных данных с помощью макросов - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть рабочий лист с макросами, в котором у меня есть проверки данных для столбцов, где я хочу регулировать ввод данных.Я не могу использовать обычную функцию проверки данных в Excel, так как она не работает, так как мы копируем данные из других источников, что и есть в моем требовании. Так что я выполняю проверку данных с помощью макросов.У меня есть сценарий, где один столбец может вводить только десятичные данные.Условия следующие: входные данные имеют длину 9, которая составляет только 2 десятичных знака.Я частично написал макрос для этой проверки, который не работает (когда я делаю недопустимый входной макрос, не запускается, поэтому не появляется всплывающее окно msgbox), и я застрял в этой точке. Пожалуйста, помогите мне найти другое условие if дляпроверка.Макрос, который я написал, выглядит следующим образом:

Set AffectedCells = Intersect(Target, Target.Parent.Range("F:F"))

If Not AffectedCells Is Nothing Then

For Each Cell In AffectedCells
        If Not (Cell.Value * (10 ^ 2) Mod 10) <> 0 Then

            MsgBox "The value you entered is not valid." 

            Application.Undo 'undo insert
            Exit Sub 'stop checking after one invalid data was found.
        End If

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Это то, что вы пытаетесь?Я прокомментировал код, чтобы у вас не было проблем с его пониманием.Но если вы это сделаете, просто спросите.

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim xCell As Range, AffectedCells As Range

    On Error GoTo Whoa

    Application.EnableEvents = False

    Set AffectedCells = Intersect(Target, Columns(6))

    If Not AffectedCells Is Nothing Then
        For Each xCell In AffectedCells
            '~~> Avoid cases like IP address 10.1.2.234
            '~~> Check if the number contains decimal
            If IsNumeric(xCell.Value) And _
            Int(xCell.Value) <> xCell.Value Then
                '~~> Check the position of the decimal
                '~~> Check the length of the string
                If Mid(xCell.Value, Len(xCell.Value) - 2, 1) <> "." Or _
                Len(xCell.Value) > 9 Then
                    '
                    '~~> INVALID INPUT: Do what you want
                    '

                    'MsgBox "The value you entered is not valid."
                    'Application.Undo
                    'Exit For
                End If
            End If
        Next xCell
    End If

Letscontinue:
    Application.EnableEvents = True
    Exit Sub
Whoa:
    MsgBox Err.Description
    Resume Letscontinue
End Sub
0 голосов
/ 04 февраля 2019

Это должно быть вставлено в пространство кода листа для листа, на котором вы хотите запустить макрос.

Private Sub Worksheet_Change(ByVal Target As Range)

Dim xCell As Range, AffectedCells As Range

Set AffectedCells = Intersect(Target, Target.Parent.Range("F:F"))

If Not AffectedCells Is Nothing Then
    For Each xCell In AffectedCells
            If Not (xCell.Value * (10 ^ 2) Mod 10) <> 0 Then
                MsgBox "The value you entered is not valid."
                    Application.EnableEvents = False
                        Application.Undo
                    Application.EnableEvents = True
                Exit Sub
            End If
    Next xCell
End If

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...