Проверка данных в динамическом диапазоне - PullRequest
0 голосов
/ 22 мая 2019

У меня есть столбец с именем "time" в моем листе Excel.Я хочу написать код такой, что всякий раз, когда пользователь выполняет запись во временном столбце, если это целое число, он должен принять, но если это не так, должно появиться всплывающее окно с надписью «разрешены только цифры».Кроме того, проверка должна быть динамической, т. Е. Автоматически проверять следующую строку, если пользователь вводит новую запись

enter image description here

enter image description here

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

If Target.Column = Range("Meeting Time").Column Then

    If Not (IsNumeric(Target.Value)) Then

        MsgBox "only numbers allowed"

        Target.Value = ""

        Target.Select
    End If

End If

End Sub

Ответы [ 2 ]

0 голосов
/ 22 мая 2019

Вы можете попробовать:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

    '1. Check if the column that affected is B (change to the column you want)
    '2. Check if changed field is one (used to avoid errors if user change more than one cells at the same time)
    If Not Intersect(Target, Columns("B:B")) Is Nothing And Target.Count = 1 Then
        'Check if target is numeric
        If Not IsNumeric(Target.Value) Then
            Call Clear(Target)
        End If
        'Check if target.offset(1,0) is numeric
        If Not IsNumeric(Target.Offset(1, 0).Value) Then
            Call Clear(Target.Offset(1, 0))
        End If
    End If

End Sub

Sub Clear(ByVal rng As Range)

    'Disable events in order to prevent code to re trigger when clear cell
    Application.EnableEvents = False
    rng.Value = ""
    'Enable events
    Application.EnableEvents = True

End Sub

РЕДАКТИРОВАННАЯ ВЕРСИЯ:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

    '1. Check if the column that affected is B (change to the column you want)
    '2. Check if changed field is one (used to avoid errors if user change more than one cells at the same time)
    If Not Intersect(Target, Columns("B:B")) Is Nothing And Target.Count = 1 Then
        'Check if target is numeric
        If Not IsNumeric(Target.Value) Then
            Call Clear(Target)
        ElseIf Target.Value > 160 Or (Target.Value = Int(Target.Value) = False) Then
             Call Clear(Target)
        End If
        'Check if target.offset(1,0) is numeric
        If Not IsNumeric(Target.Offset(1, 0).Value) Then
            Call Clear(Target.Offset(1, 0))
        ElseIf Target.Offset(1, 0).Value > 160 Or (Target.Offset(1, 0).Value = Int(Target.Offset(1, 0).Value) = False) Then
            Call Clear(Target)
        End If
    End If

End Sub

Sub Clear(ByVal rng As Range)

    'Disable events in order to prevent code to re trigger when clear cell
    Application.EnableEvents = False
    rng.Value = ""
    'Enable events
    Application.EnableEvents = True

End Sub
0 голосов
/ 22 мая 2019

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

    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

    If Target.Column = Range("time").Column Then

      If Not (IsNumeric(Target.Value)) Then

        MsgBox "only numbers allowed"

        Target.Value = ""

        Target.Select

      End If

    End If

End Sub

enter image description here

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