簡體   English   中英

數據驗證到動態范圍

[英]Data validation to a dynamic range

我的excel表中有一個名為“time”的列。 我想編寫一個代碼,這樣每當用戶在時間列中執行一個條目時,如果它是一個整數,它應該接受,但如果它不是彈出窗口,則應該顯示“只允許數字”。 此外,驗證應該是動態的,即如果用戶輸入新條目,則應自動驗證下一行

在此輸入圖像描述

在此輸入圖像描述

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

首先,您可以為想要“時間”的列創建范圍名稱,然后可以使用下面的示例代碼。

    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

在此輸入圖像描述

你可以嘗試:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM