VBA MS Word - Если строка содержит число больше 9999 - PullRequest
0 голосов
/ 18 мая 2018

Мне нужно проверить строку, чтобы увидеть, есть ли какие-либо ссылки на число, длина которого больше или меньше 4 символов.

Итак, вот несколько примеров чисел, которые могут быть в строке:

  • 0123
  • 3443
  • 9320

Так что это не так просто, как выбрать номер и проверить, если он больше999 и меньше или равно 9999, поскольку числа могут начинаться с 0.

Вот пример данных, которые могут храниться в строке

  • Идентификатор профиля: 3243,9432, 0232, 3423
  • ID профиля: 3243/3454/0213/3253
  • Тест 2434 2342 4325 2132

Вот несколько примеров того, что вернет действительныйи недействительно

0324    TRUE
39234   FALSE
2393    TRUE
192     FALSE

Поскольку не существует фиксированной дилеммы для разделения данных, я не уверен, как мне поступить при отделении чисел от строки.

Моя первоначальная идея заключалась в том, чтобы извлечь толькоцифры и заменить все остальные пробелом.Тогда используйте пространство как дилемму.Если строка была пустой, пропустите ее для проверки, но если она содержала значение, проверьте, была ли длина строки 4 символа.

Все решения или идеи приветствуются


Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Предполагая, что строка выбрана, вы можете использовать код, подобный следующему:

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

В кодированном виде макрос вставляет «Недопустимый» после строки, если он содержит номер вне допустимого диапазона.

0 голосов
/ 18 мая 2018
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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...