在Excel VBA中验证单元格

时间:2018-07-10 16:08:51

标签: excel excel-vba

我想向一列内的单元格添加单词限制验证。例如,我不希望有人输入超过150个单词。这可能吗?如果是这样,这是怎么做的?

我写了一个公式来计算单元格中的单词,并尝试向单元格中添加数据验证,但是它无法正常工作。因此,我希望VBA可以帮助我实现这一目标。

请帮助!

2 个答案:

答案 0 :(得分:3)

您可以使用Worksheet_Change()事件来跟踪对单元格的更改,并在满足某些条件时执行一些操作:

在VBA中,在Project - VBAProjects窗格中双击此单元格所在的工作表。然后添加以下代码:

Private Sub Worksheet_Change(ByVal Target As Range)
    'Target contains the range that triggered this subroutine to fire
    'Lets test it to see if it's the cell we are wanting to track

    If Not Intersect(Target, Range("A1")) Is Nothing Then
        'Cell A1 was changed

        'Shut off events to stay out of endless loops
        Application.EnableEvents = False

        'We can use the Split() function to split the cell into an array
        'using space as a delimiter
        Dim arrWords
        arrWords = Split(Target, " ")

        'Now we can test the size of that array to see if it's more than 150
        If UBound(arrWords) > 150 Then

            'message user
            MsgBox ("You entered more than 150 words into this cell. Try again")

            'Clear the cell
            Target.ClearContents

            Application.EnableEvents = True
        End If

    End If
End Sub

我想您想做些更友好的事情,然后向他们发送消息,然后将他们的辛勤工作倾注于以太坊中,但这应该为您提供一个前进的方向。

如果您只想截断150个单词而不是清除内容,则可以使用@Jeeped的出色代码:

代替

 Target.ClearContents

使用:

 Target.Value = join(split(target, chr(32), 150), chr(32))

如果您想要较小的内容而只是盲目地将其截断为150个单词,而不会提醒用户,您可以执行以下操作:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A1")) Is Nothing Then
        Application.EnableEvents = False
        Target.Value = Join(Split(Target, Chr(32), 150), Chr(32))
        Application.EnableEvents = True
    End If
End Sub

答案 1 :(得分:0)

您不需要VBA来建立对单元格中字符数的限制。只需转到“数据”标签中的“验证”选项,然后在“允许”组合中选择一个称为“文本长度”的内容,然后将所需的值限制即可。 (对不起,如果我说的命令是错误的,因为我的excel是西班牙语而不是英语)