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

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

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    да, файлы точно ворд.
    в таблицах стоит табуляция "по разделителю", что обеспечивает выравнивание положительных и отрицательных значений (они в скобках) с висячей последней скобкой.
    если открыть англ файл с русскими настройками - разделитель групп разрядов "," ворд примет за разделитель целой и дробной части, получится что-то вроде:
    12,345
    678
     
    а должно быть:
    12,345
        678

    Всего записей: 21 | Зарегистр. 23-05-2012 | Отправлено: 16:05 23-05-2012
    Gena1971



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    manhattan 22
    Никогда не пользовался этой фичей. Но не думаю, что из документа ворда можно управлять глобальными настройками винды, кучей параметров в реестре. Может проще создать еще одного пользователя с английскими настройками и быстро переключаться между ними. По моему проще, чем настройки каждый раз править.

    Всего записей: 2567 | Зарегистр. 25-01-2005 | Отправлено: 20:19 23-05-2012 | Исправлено: Gena1971, 20:21 23-05-2012
    msmih



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    народ, подскажите, есть макрос, написанный с использованием richtx32.ocx, попытка запустить на word 2010 x64 вылетила в трубу. куда сейчас смотреть? и что надо менять?

    Всего записей: 1192 | Зарегистр. 29-01-2006 | Отправлено: 17:26 28-05-2012
    reenoip



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Отправили к вам, но, судя по активности вашей темы, ответа на мой вопрос мне как минимум до конца этого лета можно не ждать
     
     
     
     
    p.s.
    Мне можно и без конвертации, самое главное - чтобы формат при сохранении автоматически выставлялся как "Документ Word 97-2003", а не "Веб-страница".
     
     
    p.p.s.
    Вопрос закрыт.

    Всего записей: 1768 | Зарегистр. 10-03-2006 | Отправлено: 15:20 09-07-2012 | Исправлено: reenoip, 16:23 09-07-2012
    YuryS2006



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго дня! Тема не активная, но вдруг кто откликнется...  
    Поставлена задача переделать некий бланк для клиентов из Excel в Word. Возникла необходимость запрограммировать поля (не в форме, а прямо в тексте!), в которые клиент может вписывать свои значения.
     
    Имеем  
    поле "Сумма, руб." - текстовое,  
    поле "НДС" - список со значениями "0%", "10%" и "18%"  
    и  
    поле "Сумма НДС, руб.", которое должно вычисляться, как Сумма*НДС/(100+НДС) и выводиться в третье поле цифра при выборе 10% и 18% или "не облагается", при выборе 0%.  
     
     
    В Excel'e это все легко и просто решалось, но как сделать в word'e? Буду очень признателен, если кто-нибудь напишет скриптик на VBA

    Всего записей: 135 | Зарегистр. 13-03-2006 | Отправлено: 14:42 24-07-2012
    YuryS2006



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

    Всего записей: 135 | Зарегистр. 13-03-2006 | Отправлено: 18:49 28-07-2012
    oshizelly



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    В Word есть некоторое количество штатных команд, изменяющих объект циклически на определённую величину. Например, пара штатных команд "Увеличить/уменьшить размер шрифта" (Grow font/Shrink font). То есть, нажали на кнопку или хоткей один раз - шрифт увеличился на 2 пункта, ещё раз нажали - ещё увеличился на 2 пункта...  
    А нельзя ли при помощи макроса написать аналогичный цикл для тех команд, для которых это штатно не предусмотрено? Например, увеличить/уменьшить сжатие/расширение шрифта (charackter spacing)? Пробовал создать макрос примитивной записью действий, но так цикла не получается: макрос просто запоминает конкретные выходные значения
    Спасибо!

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

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

    Цитата:
    макрос просто запоминает конкретные выходные значения

    Надо его модифицировать:
     
    Считать в переменную текущее значение параметра, увеличить/уменьшить значение переменной на шаг равный или больший минимального, присвоить параметру новое значение переменной. Это если по-уму :)  
     
    Или проще, в лоб: параметр = параметр + шаг

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



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

    Цитата:
    Считать в переменную текущее значение параметра, увеличить/уменьшить значение переменной на шаг равный или больший минимального, присвоить параметру новое значение переменной. Это если по-уму  
     
    Или проще, в лоб: параметр = параметр + шаг

     
    А нельзя ли привести пример с любым произвольным элементом, хоть с тем же character spacing - grow by 1pt. Или даже два примера: как по уму, и как наоборот (в лоб)  

    Всего записей: 6524 | Зарегистр. 18-09-2004 | Отправлено: 02:55 04-08-2012 | Исправлено: oshizelly, 02:58 04-08-2012
    grbdv

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    oshizelly
    Дык, конечно можно. Давай свой код, который:
    Цитата:
    Пробовал создать макрос примитивной записью действий, но так цикла не получается: макрос просто запоминает конкретные выходные значения  

    Вот на нем и покажу :)
     
     
    Добавлено:
    Ну-у, тебя не дождешься :) Вот, в лоб:

    Код:
     
    Sub sb_Spasing_UP
        Call sb_Spasing(1)
    End Sub
    Sub sb_Spasing_DN
        Call sb_Spasing(-1)
    End Sub
    Sub sb_Spasing(pUpDn%)
        With Selection.Font
            .Spacing = .Spacing + pUpDn * 0.1
        End With
    End Sub

     

     
     
     
    Добавлено:
    Вот тебе еще и третья кнопка - чтобы все взад вернуть. Шаг приращения регулирется перменной nStep. -1, 0 и 1 - не трогай. По уму - так их надо константами сделать... :

    Код:
     
    Sub sb_Spasing_UP()
        Call sb_Spasing(1)
    End Sub
    Sub sb_Spasing_DN()
        Call sb_Spasing(-1)
    End Sub
    Sub sb_Spasing_ZR()
        Call sb_Spasing(0)
    End Sub
    Sub sb_Spasing(pUpDn%)
    Dim nStep!
        nStep = 0.1
        With Selection.Font
            .Spacing = (.Spacing * pUpDn + nStep) * pUpDn
        End With
    End Sub
     

    Всего записей: 1163 | Зарегистр. 20-08-2011 | Отправлено: 03:11 04-08-2012 | Исправлено: grbdv, 03:56 04-08-2012
    oshizelly



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    grbdv 02:11 04-08-2012
    Цитата:
    Вот, в лоб:

    Спасибо! Но, не понял, прошу прощения, почему код зачеркнут? В том смысле, что лобовое решение некорректно?
     

    Цитата:
    Вот тебе еще и третья кнопка - чтобы все взад вернуть.

    Взад - это куда? Как было до первого применения макроса?
     

    Цитата:
    Считать в переменную текущее значение параметра, увеличить/уменьшить значение переменной на шаг равный или больший минимального, присвоить параметру новое значение переменной. Это если по-уму

    А как будет "по уму" для рассматриваемого примера?
     
    З.Ы.

    Цитата:
    Ну-у, тебя не дождешься Вот, в лоб:

    Так спать-то тоже изредка надо

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

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    oshizelly
    Зачеркнут, т.к. ниже - актуальная модифицированная версия. Ты хоть сообщение прочти внимательно, код сравни для интересу... Вот же пичалька :(
    Цитата:
    Добавлено:  
    Вот тебе еще и третья кнопка...  

     
    Взад - это к дефолтному значению 0 одним нажатием, а не цепочкой обратных действий. Ты ведь глазом можешь и не различить и умом не помнить - сколько раз и где ты нажал +/-.  
     
    По-уму - потом. Это некритично. С этим вначале разберись :)  
     
    Ты хоть запускал? Или обратно спать улегся? ;)
     
    Добавлено:
    Значит спать...
     
    Вот, окончательный код самостоятельного модуля по-уму. С предыдущим несовместим, заменить полностью. Подробнее...

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

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

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

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

    Цитата:
    Подскажите пожалуйста как должен выглядеть код макроса, который сможет реализовать выбор значений из полей со списком (элементы ActiveX), находящихся в таблице (таблицу задействовал как автотекст)  

    Перебрать все элементы комбобокса можно следующим кодом:

    Код:
     
    Private Sub sb_CBEnum()
    Dim i%, iLstCnt%
        With ComboBox1
            iLstCnt = .ListCount - 1
            For i = 0 To iLstCnt
                Debug.Print .List(i, 0)
            Next
        End With
    End Sub
     

    Преполагается, что в нем всего одна колонка и данные считываются из нее.

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

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

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

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Alexey87
    Что не получается? У меня все получается.  
     
    - Создай новый документ
    - Вставь в него комбобокс
    - В проект вставь следующий код:

    Код:
     
    Private Sub Document_Open()
        With ComboBox1
            .AddItem "информатика"
            .AddItem "автомобили"
        End With
        Call sb_CBEnum
    End Sub
    Private Sub sb_CBEnum()
    Dim i%, iLstCnt%
        With ComboBox1
            iLstCnt = .ListCount - 1
            For i = 0 To iLstCnt
                MsgBox .List(i, 0)
                Debug.Print .List(i, 0)
            Next
        End With
    End Sub
     

    - Сохранись
    - Закрой документ
    - Открой документ
    - Инджой :)
     
    Здесь я тебе продемонстрировал - как обращаться к комбобоксу, как - к отдельным его элементам и как перечислить их все.
     
    Про остальную лирику (автотекст и пр.) надо отдельно говорить.

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

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

    Цитата:
    Про остальную лирику (автотекст и пр.) надо отдельно говорить.

    автотекст собственно меня и интересует...
    когда вставляю автотект "табл" ничего не выбирается в комбобоксе

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

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Alexey87
    Давай идти последовательно.  
     
    1. Ты код из предыдущего поста запускал по инструкции? Работает он или нет? Ты понял, как в простейшем случае обращаться с комбобоксом? Доложись, плз.
     
    2. Пример, который ты выложил - шаблон. Там только код и никаких таблиц, ни автотекста, ни просто текста. Выложи простой файл с кодом - doc, а не dot.
     
    Надо добиться, чтобы хоть локальный, в отдельно взятом документе вариант заработал, а потом уже проецировать его на шаблон...

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

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

    Цитата:
    Доложись, плз.

    работает

    Цитата:
    2. Пример, который ты выложил - шаблон. Там только код и никаких таблиц, ни автотекста, ни просто текста.

    Чтобы вставить таблицу нужно выбрать меню Автотекст, а в нем элемент "табл"

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

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Alexey87
    - Выложи простой файл с кодом - doc, а не dot.  
    - Чтобы вставить таблицу нужно выбрать меню Автотекст, а в нем элемент "табл"

     
    Ну-ну... поумничать решил? Спасибо, что просветил :) А то я не увидел...
     
    Ты не понял разве, что мне нужно от тебя, чтобы продолжить консультацию? Щаз... все брошу и буду за тебя контролы на лист набрасывать и автотексты вставлять.

    Всего записей: 1163 | Зарегистр. 20-08-2011 | Отправлено: 00:43 16-08-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