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

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



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Панель добавил. На ней выбираю элемент управления "Рисунок". Добавляю на страницу. Кнопочка "Свойства" становится активной. Но щелкая по ней получаем:
    Название
    Тег
    и пару галок блокировки
     
    Все. Ни разу о назначении макроса...

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



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Lovec Попробуй добавь как ActiveX объект а не первые попавшиеся опции с панели инструментов.

    Всего записей: 747 | Зарегистр. 10-11-2005 | Отправлено: 15:43 28-10-2013
    Lovec



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    vikkiv
    А можно "на пальцах" что за ActiveX объект?.. Куда нажать, чего вставить?...
     
    Конкретно интересует вопрос - можно ли в Word вставить небольшую картинку при клике на которую открывалась бы большая ее копия? (типа на форме выводилась как в Excel или еще как...)

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



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    В последних версиях MS Word их гении умудрились изуродовать функцию сравнению документов, которая в 2003-м ворде была более или менее удобной. А мне по работе приходится сравнивать по много разных документов в час, поэтому лишние движения ну очень сильно утомляют
     
    Нельзя ли как-нибудь решить проблему при помощи VBA? В идеале хотелось бы слепить макрос, который сравнивал бы документ, открытый в текущем окне, с документом, имя и путь которого находятся в буфере обмена. Ну или пусть хотя бы выдаёт запрос на ввод имени, а нажать Ctrl+V можно и ручками.
     
    Заранее спасибо!

    Всего записей: 6524 | Зарегистр. 18-09-2004 | Отправлено: 20:57 29-10-2013
    AndVGri

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

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 04:56 30-10-2013
    Lovec



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AndVGri
    Я не упомянул, но мне надо чтобы все было внутри одного файла Word и большие картинки тоже.
    При этом они должны храниться где то не в тексте документа, чтоб не мешать чтению.
    Так что можно бы и гиперссылкой, только вот куда ее послать...

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 09:03 30-10-2013
    AndVGri

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

    Цитата:
    А можно "на пальцах" что за ActiveX объект?.. Куда нажать, чего вставить?...

    вряд ли это для вас доступно.

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 09:54 30-10-2013
    Lovec



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AndVGri
    Понимаете, на Excel я это делал уже и написать более-менее сложный макрос для меня не проблема.
    Меня смутила фраза "добавь как ActiveX объект". Вот как это сделать в ворде я не понимаю...

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 10:38 30-10-2013
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добро.
    1. Для 2003, панель Visual Basic, кнопка элементы управления, а в ней кнопка рисунок.
    2. В него через свойства Picture грузим эскиз и прописываем в свойства Tag некоторый уникальный ключ для этого эскиза. И так "вручную" для всех эскизов (можно и программно, но тогда храниться в файле не будет, увы).
    3. В редакторе VBA создаём форму добавляем ImageList (возможно потребуется сходить во вспомогательное меню Toolbox и добавить через Additional control) и через свойства Custom в диалоге добавляем уже изображения и прописываем для них соответствующий ключ Key для эскиза, тоже только вручную, так как программно сохранить изображения в файле не возможно (по крайней мере не нашёл как).
    4. Добавляем на форму объект Image и прописываем код, который по ключу получает от ImageList изображение и устанавливает это изображение для Image и затем показывает форму (нужно будет прописать изменение размеров формы и Image под размер рисунка)
    5. по 2. документ содержит объекты ActiveX. Нужно будет либо в модуле документа для каждого прописать обработчик события щелчка, либо связать есть варианты по проще через коллекцию объектов класса-обработчика, которая заполняется, например, при открытии документа.
     
    Для 2010 1 и 2 можно реализовать так
    Вкладка "Разработчик" (если не видна, то включить в настройках ленты), группа элементы управления, включаем режим конструктора и по раскрывающейся кнопке инструменты из предыдущих версий вставляем ActiveX изображение. Далее всё тоже.
     
    Можно как вариант поэкспериментировать с Элементом управления содержимым "Рисунок" (ContentControl) там же на вкладке разработчика, но, правда, не нашёл как прописать Tag к нему, программно, как мы помним, не сохраняется (хотя может и да, не экспериментировал). В модуле документа есть обработчик события Private Sub Document_ContentControlOnEnter(ByVal ContentControl As ContentControl)
    в котором нужно получить Tag и запустить метод отображения формы с выбором по Tag требуемого изображения.
    Пробуйте, успехов.

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 11:23 30-10-2013
    Lovec



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Спасибо за подробное пояснение.
    В принципе моя трудность заключалась в том, что я не заметил в 2010 ворде кнопки "Инструменты из предыдущих версий" на панели "Элементы управления" в меню "Разработчик"
    Щелкнув по ней я увидел знакомые элементы с возможностью привязать макрос. Дальше уже все знакомо.
     
    Написал простейший код под свою задачу. Может кому пригодиться:
    1) В документ Word вставляем элемент ActiveX "Изображение", настраиваем:
    - размер растягиваем до нужного небольшого
    - через свойство "Picture" этого изображения задаем БОЛЬШОЙ рисунок
    - свойство "PictureSizeMod" выставляем в значение 3, чтобы рисунок вписался в указанные рамки
    2) В редакторе скриптов добавляем UserForm1, на ней размещаем элемент Image1
    3) Щелкаем 2 раза по картинке в ворде, попадаем в обработчик ее события Image1_Click(), там пишем код:

    Код:
     
    Private Sub Image1_Click()
        UserForm1.Image1.Picture = Image1.Picture
        UserForm1.Height = UserForm1.Image1.Height
        UserForm1.Width = UserForm1.Image1.Width
        UserForm1.Show
    End Sub
     

    Этот код будет увеличивать картинку и показывать на отдельной форме.
    4) Щелкаем 2 раза по картинке на форме - попадаем в ее обработчик клика, пишем код:

    Код:
     
    Private Sub Image1_Click()
        UserForm1.Hide
    End Sub
     

    Этот код будет прятать форму по клику на картинке.
     
    В ворде выходим из режима конструктора и проверяем работу скрипта.

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 12:59 30-10-2013
    Pr0g



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день.
    Word 2010. Есть документ, в нем есть таблица 3х11. Нужно при печати документа проверить содержимое последнего столбца, и при наличии незаполненных ячеек предупредить и запретить печать. Сохранять документ можно.
     
    upd: Почти все реализовал, остался вопрос с печатью -- можно ли ее вообще запретить из данного документа через стандартные меню Печать и Ctrl+P?

    Всего записей: 11 | Зарегистр. 25-12-2006 | Отправлено: 12:37 28-11-2013 | Исправлено: Pr0g, 17:47 28-11-2013
    AndVGri

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

    Код:
     
    Private WithEvents myApp As Word.Application
     
    Private Sub Document_Open()
        Set myApp = Application
    End Sub
     
    Private Sub myApp_DocumentBeforePrint(ByVal Doc As Document, Cancel As Boolean)
        If Me.Name = Doc.Name Then
            'проверяем таблицу на заполнение последнего столбца.
            'если не заполнено всё, то Cancel = True и выход
        End If
    End Sub
     

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 02:41 29-11-2013
    Marina66

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    1.    Напишите программу, запрашивающую у пользователя три разных положительных числа и находящую квадрат минимального.
    2.    Дана последовательность символов латинского алфавита, заканчивающаяся точкой. Известно, что среди этих символов есть хотя бы одна запятая. Указать номер запятой, за которой следует буква «а».
    помогите пожалуйста,задали,а я не понимаю как делать.читала пыталась и все равно не понимаю(

    Всего записей: 1 | Зарегистр. 05-12-2013 | Отправлено: 01:04 05-12-2013
    ilarvandar

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    подскажите как будет выглядеть макрос для MS Word. Есть столбец в таблице с набором слов в каждой ячейке. Нужно выбрать первое слово в каждой ячейке и перенести его в в новую ячейку (соседнюю).  
     
    Было
     
    Иван иванов                    
    Петя Сидоров    
    Олег Лукич

     
    Стало
     
    иванов Иван    
    Сидоров  Петя    
    Лукич Олег

     
     
     
     

    Всего записей: 3 | Зарегистр. 07-02-2012 | Отправлено: 00:18 23-12-2013 | Исправлено: ilarvandar, 18:23 24-12-2013
    Alexey87

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

    Всего записей: 657 | Зарегистр. 27-01-2008 | Отправлено: 23:00 08-01-2014
    ALeXkRU



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Alexey87
    макрос так записывает:

    Цитата:
    Sub HideColumn()
    '
    ' HideColumn макрос
    '
        Columns("H:H").Select
        Selection.EntireColumn.Hidden = True
    End Sub

    (скрытие столбца Н)

    Всего записей: 11793 | Зарегистр. 03-12-2003 | Отправлено: 00:02 09-01-2014
    Alexey87

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

    Код:
    Compile error:
    Sub or Function not defined

    Всего записей: 657 | Зарегистр. 27-01-2008 | Отправлено: 10:19 09-01-2014
    ALeXkRU



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Alexey87
    эээ.. а какая подпрограмма то отсутствует? где её текст?
    Если создаёшь в чистом виде по примеру (Создать макрос с именем HideColumn; в тело подпрограммы - между Sub и End Sub - скопировать/вставить две строки из примера (которые про выделить столбец H:Н; скрыть выделенное).. Запустить), то там ошибаться нечему    
    Разве что, обозначение столбцов иное..
    Если вставляешь эти пару строк в другую программу, так где исх.текст?
     
    ЗЫ: создать ещё проще можно: включить запись макроса; выделить столбец; правый клик/скрыть; остановить макрос и смотреть, что получилось..

    Всего записей: 11793 | Зарегистр. 03-12-2003 | Отправлено: 11:13 09-01-2014
    Alexey87

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

    Цитата:
    правый клик/скрыть

    не могу выполнить данное действие, не нахожу функцию "скрыть"
     
    word 2013

    Всего записей: 657 | Зарегистр. 27-01-2008 | Отправлено: 12:17 09-01-2014
    ALeXkRU



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Alexey87
     
    хмм.. в ворде..
    А зачем в ворде вообще скрывать столбцы таблиц? и что под этим понимается?
    Тогда такой макрос конечно не поможет..
     
    Варианты:  
    - скрыть текст (выделить текст, формат шрифта/скрытый) + убрать (не показывать) боковые границы ячеек + уменьшить ширину столбца;
    -  
     
    Добавлено
     
    пример, реализующий этот вариант (описание см. в макросе)

    Всего записей: 11793 | Зарегистр. 03-12-2003 | Отправлено: 14:06 09-01-2014 | Исправлено: ALeXkRU, 21:10 09-01-2014
    Открыть новую тему     Написать ответ в эту тему

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