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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    popkov

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

    Цитата:
    Цепляешь процедуру на кнопку макроса в пользовательской панели Word.  

    А как это сделать? В Настройка::Макросы не отображаются Forms...
     
    Сейчас я весь код запихнул в форму, оформив процедуру как сабрутину. Так даже удобнее, но как всё это привязать к кнопке панели инструментов??

    Всего записей: 1833 | Зарегистр. 22-03-2003 | Отправлено: 01:44 14-05-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    popkov
    Так, давай по порядку
    1) В редакторе кода формы на областью ввода есть 2 раскрывающихся списка. Левый список объектов формы, включая саму форму. Правый список событий для выбранного объекта. Если тебе нужен обработчик события объекта, выбираешь в них объект и соответствующе событие. VBA автоматически формирует тебе процедуру обработчик события, остаётся только вписать код.
    2) Если тебе нужно вызвать процедуру из обработчика события, то либо пишешь её в форме и объявляешь её скрытой Private, если хочешь скрыть её видимость вне пределов кода формы. Если же тебе нужно вызвать стороннюю процедуру (в коде какого-нибудь модуля) до объявляй её с атрибутом Public - видимый везде.
    3) Добавление кода вызова формы
    В модуле пишешь процедуру
    Public Sub MyFormShow() 'или назови её как тебе нравиться
       UserForm1.Show 'форма может у тебя называться по другому (смотри инспектор объектов проекта)
    End Sub
    Далее переключаешься в Word и в меню Вид/Панели инструментов/Настройка
    там на вкладке панели, если хочешь создаёшь свою панель инструментов. На вкладке команды выбираешь выбираешь в списке категорий категорию макросы, а в ней будут отображены все Public процедуры без параметров, включая и MyFormShow перетягиваешь её на панель инструментов, настраиваешь подсказку и внешний вид. Жмёшь Ок. И читай, будь добр, справку. Вопросы то...

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 08:54 14-05-2007
    popkov

    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AndVGri
    Разместить процедуру вызова формы
    Public Sub MyFormShow()  
       UserForm1.Show  
    End Sub  
    в коде формы никак нельзя? Обязательно в другом модуле?

    Всего записей: 1833 | Зарегистр. 22-03-2003 | Отправлено: 12:43 14-05-2007
    popkov

    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AndVGri
    А как узнать имя закладки, на которуя ссылается поле wdFieldGoToButton? Цель - превратить это поле в гиперссылку на эту закладку.

    Всего записей: 1833 | Зарегистр. 22-03-2003 | Отправлено: 00:06 17-05-2007
    Ramon106



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго времени суток.
    Можете ли кто-нибудь привести пример работы со стилями форматирования (MS Word) на vba.
    Хотелось бы узнать какие стили есть в текущем документе и вывести их в массив или объект наподобие listbox.  
    Интересно и то, как по заданному стилю на vba реализовать выделение текста с таким стилем.
    Буду рад любым примерам работы с ними.
    Заранее спасибо.

    Всего записей: 200 | Зарегистр. 09-07-2006 | Отправлено: 19:13 17-05-2007
    AndVGri

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

    Цитата:
    Хотелось бы узнать какие стили есть в текущем документе и вывести их


    Код:
     
    Dim pStyle As Style
    For Each pStyle In ActiveDocument.Styles
       Debug.Print pStyle.NameLocal
    Next pStyle
     


    Цитата:
    как по заданному стилю на vba реализовать выделение текста с таким стилем.

    Как реализовать множественное выделение - не знаю, а найти весь текст с заданным стилем, например с таким же, где стоит курсор

    Код:
     
    Dim pFind As Find
     
    Set pFind = ActiveDocument.Range.Find
    pFind.Style = Selection.Style
    Do While pFind.Execute("", Forward:=True, Format:=True)
        Debug.Print pFind.Parent.Text
    Loop
     

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 20:12 17-05-2007
    popkov

    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    2All Есть ли универсальный способ получить диапазон (Range), внутри которого находится значение данного поля (Filed). Нужно, чтобы после разрыва связи с полем (fld.Unlink) в соответствующей переменной типа Range сохранилось отображаемое значение поля.
     
    Для разных типов полей работают, к сожалению, только разные мотоды.
     
    Например, для полей типа
    Цитата:
    { GOTOBUTTON ZEqnNum182504  \* MERGEFORMAT { REF ZEqnNum182504 \! \* MERGEFORMAT }}

    Работает метод fld.Code (где fld - текущее поле wdFieldGoToButton), а также метод fld.Next.Result.
    Однако для полей типа
    Цитата:
    { REF _Ref166949450 \h }

    этот метод не работает, но работает метод fld.Result...
     
    Есть ли универсальный метод, который для любого типа полей позволяет получить Range, в котором после Unlink окажется значение поля?

    Всего записей: 1833 | Зарегистр. 22-03-2003 | Отправлено: 22:14 17-05-2007 | Исправлено: popkov, 22:15 17-05-2007
    goldzub



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как написать надстройку?  
    С первого раза в инете ничего не нашел. Может кто знает хорошие ссылки посвященные этому вопросу?

    Всего записей: 72 | Зарегистр. 26-10-2002 | Отправлено: 17:32 20-05-2007
    popkov

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

    Цитата:
    хорошие ссылки посвященные этому вопросу

    Тоже долго искал. Нашёл только хороший курс ИНТУИТ: http://www.intuit.ru/department/office/vba2000/
    Если найдёшь ещё что-либо стоящее - не поленись, запости сюда, а то и правда трудно инфу искать...

    Всего записей: 1833 | Зарегистр. 22-03-2003 | Отправлено: 18:26 20-05-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    goldzub
    Так такового понятия надстройка для Word нет (на VBA разумеется). Эту функцию выполняют шаблоны dot. Создаёшь public процедуры действий, цепляешь их на кнопки пользовательских панелей инструментов, вкладываем панели в шаблон. Аналогично при создании меню.
    Реально надстройки делаются в Visual Studio (может и ещё в чём то, не знаю). Есть расширение для Visual Studio Tools For Microsoft Office System, которое содержит макеты проектов и шаблоны для создания надстроек. Хотя программировать в нём несколько сложнее (хотя кому как покажется)

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 19:29 20-05-2007
    DavenL0StuS

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

    Цитата:
    Dim pStyle As Style  
    For Each pStyle In ActiveDocument.Styles  
       Debug.Print pStyle.NameLocal  
    Next pStyle

     
    Так все стили отобразит, а не те котоые в документе юзаются.
    У мя вывело 156 стилей, а в документе юзается только 2.
     
    Я вот щас бьюсь - как отобразить все используемые в документе шрифты?
    Проходить по всей коллекции Characters долго слишком.
    Хотел через стили, - так такой вопрос возник как взять только те шрифты которые отображаются в панельке "Styles and Formatting" при выбранном фильтре "Formatting in Use"?
    Ели смотреть свойство InUse коллекции Styles то там у половины тру стоит..
    И ещё в коллекции Styles нет стилей, которые базируются на каком-то уже существующем, например таких "Normal + Font:....."

    Всего записей: 9 | Зарегистр. 20-07-2006 | Отправлено: 12:48 29-05-2007
    popkov

    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    А существует ли возможность на время выполнения макроса заблокировать возможность изменения параметров Word? А то после работы моейго макроса оказывается проставлена галочка "отображать скрытый текст", которую приходится убирать вручную... Я в макросе настроек Word вообще не касаюсь - он автоматически эту галку проставляет при операциях над текстом, который скрытый.

    Всего записей: 1833 | Зарегистр. 22-03-2003 | Отправлено: 16:38 29-05-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    popkov
    По окончанию выполнения макроса принудительно делай
    ActiveWindow.View.ShowHiddenText = False

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 16:51 29-05-2007 | Исправлено: AndVGri, 16:52 29-05-2007
    popkov

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

    Всего записей: 1833 | Зарегистр. 22-03-2003 | Отправлено: 22:51 29-05-2007
    Vo1



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть такой макрос для замены одного слова на другое во всем документе:
     
    Private Sub CommandButton1_Click()
     
        Selection.Find.ClearFormatting
        Selection.Find.Replacement.ClearFormatting
        With Selection.Find
            .Text = UserForm1.TextBox1
            .Replacement.Text = UserForm1.TextBox2
            .Forward = True
            .Wrap = wdFindContinue
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With
        Selection.Find.Execute Replace:=wdReplaceAll
     
    End Sub
     
     
    Почему он не заменяет текст в объекте "надпись"?

    Всего записей: 206 | Зарегистр. 05-08-2003 | Отправлено: 16:08 31-05-2007
    popkov

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

    Цитата:
    Почему он не заменяет текст в объекте "надпись"?  

    Потому что это не текстовый объект. Вот если ты выделишь текст в надписи - тогда должен работать, как я понимаю.

    Всего записей: 1833 | Зарегистр. 22-03-2003 | Отправлено: 20:20 31-05-2007
    TVeresk

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день! Помогите, пожалуйста, написать код, описывающий следующее действие: есть 2 textbox, как сделать, чтобы при наборе текста в первом textbox, он автоматически проявлялся во втором?  
    Буду очень признательна за помощь!

    Всего записей: 9 | Зарегистр. 04-06-2007 | Отправлено: 09:58 04-06-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    TVeresk
    Например, воспользоваться обработчиком события Change для TextBox1

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 11:03 04-06-2007
    TVeresk

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AndVGri
    А можно подробней? - я плохо разбираюсь в VBA

    Всего записей: 9 | Зарегистр. 04-06-2007 | Отправлено: 13:18 04-06-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    TVeresk
    То есть затруднение вызывает выделение Textbox на форме и нажатие F1, чтобы просмотреть свойства, методы и события?

    Код:
     
    Private Sub TextBox1_Change()
        TextBox2.Text = TextBox1.Text
    End Sub
     

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 17:15 04-06-2007
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 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