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

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

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

    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AndVGri
    Спасибо!
     
    Ещё вопрос: как присвоить заначение wdUndefined элементу стиля, если этот параметр уже имеет значение.
    Код
        With ActiveDocument.Styles("Знак концевой сноски").Font
            .Superscript = wdUndefined
            .Superscript = wdUndefined
        End With
    Почему-то не изменяет ничего (так и остаётся Superscript, идущий по умолчанию).
     
    И можно ли как-то сбросить разницу между стилями? Например, приравнять "Знак концевой сноски" основному шрифту абзаца?

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

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

    Цитата:
    Почему-то не изменяет ничего

    Undefined по словарю - неопределённый. Установите в False, чтоб изменения были видны.
    Учитывая последующий вопрос, это и не к чему

    Цитата:
    приравнять "Знак концевой сноски" основному шрифту абзаца

    ActiveDocument.Styles("Знак концевой сноски").Font = ActiveDocument.Styles("Обычный").Font

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

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

    Цитата:
    ActiveDocument.Styles("Знак концевой сноски").Font = ActiveDocument.Styles("Обычный").Font

    Дело в том, что после этого в свойствах стиля всё равно написано:

    Цитата:
    Основной шрифт абзаца + не надстрочнуе/подстрочные

    То есть определённая разница сохранилась.
    Хотя это не так важно в конкретном случае, но для общности хотелось бы понять, как можно вообще сбросить эту разницу, чтобы было просто:
    Основной шрифт абзаца +
    Такой стиль можно создать искусственно, но вот способа избавиться от дополнительных параметров форматирования я не нашел...
     
    Да, ещё один вопрос: как выяснить, какой стиль автоматически применяется к знакам и текстам сносок по умолчанию и поставить другой?

    Всего записей: 1834 | Зарегистр. 22-03-2003 | Отправлено: 05:17 10-05-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    popkov
    "Знак концевой сноски" и "Текст концевой сноски"
    "Знак сноски" и "Текст сноски"

    Цитата:
    но вот способа избавиться от дополнительных параметров форматирования я не нашел...  

    А это так принципиально важно? Нарушается структура документа?

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

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

    Цитата:
    "Знак концевой сноски" и "Текст концевой сноски"  
    "Знак сноски" и "Текст сноски"  

    Я знаю, но в английской винде они будут называться иначе...

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

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

    Цитата:
    Я знаю, но в английской винде они будут называться иначе...
     

    Увы, Word позволяет (покрайней мере в Office 2003) узнать только национальное название стиля
    ActiveDocument.Styles(10).NameLocal
    Просто свойства Name - нет. Так что, ищи название выделив и посмотрев, что пишет вкладка Стили и форматирование (или Styles and Formats, если правильно перевёл на English)

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

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

    Цитата:
    ActiveDocument.Styles(10).NameLocal  

    Выяснил последовательным перебором, что "Знак сноски" - это стиль номер 26.
    Теперь самый главный вопрос: этот номер не зависит от локализации и постоянен или меняется?
    Попробовал удалить этот стиль из Normal - удалился, но запрос
    MsgBox (ActiveDocument.Styles(26).NameLocal)
    по-прежнему возвращает "Знак сноски"
    Кроме того,  
    Selection.Range.Style = "Знак сноски"
    действительно применило этот стиль к заданному выделению - он после этого появился в списке стилей, причём такой же, как и был изначально.
    Аналогичного эффекта добился
    Selection.Range.Style = ActiveDocument.Styles(26)
     
    Интересно, список стиелй по номерам где-нибудь документирован?
     
    Добавлено:
    Похоже, что номер может меняться, но можно также обращаться к стилю по его зарезервированному имени:

    Цитата:
    Use Styles(index), where index is the style name, a WdBuiltinStyle constant or index number, to return a single Style object. You must exactly match the spelling and spacing of the style name, but not necessarily its capitalization.  


    Цитата:
    You can specify built-in styles across all languages by using the WdBuiltinStyle constants or within a language by using the style name for the language version of Word.  

    Только, насколько я понимаю, можно лишь догадываться о том, какому стилю соответствует WdBuiltinStyle по названию константы... Документации на эти параметры нигде нет?
     
    Добавлено:
    Хм. Надо же, нашёл:
    http://msdn2.microsoft.com/en-us/library/microsoft.office.interop.word.wdbuiltinstyle(VS.80).aspx  


    Всего записей: 1834 | Зарегистр. 22-03-2003 | Отправлено: 15:52 10-05-2007
    popkov

    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AndVGri
    А как вызвать диалог SaveAs, предлагающий пользователю сохранить файл под другим именем?

    Всего записей: 1834 | Зарегистр. 22-03-2003 | Отправлено: 21:27 12-05-2007
    AndVGri

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

    Код:
     
        Dim pSaveDialog As Office.FileDialog
         
        Set pSaveDialog = Application.FileDialog(msoFileDialogSaveAs)
        pSaveDialog.Title = "Сохранение документа"
        pSaveDialog.AllowMultiSelect = False
         
        If pSaveDialog.Show Then
            ActiveDocument.SaveAs pSaveDialog.SelectedItems(1&)
        End If
     

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

    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AndVGri
    Спасибо!
    А можно ещё перехватывать нажатие на отмену в этом диалоге и чтобы в нём сразу была открыта та папка, в которой находится текущий документ (если существует). Неплохо ещё подставить имя файла по умолчанию.

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

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

    Код:
     
        '...
        pSaveDialog.InitialFileName = ActiveDocument.FullName
     
        If pSaveDialog.Show Then
            ActiveDocument.SaveAs pSaveDialog.SelectedItems(1&)
        Else
            'код при нажатии отмена
        End If
     

    Уже лениво нажимать F1 в VBE?

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

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

    Цитата:
    Уже лениво нажимать F1 в VBE?

    Смотрел по Shift+F2 списки свойств, но не догалался, что pSaveDialog.Show - это результат выбора пользователя.  
    А pSaveDialog.InitialFileName через несколько минут сам нашёл, но не пришло в голову, что если там поставить в начале ActiveDocument.Path + "\" + "Название", то автоматически будет открыта указанная папка...
    Спасибо!
     
    Добавлено:
    AndVGri
    Вот теперь ещё хочу выводить на экран окно запроса с возможностью выбора нескольких опций (галочками, рядом с которыми описания опций). Соответствующего VbMsgBoxStyle не нашёл. Видимо, делается существенно сложнее?

    Всего записей: 1834 | Зарегистр. 22-03-2003 | Отправлено: 15:08 13-05-2007
    AndVGri

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

    Цитата:
    ActiveDocument.Path + "\" + "Название"

    Не забудь только, что для нового документа Path = "", а если документ в корне диска, то, в твоём случае, будет InitialFileName = "d:\\Название"
     
    Добавлено:
    popkov
    Делаешь форму с "галочками" и описаниями.

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

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

    Цитата:
    Не забудь только, что для нового документа Path = "", а если документ в корне диска, то, в твоём случае, будет InitialFileName = "d:\\Название"  

    Проверил оба варианта - работает!

    Цитата:
    Делаешь форму с "галочками" и описаниями.

    Мне нужно, чтобы она в окне запроса только появлялась, в документе её быть не должно.

    Всего записей: 1834 | Зарегистр. 22-03-2003 | Отправлено: 15:42 13-05-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    И зачем так изгаляться? Можешь попробовать, как вариант.
    Подробнее...

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

    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Ой, похоже, я неправильно выразился. Я просто не знал, что в VBE можно рисовать формы запросто, поэтому подумал, что ты имел в виду добавить форму в сам текст документа.
    Теперь нужную форму я нарисовал в VBE. Пытаюсь разобраться, как её вызвать и получить ответы пользователя: в форме 5 галочек и две кнопки: Выполнить и Отмена.  
    Ещ интересно, что происхдит при нажатии на крестик (закрытие окна формы).

    Всего записей: 1834 | Зарегистр. 22-03-2003 | Отправлено: 19:04 13-05-2007
    AndVGri

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

    Цитата:
    Пытаюсь разобраться, как её вызвать

    Пишешь
    Public Sub MyFormShow()
       UserForm1.Show
    End Sub
    Цепляешь процедуру на кнопку макроса в пользовательской панели Word.

    Цитата:
    Ещ интересно, что происхдит при нажатии на крестик

    Вызываются обработчики события - закрытие формы
    UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    UserForm_Terminate()

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

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

    Цитата:
    Вызываются обработчики события - закрытие формы  
    UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)  
    UserForm_Terminate()

    А как перехватить нажатие на крестик (оно должно быть эквивалентом нажатия кнопки Cancel)?
     
    Сейчас разбираюсь, как вообще заставить форму работать: получить значения 7 флажков, при нажатии на кнопки Выполнить (RunMacro) и Отмена (Cansel) форма должна закрываться, а выбор перехватываться.

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

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

    Цитата:
    А как перехватить нажатие на крестик  

    В этих обработчиках (обычные процедуры, только Private) в коде формы и перехватываешь, если установишь в 1 Cancel в True, то форма не закроется.
    Для кнопки Cancel в обработчике щелчёк на кнопке  
    CancelButton_Click  
    вызываешь код закрытия формы
    Unload Me

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

    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AndVGri
    А целевой макрос (т.е. мою подпрограмму) нужно вызывать из соответствующего обработчика?
    Почему-то в нём не работает
    Private Sub RunMacro_Click()
        Call ConvertCitation
        Unload Me
    End Sub
     
    ConvertCitation - это мой модуль. Потом надо будет передавать ему результат выбора пользователя, видимо.
     
    Добавлено:
    Что-то вообще непонятно, как вызвать процедуру из
    Private Sub RunMacro_Click()  
    End Sub  
    Вызов процедуры игнорируется...

    Всего записей: 1834 | Зарегистр. 22-03-2003 | Отправлено: 20:52 13-05-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