Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.11.2010, 20:44   #1
kusyusha
Новичок
Джуниор
 
Регистрация: 14.11.2010
Сообщений: 2
По умолчанию как заставить VBA не откидывать нули впереди числа

Появилась необходимость написать макрос, который бы находил подряд числа (и воспринимал их не как текст, а именно как числа) от N до M, состоящие строго из 6 знаков, НО (!!!) впереди у этих чисел обязательно должен быть 0, возможно даже не один (т.к. в тексте попадаются и такие же числа с 1 впереди).

Суть в том, что я задаю диапазон N = 0xxxxx, M = 0yyyyy запускаю цикл от N до M (поэтому-то и важно, чтобы VBA воспринимал их числами) и обрабатываю их поиском и заменой. А VBA (какой бы тип переменных я не задала) почему-то откидывает впереди все лишние, по его мнению, нолики и гонит заменой как раз не то, что нужно.

Кто знает, как же заставить VBA воспринимать переменную числом с 6-ю знаками, чтобы первые знаки были нулями и не игнорировались, или как тогда по-другому написать макрос, чтобы он искал и заменял весь диапазон чисел от N до M?
kusyusha вне форума Ответить с цитированием
Старый 14.11.2010, 21:17   #2
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 378
По умолчанию

Вам нужна функция Format, преобразующая число в строку:
Код:
Dim N As Long

    N = 444
    Selection.Find.Text = Format(N, "000000")
Если числа любые шестизначные, то может помочь поиск с подстановочными знаками:
Код:
    Selection.Find.MatchWildcards = True
    Selection.Find.Text = "<0[0-9]{5}>"
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
Вождь вне форума Ответить с цитированием
Старый 14.11.2010, 21:55   #3
kusyusha
Новичок
Джуниор
 
Регистрация: 14.11.2010
Сообщений: 2
По умолчанию

Цитата:
Сообщение от Вождь Посмотреть сообщение
Вам нужна функция Format, преобразующая число в строку:
Код:
Dim N As Long

    N = 444
    Selection.Find.Text = Format(N, "000000")
Если числа любые шестизначные, то может помочь поиск с подстановочными знаками:
Код:
    Selection.Find.MatchWildcards = True
    Selection.Find.Text = "<0[0-9]{5}>"
Спасибо большое! Format действительно помог.

Но, на всякий случай, хотелось бы еще получше рассмотреть поиск с подстановочными знаками. С максимальным числом M ладно, а вот минимальное должно быть не меньше N, это можно в поиск с подстановочные знаками загнать? Я с программированием не особо дружу, поэтому сходу не смогу сообразить как это будет выглядеть. Может через If как-то?

Ой, и еще одно это тоже для того макроса нужно. Эти числа записаны скрытым текстом. Чего еще добавить в макрос, чтобы перед началом работы рон открыва скрытые символы, а если они и так открыты, то не трогал, а-то у меня получается только "toggle", тобишь если символы включены, то макрос их наоборот отключает в начале работы и не работает, еще и ошибку выдаёт.

Последний раз редактировалось kusyusha; 14.11.2010 в 22:14. Причина: чтобы не создавать нового сообщения
kusyusha вне форума Ответить с цитированием
Старый 14.11.2010, 22:27   #4
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 378
По умолчанию

С подстановочными знаками и скрытым текстом это будет где-то так:
Код:
Dim XMin&, XMax&, X&
Dim H As Boolean

    ' интервал
    XMin = 44444
    XMax = 55555
    ' отображаем скрытый текст
    With ActiveDocument.ActiveWindow.View
        H = .ShowHiddenText
        If .ShowHiddenText <> True Then .ShowHiddenText = True
    End With
    ' курсор в начало
    Selection.HomeKey wdStory, wdMove
    ' готовим поиск
    With Selection.Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .Forward = True
        .Wrap = wdFindStop
        .MatchWildcards = True
        ' отдельно стоящее 6-значное число начинающееся с нуля
        .Text = "<0[0-9]{5}>"
    End With
    ' ищем
    Do While Selection.Find.Execute
        ' текст в число
        X = CLng(Selection.Text)
        ' попадание в интервал
        If (XMin <= X) And (X <= XMax) Then
            ' Ваш код обработки
        End If
        Selection.Collapse wdCollapseEnd
    Loop
    ' восстанавливает отображение скрытого текста
    With ActiveDocument.ActiveWindow.View
        If .ShowHiddenText <> H Then .ShowHiddenText = H
    End With
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
Вождь вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как убрать нули??? Егор&Co Microsoft Office Excel 9 24.02.2011 12:39
Как заставить Vba "###" понимать не как число? Mike555 Microsoft Office Excel 5 25.01.2010 12:21
Вычеркнуть нули из числа Java PavelZet Помощь студентам 2 11.05.2009 01:35
как записывать в файл тип риал чтоб после точки эти нули убрать?? ТРОЯН=) Помощь студентам 3 24.04.2009 14:09