Craig正在开发一个工作表,想知道是否有一种方法可以指定在任何给定单元格中可以输入的最大字符数。他不想使用数据验证来施加限制。

没有(如Craig提到的)

,就无法在Excel中直接执行此操作。使用数据验证。但是,您可以尝试一些方法来达到预期的效果。首先,您可以使用公式来检查任何单元格的长度,然后根据需要显示错误消息。例如,如果要检查的单元格在C列中,则可以使用以下公式:

=IF((LEN(C1)>15),"Cell is Too Long","")

将公式放在要检查的单元格右边的单元格中(例如D1单元格中),然后根据需要将其复制到尽可能多的单元格中。

在C1中输入条目时,如果该条目超过15个字符,则显示该消息。

如果不希望使用这种直接方法,则需要使用宏进行检查。下面是一个简单的示例,只要在工作表中进行了更改,就会触发该示例。然后检查工作表中的每个单元格以确保其长度不超过15个字符。如果发现了这样的单元,则会显示一个消息框并清除该单元。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

For Each cell In UsedRange         If Len(cell.Value) > 15 Then             MsgBox " Can't enter more than 15 characters"

cell.Value = ""

End If     Next End Sub

一种更可靠的方法是检入事件处理程序,以查看是否在需要限制长度的单元格范围内的某处进行了更改。

Private Sub Worksheet_Change(ByVal Target As Range)

Dim rng As Range     Dim rCell As Range     Dim iChars As Integer     On Error GoTo ErrHandler

'Change these as desired     iChars = 15     Set rng = Me.Range("A1:A10")



If Not Intersect(Target, rng) Is Nothing Then         Application.EnableEvents = False         For Each rCell In Intersect(Target, rng)

If Len(rCell.Value) > iChars Then                 rCell.Value = Left(rCell.Value, iChars)

MsgBox rCell.Address & " has more than" _                   & iChars & " characters." & vbCrLf _                   & "It has been truncated."

End If         Next     End If

ExitHandler:

Application.EnableEvents = True     Set rCell = Nothing     Set rng = Nothing     Exit Sub

ErrHandler:

MsgBox Err.Description     Resume ExitHandler End Sub

要使用此宏,您只需更改分配给iChars的值(代表允许的最大长度)和分配给rng的范围(当前设置为A1:A10)。因为宏仅检查指定范围内的更改,所以使用较大的工作表比检查所有使用的单元格的宏要快得多。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(10003)适用于Office 365中的Microsoft Excel 2007、2010、2013、2016、2019和Excel。您可以在此处找到适用于Excel的较早菜单界面的本技巧的版本: