Excel VBA-验证为数字和文本长度

Excel VBA-验证为数字和文本长度,vba,excel,Vba,Excel,我正在尝试验证Sub中工作表上的单元格,该单元格将进行检查,以确保它是一个数字且不超过所需的文本长度,这会有所不同,但我使用一个函数发现了这一点 我可以验证文本长度,但显然这仍然允许文本: With Selection.Validation .Delete .Add Type:=xlValidateTextLength, AlertStyle:=xlValidAlertStop, _ Operator:=xlBetween, Formula1:="0", Formula2

我正在尝试验证Sub中工作表上的单元格,该单元格将进行检查,以确保它是一个数字且不超过所需的文本长度,这会有所不同,但我使用一个函数发现了这一点

我可以验证文本长度,但显然这仍然允许文本:

With Selection.Validation
    .Delete
    .Add Type:=xlValidateTextLength, AlertStyle:=xlValidAlertStop, _
    Operator:=xlBetween, Formula1:="0", Formula2:=ValidMaxLength

非常感谢您的帮助。

考虑到我们要计算整数位数(不包括小数位数、减号或小数点):

带有选择。验证
.删除
.添加类型:=xlValidateCustom,警报样式:=xlValidAlertStop_
运算符:=xlBetween,公式1:=“=IF(“&Selection.Address&_
=0、TRUE和(ISNUMBER)(&Selection.Address&_
“”,向下舍入(LOG10(ABS(“”)_

&选择。地址(“”),0)这不起作用,因为我可以添加一个巨大的数字,它只是计算字段中的字符数,而不是应该添加的数字长度。当Excel将大数字更改为1E+NNI时,这是一个问题。我更改了计算数字的方法,即使它是科学格式。我忽略了十进制数字和减号也
With Selection.Validation
    .Delete
    .Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop, _
          Operator:=xlBetween, Formula1:="=IF(" & Selection.Address & _
          "=0, TRUE, AND(ISNUMBER(" & Selection.Address & _
          "), ROUNDDOWN(LOG10(ABS(" _
          & Selection.Address & ")),0)<" & ValidMaxLength - 1 & "))"
End With