Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Поиск 9-значных чисел с копированием в буфер Добавлено: 23.10.09 19:50  

Автор вопроса:  TinoRex
Есть необходимость: в открытом документе word найти все 9-значные номера, причем каких-либо конкретных разделителей нет, т.е. номера могут быть где угодно в тексте. Но номера всегда разделены хотя бы одним символом (не цифрой). Дальше нужно скопировать все найденные номера в буфер обмена, через запятую.

Решение как я понимаю сводиться к реализации 3 вещей:
1) поиск номеров
2) копирование их в строковую переменную, с разделителем (запятой)
3) копирование строки в буфер обмена

Помогите с макросом. Или хотя бы «пните» в нужном направлении.

Ответить

  Ответы Всего ответов: 8  

Номер ответа: 1
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #1 Добавлено: 23.10.09 22:14
т.е. эта 9ти значная цифра не отбита пробелами в начале и конце?

Ответить

Номер ответа: 2
Автор ответа:
 TinoRex



Вопросов: 1
Ответов: 3
 Профиль | | #2 Добавлено: 24.10.09 07:57
разделителем может быть любой символ (кроме цифры) или несколько символов, включая спецсимволы (абзац и т.д.)

Ответить

Номер ответа: 3
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #3 Добавлено: 24.10.09 10:36
пробелов нет, значит будет чуть сложнее

пинок в нужном направлении :)

  1. Sub Макрос1()
  2.     Dim Word As Object
  3.  
  4.     For Each Word In ActiveDocument.Words
  5.         If Word Like "*[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]*" Then MsgBox Word
  6.     Next
  7. End Sub

если не понимаешь ничего страшного, главное, чтоб отделить смог

Ответить

Номер ответа: 4
Автор ответа:
 TinoRex



Вопросов: 1
Ответов: 3
 Профиль | | #4 Добавлено: 24.10.09 12:43
Так не пойдет:
  1. If Word Like "*[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]*"

будут захватываться строки типа йцу123456789щу

Я записал макрос, там есть символ ^# - любая цифра, думаю как бы это организовать в грамотный цикл.
[source]
Selection.Find.ClearFormatting
    With Selection.Find
        .Text = "^#^#^#^#^#^#^#^#^#^#^#^#"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
[source]
Основная проблема: нужно чтобы каждое найденное 9-значное число дописывалось в строковую переменную через запятую.
Как скопировать результат в буфер я знаю, тут просто – переменная.Copy

Ответить

Номер ответа: 5
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #5 Добавлено: 24.10.09 12:56
Ну незнаю, поиском не пользовался.
Результат твоего кода будет зависеть от положения курсора.
А накапливать значения в переменную можно элементарно.

Переменная = Переменная & НовоеЗначение & ","

Ответить

Номер ответа: 6
Автор ответа:
 TinoRex



Вопросов: 1
Ответов: 3
 Профиль | | #6 Добавлено: 24.10.09 14:44
Спасибо, сделал, вроде работает :)

Ответить

Номер ответа: 7
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #7 Добавлено: 24.10.09 15:36
последнюю запятую отрезать не забудь

Ответить

Номер ответа: 8
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #8 Добавлено: 25.10.09 23:11
Можно через регулярные выражения.

  1. \d{6}

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам