Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Word VBA

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39

Открыть новую тему     Написать ответ в эту тему

exMIB



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
 
 
Обсуждаем вопросы только по Word VBA
(программирование макросов, скриптов, пользовательских функций и т.п.).
Приветствуются ссылки на ресурсы и справочную литературу по теме.
 
Вопросы по работе с MS Word, не относящиеся к программированию, задаем в теме Microsoft Word

 
Обратите внимание, этот топик для помощи в изучении и использовании VBA. Посему запросы типа "Напишите мне такой-то макрос, я VBA не знаю и знать не хочу" не приветствуются.
Древняя мудрость: "Накорми голодного рыбой и он погибнет, научи его ловить рыбу и ты спасешь его."(R)
 
Рекомендации:
Если у Вас есть проблема, не решаемая стандартными средствами Word (об этом можно уточнить здесь) или требующая автоматизации, попробуйте для начала записать макрос самим Word (на вкладке Разработчик - Запись Макросов). Подробнее здесь. В большинстве случаев получившийся код (Разработчик-Макросы-Макрос-Изменить или Разработчик-Visual Basic) Вас не удовлетворит, но подскажет, какие объекты-методы-свойства использовать.  
Другой Ваш помощник - Просмотр объектов (Object Browser). Ну и встроенная помощь (F1), естественно.
 
Если Вы в тупике, покажите Ваш код (или часть кода) здесь.  Если вылезает ошибка, цитируйте ее полностью. Если код слишком большой, используйте тeг [more].
Используйте отладчик - Breakpoints (F9), Watches (Shift-F9), Steps (F8 и др.) Сильно облегчает поиск ошибок.

 
Рекомендуется к прочтению:
  • Начало работы с VBA в Word 2010
  • Microsoft Visual Basic for Application. Осетрова И.С., Осипов Н. А. Учебное пособие (руководство по программированию на VBA в MS Office)  
  • Введение в VBA для приложений MS OFFICE
  • Word и его объекты. Лекция из курса «Основы офисного программирования и документы Word»
  • WinApi. Лекция из курса "Основы офисного программирования и язык VBA" (для продвинутых)
  • Справка по VBA
  • Microsoft Word Visual Basic Reference - руководство по VBA (eng.)
  • Справочник по Word VBA
  • Блог Александра Гуревича  - тематический блог: советы по работе с Word и Excel и прочие материалы
  • Форум по VBA, Excel и Word Макросы в Word -тематический форум, готовые решения
  • Список полезной литературы по Word и программированию на VBA
  • Подборка решений на VBA для Word  
     
     
  • Excel VBA все вопросы по Excel VBA туда
  • Access все вопросы по программированию в Access туда
  • Книжульки по VBA - книги по программированию с использованием VBA
     
    Конкретные вопросы/готовые решения:
  • функция возвращает список закладок в документ
     
    Перечень основных ColorIndex'ов из MSDN
     
    - стартовый вопрос топика...

    Смежные темы:
    Программы » Microsoft Office 2019 & 365 | 2016 | 2013 | 2010 | 2007 | 2003
    Программы » OneNote | Outlook 2013 & 2016 & 2019 | Outlook 2010 | Microsoft Mathematics & Math Solver
    Программы » Word FAQ | Excel FAQ | Access FAQ
    Прикладное программирование » Excel VBA | Access VBA  
    Андеграунд » Microsoft Office 2019 | 2016 | 2013 | 2010 | 2007 | 2003
    Андеграунд » OneNote | Visio | SharePoint Server | Project Server | Exchange Server
    Андеграунд » Надстройки (add-ins) и коммерческие макросы Excel
    Андеграунд » Самостоятельная сборка дистрибутивов Оffice 2007/2010/2013/2016 | MUI для Office 2007

  • Всего записей: 3298 | Зарегистр. 27-09-2001 | Отправлено: 03:05 01-06-2005 | Исправлено: ALeXkRU, 17:10 03-08-2021
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Futurism
    Как то так для активного документа
    Подробнее...

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 09:47 28-05-2013
    Vadim39



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AndVGri
    Очень многому научился из вашего скрипта Спасибо большое!
    Подскажите, пожалуйста, а можно ли с помощью "VBScript.RegExp" выполнить такую замену: (стр1)(стр2) на (стр2)(стр1)? Если не ошибаюсь обычно для этого используется в строке поиска скобки а в строке замены "\n", но у меня почему-то не получается.
    И еще, возможно ли с помощью "Scripting.Dictionary" получить информацию о количестве вхождений каждого слова?
    Заранее признателен!

    Всего записей: 1117 | Зарегистр. 11-04-2002 | Отправлено: 20:59 28-05-2013 | Исправлено: Vadim39, 22:02 28-05-2013
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Vadim39

    Цитата:
    И еще, возможно ли с помощью "Scripting.Dictionary" получить информацию о количестве вхождений каждого слова?  

    Заменяем в коде

    Код:
     
        For i = LBound(subStr) To UBound(subStr)
            If Not pDict.Exists(subStr(i)) Then
                pDict.Add subStr(i), 1
            Else
                pDict(subStr(i)) = pDict(subStr(i)) + 1
            End If
        Next i
     

    В Items будет количество вхождений. Вывод числа вхождений

    Код:
     
        Dim sKey
        For Each sKey In pDict.keys
            Debug.Print "Слово " & sKey & " встречается " & pDict(sKey)
        Next
     


    Цитата:
    одскажите, пожалуйста, а можно ли с помощью "VBScript.RegExp" выполнить такую замену: (стр1)(стр2) на (стр2)(стр1)?

    Не понял, если честно. \n - ищет "принудительный" перевод строки в параграфе Word.

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 05:00 29-05-2013
    Vadim39



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AndVGri
    Большое спасибо!
    Первый вопрос был о синтаксисе VBScript.RegExp: как указанный в паттерне шаблон передать в строку замены.  Нигде не мог найти толкового описания, но в конце концов сообразил, что через "$n", где n  - номер шаблона в паттерне. Правда так и не нашел способа указать в паттерне начало слова, а также способ передачи в строку замены всего найденного (в Word это делается с помощью "^&").

    Всего записей: 1117 | Зарегистр. 11-04-2002 | Отправлено: 17:58 29-05-2013
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Если считать первую букву в слове буквой, идущей после пробела, то можно так

    Код:
     
        pReg.Pattern = " [а-яё]"
        myStr = pReg.Replace(myStr, " Q")
     

    Можно после такого получить коллекцию вхождений и менять по позициям
    Set pMatch = pReg.Execute(myStr)

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 05:09 31-05-2013
    Luci



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте!  
    Хочу в скрипте проконтролировать наличие списка в ячейке таблицы. Скриптом перебираю ячейки, но ListGalleries.Count применить к ячейке не могу. Как мне это сделать?
    P.S. Проблема решена -
    Код:
     Cell.Range.ListParagraphs.Count

    Всего записей: 14 | Зарегистр. 22-10-2003 | Отправлено: 10:28 02-07-2013 | Исправлено: Luci, 15:05 02-07-2013
    sashko1980



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Столкнулся с такой трудностью:
     
    Есть документ( word 2007), с расширением .docm, то есть с поддержкой макросов ( в самом документе есть элементы управления содержимым и макросы).  
    Пытаюсь этот документ сохранить как шаблон с поддержкой макросов (.dotm), чтобы на основе этого шаблона создавать новые документы с теми же работающими макросами. Проблема в том, что если на основе сохраненного шаблона создать новый документ, то макросы в нем почему-то не работают. Как добиться, чтобы макросы работали? Спасибо.

    Всего записей: 323 | Зарегистр. 01-03-2006 | Отправлено: 21:38 11-07-2013
    brok3n

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    добрый день!
    попал в довольно глупую ситуацию: писал большую статью, в которой должны быть скриншоты. место каждого скриншота отмечал словом "СКРИНШОТ". в итоге этих слов набралось около 500... подскажите, как ловко заменить "СКРИНШОТ" на "(Рис 1.1)", "(Рис 1.2) и т.д. номер рисунка соответствует номеру вхождения слова СКРИНШОТ в тексте.  
    благодарю.

    Всего записей: 61 | Зарегистр. 17-08-2006 | Отправлено: 00:54 09-08-2013 | Исправлено: brok3n, 00:55 09-08-2013
    vikkiv



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    brok3n
    (Рис 1.1) - (Рис 1.500) ? Точно что-ли? А не (Рис 2.5) .. (Рис 10.2) ?
    Алгоритм прост, х=1, затем поиск первого совпадающего слова (можно с проверкой форматирования) и замена на (Рис 1.х), потом х=х+1 , запуск поиска по новой (или через цикл с кол-вом оборотов =500) или For i=1 to 500 .. next i
    можно так вобщем:
    Код:
    Sub test()
    For i = 1 To 450
    Content.Find.Execute FindText:=ChrW(&H421) & ChrW(&H41A) & ChrW(&H420) & ChrW(&H418) & ChrW(&H41D) & ChrW(&H428) & ChrW(&H41E) & ChrW(&H422), ReplaceWith:="(" & ChrW(&H420) & ChrW(&H438) & ChrW(&H441) & " 1." & i & ")", MatchCase:=True, Replace:=wdReplaceOne
    Next i
    End Sub
    это поменяет первые 450 совпадений ну или сколько там нужно..
    если это не кирилица то проще:
    Код:
    Sub tst()
    For i = 1 To 450
    Content.Find.Execute FindText:="screenshot", ReplaceWith:="(Pic 1." & i & ")", Replace:=wdReplaceOne
    Next i
    End Sub

    Всего записей: 747 | Зарегистр. 10-11-2005 | Отправлено: 01:42 09-08-2013 | Исправлено: vikkiv, 01:04 10-08-2013
    brok3n

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    vikkiv
    большое спасибо! немного подкорректировал, чтобы работало )

    Код:
    Sub test()
    For i = 1 To 450
    Set myRange = ActiveDocument.Content
    myRange.Find.Execute FindText:="СКРИНШОТ", ReplaceWith:="(Рис 1." & i & ")", MatchCase:=True, Replace:=wdReplaceOne
    Next i
    End Sub

    вот в таком виде работает, кириллицу воспринимает без проблем.
    ещё раз благодарю за оперативную помощь.

    Всего записей: 61 | Зарегистр. 17-08-2006 | Отправлено: 03:17 11-08-2013 | Исправлено: brok3n, 03:18 11-08-2013
    vikkiv



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    brok3n
    Ну и отлично ... это скорее у кого как, на моей станции в установленных языках кириллицы нет, соответственно VBA без костылей её не читает и не пишет, может просто к системным шрифтам привязка идёт.
    а "myRange = ActiveDocument.Content" и им подобные именно с микрософтовских VBA образцов сразу распознаются =))

    Всего записей: 747 | Зарегистр. 10-11-2005 | Отправлено: 03:49 11-08-2013
    panda3

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ну не изврат ли, делать обычную замену текста через VBA? Вставьте в документ название "Рис. 1." с автонумерацией, вырежьте его в буфер обмена и сделайте глобальную замену слова СКРИНШОТ на содержимое буфера обмена.

    Всего записей: 203 | Зарегистр. 06-02-2007 | Отправлено: 09:08 12-08-2013 | Исправлено: panda3, 09:09 12-08-2013
    brok3n

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    panda3
    не получается именно автонумерация. подскажите, пожалуйста, и паззл будет готов )

    Всего записей: 61 | Зарегистр. 17-08-2006 | Отправлено: 00:54 13-08-2013
    Gena1971



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    brok3n
    Да получается всё отлично. Поле нумерации надо добавлять.
    Сразу копия поля вставится (с одной цифрой). Но если сохранить, и потом закрыть-открыть документ то она обновится и станет последовательной. При просмотре печати тоже обновляется, и просто на печать выводится уже обновлённая. Есть и сочетане клавишь для глобального обновления полей вроде.
    Косяк может возникнуть, я не помню точно, возможно при нумерации внутри таблиц. Давно просто встречал такое, но вроде в таблице ворд не мог правильно проставить последовательность. Может и починили уже. А может это и не в таблице было, где то другом месте.
    Но по тексту  нормально делается.

    ----------
    Фашисты будущего будут называть себя антифашистами - Черчилль
    Кому я должен, я всем прощаю...

    Всего записей: 2566 | Зарегистр. 25-01-2005 | Отправлено: 04:54 13-08-2013
    Alexey87

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите, пожалуйста, как скрывать/отображать определенные строки таблицы при использовании radiobutton или listbox с условием:
    да - определенные строки отображаются;
    нет - определенные строки скрываются;
    при открытии документа таблица должна быть загружена полностью.

    Всего записей: 655 | Зарегистр. 27-01-2008 | Отправлено: 12:58 18-09-2013
    panda3

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Alexey87
    По нормальному строки нельзя скрыть в Worde, можешь использовать
    Код:
    ActiveDocument.Tables(1).Rows(2).Range.Font.Hidden = True
    , но не должна быть включена настройка "показ скрытого текста" и, смотря что там в ячейках, не всегда строка скрывается целиком.

    Всего записей: 203 | Зарегистр. 06-02-2007 | Отправлено: 10:58 19-09-2013
    Alexey87

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    но не должна быть включена настройка "показ скрытого текста"

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

    Всего записей: 655 | Зарегистр. 27-01-2008 | Отправлено: 11:37 19-09-2013 | Исправлено: Alexey87, 13:42 19-09-2013
    panda3

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Код:
    ActiveDocument.ActiveWindow.View.ShowHiddenText = False
    И эта настройка для каждого окна своя.

    Всего записей: 203 | Зарегистр. 06-02-2007 | Отправлено: 08:34 23-09-2013
    Lovec



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите совсем новенькому в Word VBA - как мне макрос хоть на что то повесить?
    В Excel я щелкаю правой кнопкой на объекте - "добавить макрос". В ворде же обыскался, но так ничего и не нашел...
    Тут все по другому чем в Excel?

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 19:44 27-10-2013
    vikkiv



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Lovec (Word 2013) File -> Options -> Customize Ribbon -> Developer (поставить галку) , Там будет "Properties" или Двойной клик где можно назначить Макрос если объект "правильный".

    Всего записей: 747 | Зарегистр. 10-11-2005 | Отправлено: 19:53 27-10-2013 | Исправлено: vikkiv, 20:26 27-10-2013
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Word VBA


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru