Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 修改宏以应用于单列_Excel_Vba - Fatal编程技术网

Excel 修改宏以应用于单列

Excel 修改宏以应用于单列,excel,vba,Excel,Vba,我有一个宏sub,我只想应用于一个列(F),而不是整个工作表,所以用户在输入尺寸代码以外的数据时不会收到错误消息 这就是我所拥有的: Private Sub Worksheet_Change(ByVal Target As Range) Dim A As Range, r As Range vars1 = Array("xs", "s", "m", "l", "xl", "xxl", "1x", "2x", "3x", "os", "s/m", "l/xl") Set A

我有一个宏sub,我只想应用于一个列(F),而不是整个工作表,所以用户在输入尺寸代码以外的数据时不会收到错误消息

这就是我所拥有的:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim A As Range, r As Range
    vars1 = Array("xs", "s", "m", "l", "xl", "xxl", "1x", "2x", "3x", "os", "s/m", "l/xl")
    Set A = Range("F:F")
        Set Target = A
       For Each r In Target
        If IsNumeric(Application.Match(LCase(r.Value), vars1, 0)) Then
        Exit Sub
        Else
            MsgBox "Invalid Size entered into cell " & r.Address
        End If
        Next r
End Sub

如果我在任何其他列中输入数据,我仍然会得到MsgBox

重构代码,类似这样的东西应该适合您:

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim rCheck As Range
    Dim rInvalids As Range
    Dim r As Range

    vars1 = Array("xs", "s", "m", "l", "xl", "xxl", "1x", "2x", "3x", "os", "s/m", "l/xl")

    Set rCheck = Intersect(Target, Me.Columns("F"))
    If Not rCheck Is Nothing Then
        For Each r In rCheck.Cells
            If Not IsNumeric(Application.Match(LCase(r.Value), vars1, 0)) Then
                If rInvalids Is Nothing Then
                    Set rInvalids = r
                Else
                    Set rInvalids = Union(rInvalids, r)
                End If
            End If
        Next r
        If Not rInvalids Is Nothing Then MsgBox "Invalid Size entered into cell " & rInvalids.Address
    End If

End Sub

工作得很好。非常感谢。