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

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

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

    Цитата:
    Выложи простой файл с кодом - doc

    Doc1.doc

    Всего записей: 657 | Зарегистр. 27-01-2008 | Отправлено: 08:13 16-08-2012
    grbdv

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вот я писал:

    Цитата:
    Давай идти последовательно ... Выложи простой файл с кодом - doc, а не dot.  
    Надо добиться, чтобы хоть локальный, в отдельно взятом документе вариант заработал, а потом уже проецировать его на шаблон...

     
    Попробую объяснить по-другому:
    Сейчас у тебя и код, и элемент автотекста хранится в шаблонах Normal и Doc1.dot (первый твой пример). Поэтому, во втором твоем примере ничего запрошенного мной нет, кроме таблицы, нарисованной автотекстом. Этот док имеет лишь ссылки на Normal и Doc1.dot (есно - твои).  
     
    Сделай так
    - Создай новый документ  
    - Вставь в него ComboBox1
    - Вставь в него ComboBox2
    - В его проект вставь код из Doc1.dot  

    Код:
     
    Private Sub Document_Open()
        ComboBox1.AddItem "информатика"
        ComboBox1.AddItem "автомобили"
    End Sub
     
    Private Sub ComboBox1_Change()
        Select Case ComboBox1
               Case "информатика"
                    ComboBox2.AddItem "07"
                    ComboBox2.AddItem "08"
               Case "автомобили"
                    ComboBox2.AddItem "06"
        End Select
    End Sub
     

    - Сохранись (обзови уж как-нибудь пооригинальнее).
    - Выложи полученный файл
    - Отпишись здесь, как это должно работать по твоему мнению, а что не получается.
     
    Забудь пока (временно) про автотекст и таблицу. Дойдем и до них.
     
    Бзв, имей ввиду, что в данном коде комбо2 будет бесконечно пополняться при каждом изменении комбо1.

    Всего записей: 1163 | Зарегистр. 20-08-2011 | Отправлено: 14:58 16-08-2012
    Alexey87

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

    Цитата:
    - Выложи полученный файл

    ComboBox.doc
     
    так-то все работает, но функционал не срабатывает при вставке автотекста (таблица с двумя комбобоксами)

    Всего записей: 657 | Зарегистр. 27-01-2008 | Отправлено: 18:14 16-08-2012
    grbdv

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Alexey87
    Т.е. ты пытаешься таблицу с наброшенными комбобоксами сохранить как автотекст...Но код-то не сохранится... Автотекст созраняется в шаблоне Normal. Когда ты этот автотекст вставляешь в очередной документ, коду-то взяться неоткуда.
     
    Щаз не могу проэкспериментировать (чуть позже), чисто умозрительно:
     
    В VBA (Alt+F11) находишь проект Normal, вставляешь в него модуль, в него загоняешь свой код. Процедуры Sub переделываешь в Public Sub.  Компилируешь. Сохраняешь. Должно заработать. Рекомендую назвать комбики по-оригинальней, а не по умолчанию во избежание конфликтов в будущем.
     
    Проверь, чтобы код этот остался только в Normal - больше нигде.
     
     
    Добавлено:
    Alexey87
    Отставить. Не получится. Чуть позже.
     
    Добавлено:
    Alexey87
    Ты пока расскажи, чего хочешь добиться, А именно - почему именно автотекст? Почему не шаблон с заготовленной таблицей с комбиками?
     
    И даже через шаблон все равно не будет работать - созданный на его основе документ необходимо будет сохранить и переоткрыть, чтобы заработал код заполнения первого комбика.

    Всего записей: 1163 | Зарегистр. 20-08-2011 | Отправлено: 18:32 16-08-2012 | Исправлено: grbdv, 18:46 16-08-2012
    Alexey87

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

    Всего записей: 657 | Зарегистр. 27-01-2008 | Отправлено: 19:15 16-08-2012 | Исправлено: Alexey87, 19:50 16-08-2012
    grbdv

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Alexey87
    Цитата:
    grbdv, так и не работает ... тогда будет время - посмотрите, пожалуйста :-)

    Я же отбил выше...  
    Ты не ответил на мои вопросы.  

    Цитата:
    Ты пока расскажи, чего хочешь добиться, А именно - почему именно автотекст? Почему не шаблон с заготовленной таблицей с комбиками?  

    Времени было достаточно.
     
    Автотекст не канает. Я сделал мимо автотекста. На базе шаблона создаешь документ, сохраняешь, открываешь - все начинает работать. Но - это мурня полнейшая. По-любому надо концепцию менять.  

    Всего записей: 1163 | Зарегистр. 20-08-2011 | Отправлено: 23:20 16-08-2012
    oshizelly



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    grbdv 12:34 04-08-2012
    Цитата:
    Вот, окончательный код самостоятельного модуля по-уму. С предыдущим несовместим, заменить полностью. Подробнее... [?]

    Спасибо, всё работает!
    Как, впрочем, и предыдущий "упрощённый" вариант этого макроса.

    Всего записей: 6524 | Зарегистр. 18-09-2004 | Отправлено: 01:36 19-08-2012
    grbdv

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    oshizelly
    Вот и слава Богу! А то я ужЕ переживать начал :)

    Всего записей: 1163 | Зарегистр. 20-08-2011 | Отправлено: 01:39 19-08-2012
    AKBA

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте!  
       
     Мне требуется решить вот такую проблему:    
     Имеется документ MS Word, который состоит из двух страниц. На первой странице документа в четырех местах имеется шифр вида "x" и этот шифр необходимо менять в арифметической последовательности "x+1", а остальной текст оставлять без изменений и при этом распечатывать каждый раз при изменении значения в автоматическом режиме, используя двустороннюю печать.    
       
     Используя возможности VB я добился следующего:  
     1 - при открытии документа у меня появляется форма, в которую я ввожу начальное значение шифра вида "x", потом ввожу общее число необходимых мне подстановок "y" (то есть например, при вводе числа y=50, будет выведено на печать 50 документов, с изменёнными значениями начиная с "x" и заканчивая "x+49" - это пока не реализовано)  
     2 - кнопка "подстановка" меняет шифр вида "x" на введённое значение в создаваемом документе в необходимых мне четырёх местах (это я сделал при помощи закладок)  
     3 - кнопка "отмена" закрывает форму, потом документ и затем закрывает Word  
       
     Мне осталось сделать самое главное - кнопка "подстановка" должна называться "печать"и при этом документ автоматически должен распечатываться на одном листе с двух сторон в необходимом количестве экземпляров, учитывая значения "x" и "y"  
       
     Помогите пожалуйста.

    Всего записей: 68 | Зарегистр. 30-09-2007 | Отправлено: 12:15 09-09-2012
    ol7ca

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте!  
    Подскажите кто может)
    Надо выделенный текст в ворде скопировать вниз документа и там создать из этого текста список. Как найтивыделенный текст и сделать копи - я разобрался а как вставить это вниз и сделать список - тут затык.
     
    Спасибо.

    Всего записей: 125 | Зарегистр. 01-02-2007 | Отправлено: 05:58 25-09-2012
    zippun

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ol7ca
    В чем проблема? Непонятно.
    Запиши все действия в макрос и редактируй его. Что не получается-то?

    Всего записей: 41 | Зарегистр. 20-09-2012 | Отправлено: 09:37 25-09-2012
    ol7ca

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    zippun
    Спасибо, но ваш совет не работает. Попробуйте это сделать и сами убедитесь.

    Всего записей: 125 | Зарегистр. 01-02-2007 | Отправлено: 05:35 27-09-2012
    zippun

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ol7ca
    Я попросил объяснить суть проблемы.
    Макрос не пишется? Редактор кода не вызывается, код непонятен или работает не так, как задумано?
    Где не работает мой совет?
     
    Добавлено:
    Оторвал задницу от стула, проверил. Заняло 10 минут. УМВР

    Код:
    Sub sb_ol7ca
        With Selection
            .Range.ListFormat.ApplyListTemplate _
                ListTemplate:=ListGalleries(wdBulletGallery).ListTemplates(1), _
                ContinuePreviousList:=False, _
                ApplyTo:=wdListApplyToWholeList, _
                DefaultListBehavior:=wdWord10ListBehavior
            .Cut
            .EndKey (wdStory)
            .PasteAndFormat (wdPasteDefault)
        End With
    End Sub

    Всего записей: 41 | Зарегистр. 20-09-2012 | Отправлено: 08:12 27-09-2012 | Исправлено: zippun, 08:29 27-09-2012
    Gena1971



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    zippun
    Что то мне подсказывает, что под словом "выделенный" ol7ca подразумевал текст жирный или другим цветом. Наверное из-за этого
    Цитата:
    Как найтивыделенный текст

    Просто в VBA искать выделенное как то глупо звучит

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

    Всего записей: 2567 | Зарегистр. 25-01-2005 | Отправлено: 12:50 27-09-2012
    zippun

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Gena1971
    Вообще-то, под "жирный или другим цветом" понимается отформатированный
    Почему глупо? Можно и форматированное хоть жирным, хоть курсивом искать хоть в VBA, хоть в интерфейсе. Но эта задача у него решена - "найтивыделенный текст и сделать копи - я разобрался ". Осталось найденное ВЫДЕЛИТЬ и запустить мой код.
     
     

    Всего записей: 41 | Зарегистр. 20-09-2012 | Отправлено: 13:24 27-09-2012
    Gena1971



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    zippun
    Я имел ввиду правильное понимание "выделенный". Его искать не надо. Это Selection. И оно просто копируется.
    А  форматированный - это да. Его надо найти прежде чем что то с ним делать. Тут цикл нужен по всем "выделенным/форматированным". Мне так показалось, что с этим проблема.
    Вообще если б посмотреть что уже сделано, то и легко сказать чего надо доделать или исправить.

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

    Всего записей: 2567 | Зарегистр. 25-01-2005 | Отправлено: 14:29 27-09-2012
    ol7ca

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    zippun
     
    да, я имел ввиду текст форматирован как bold.
     
    Спасибо за скрипт - такой не получится если просто записать макро.
     
    Можно ли чуть исправить?
    - не вырезать а копировать.  
    - и еще одно - в конце добавить слово список и после него уже вставить сам список.
     
    Спасибо!
     
    full version:
    Sub SubtractBoldTxt()
     
    Dim s As Range
    Dim doc As Document
     
    Set doc = Word.Documents("Doc2.docm")
     
    For Each s In doc.Sentences
        If s.Words(1).Bold = True Then
        x = s.Words(1).Bold
        s.Font.ColorIndex = wdRed
        s.Select
            With Selection
            .Range.ListFormat.ApplyListTemplate _
                ListTemplate:=ListGalleries(wdBulletGallery).ListTemplates(1), _
                ContinuePreviousList:=False, _
                ApplyTo:=wdListApplyToWholeList, _
                DefaultListBehavior:=wdWord10ListBehavior
            .Cut
            .EndKey (wdStory)
            .PasteAndFormat (wdPasteDefault)
        End With
     
        End If
    Next
    End Sub

    Всего записей: 125 | Зарегистр. 01-02-2007 | Отправлено: 18:49 27-09-2012 | Исправлено: ol7ca, 19:00 27-09-2012
    zippun

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ol7ca
    Цитата:
    Спасибо за скрипт - такой не получится если просто записать макро.  

    Не за что. Я ведь писал:
    Цитата:
    Запиши все действия в макрос и редактируй его

     

    Цитата:
    - не вырезать а копировать.  
    Замени .Cut на .Copy

    Цитата:
    в конце добавить слово список и после него уже вставить сам список

    Вот модифициорванный код:

    Код:
    Sub sb_ol7ca()
        With Selection
            .Range.ListFormat.ApplyListTemplate _
                ListTemplate:=ListGalleries(wdBulletGallery).ListTemplates(1), _
                ContinuePreviousList:=False, _
                ApplyTo:=wdListApplyToWholeList, _
                DefaultListBehavior:=wdWord10ListBehavior
            .Copy
            .EndKey (wdStory)
            .Text = "Список:" & vbCr
            .EndKey (wdStory)
            .PasteAndFormat (wdPasteDefault)
        End With
    End Sub

    Всего записей: 41 | Зарегистр. 20-09-2012 | Отправлено: 19:47 27-09-2012
    ol7ca

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

    Цитата:
    Замени .Cut на .Copy

     
    я пробовал до того но работает не корректно.

    Всего записей: 125 | Зарегистр. 01-02-2007 | Отправлено: 21:49 27-09-2012
    zippun

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ol7ca
    Добавь переменные:  
    Dim sHeader$
    Dim iLen%
     
    Инициализируй их (сразу после 'Set doc = ...'):  
    sHdr = "Список:"
    iLen = Len(sHdr)
     
    Сразу же после 'For...' добавь строку:  
    If Left(s.Text, iLen = sHdr Then Exit For
     
    И, на будущее, если хочешь, чтобы с твоим документом квалифицированно разбирались - выкладывай на ргхост документ с тренировочными данными и кодом. В лом как-то набивать абракадабру и форматировать ее под твои условия

    Всего записей: 41 | Зарегистр. 20-09-2012 | Отправлено: 23:10 27-09-2012
    Открыть новую тему     Написать ответ в эту тему

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