VBA MS Word - 如果字符串包含大于9999的数字

时间:2018-05-17 22:24:30

标签: vba ms-word

我需要检查一个字符串,看看是否有一个长度超过或少于4个字符的数字引用。

以下是一些可能在字符串中的数字示例:

  • 0123
  • 3443
  • 9320

因此,选择数字并检查它是否超过999且小于或等于9999并不容易,因为数字可以从0开始。

以下是可以存储在字符串

中的数据示例
  • 个人资料ID:3243,9432,0232,3423
  • 个人资料ID:3243/3454/0213/3253
  • 测试2434 2342 4325 2132

以下是返回有效和无效

的一些示例
0324    TRUE
39234   FALSE
2393    TRUE
192     FALSE

由于分离数据没有固定的困境,我不确定如何将数字与字符串分开。

我最初的想法是只提取数字并用空格替换所有其他数字。然后使用空间作为困境。如果字符串为空,则跳过该字符进行检查,但如果它包含值,则检查字符串的长度是否为4个字符。

欢迎所有解决方案或想法

2 个答案:

答案 0 :(得分:1)

Function CheckNumbers(ByVal s As String) As Boolean
    s = " " & s & " "
    CheckNumbers = Not s Like "*#####*" _
                   And Not s Like "*[!0-9]###[!0-9]*" _
                   And Not s Like "*[!0-9]##[!0-9]*" _
                   And Not s Like "*[!0-9]#[!0-9]*"
End Function

https://msdn.microsoft.com/en-us/vba/language-reference-vba/articles/like-operator

答案 1 :(得分:1)

假设选择了字符串,您可以使用以下代码:

Sub Demo()
Dim StrData As String, StrTmp As String, i As Long
With Selection
  If InStr(.Text, vbCr) Then
    .Collapse wdCollapseStart
    .MoveEndUntil vbCr, wdForward
  End If
  StrTmp = Replace(Replace(Replace(Replace(Split(.Text, vbLf)(0), vbTab, " "), "/", " "), ",", " "), "  ", " ")
  For i = 1 To UBound(Split(StrTmp, " "))
    StrData = Split(StrTmp, " ")(i)
    If IsNumeric(StrData) Then
      If Len(Split(StrTmp, " ")(i)) <> 4 Then
        .InsertAfter " Invalid": Exit For
      End If
    End If
  Next
End With
End Sub

如果已编码,则宏在字符串后面插入“无效”,如果它包含超出范围的数字。