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

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



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    pribush
    Попробуйте такой макрос:

    Код:
    Sub selectWords()
    '*********************
    'Выделяем в текущем параграфе:
    '  слова, содержащие нечетное количество букв, красным цветом
    '  слова, содержащие четное количество букв, синим цветом
    '@wordexpert.ru, 2009
    '*********************
    Dim oWrd As Range
    Dim parazit As String
    Dim i As Long
    parazit = ",.;:!?""'|/*+-=()[]{}_`~%^@" 'символы-паразиты
    For Each oWrd In ActiveDocument.Paragraphs(1).Range.Words
       If (InStr(parazit, oWrd.Characters(1)) = 0) And (oWrd <> Chr(13)) Then
          oWrd.Select
          'удаляем пробелы справа от диапазона, если они есть
          With Selection
             If Right(.Range, 1) = Chr(32) Then
                .MoveLeft unit:=wdCharacter, Count:=1, Extend:=wdExtend
                Set oWrd = .Range
             End If
          End With
          'определяем количество символов в словах и их четность или нечетность
          If Len(RTrim(oWrd)) Mod 2 = 0 Then
             oWrd.HighlightColorIndex = wdBlue
          Else
             oWrd.HighlightColorIndex = wdRed
          End If
       End If
    Next oWrd
    End Sub

    Всего записей: 39 | Зарегистр. 27-12-2005 | Отправлено: 16:57 15-12-2009
    pribush

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Baston спасибо огромное очень меня выручил спасибо=)

    Всего записей: 3 | Зарегистр. 14-12-2009 | Отправлено: 17:45 15-12-2009
    suomifinland



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребята, а можно ли сделать следующие при открытии документа Word *..doc и последующим его выделеним, автоматом бы изменялся шрифт на Times New Roman, и его размер становился 16...., а цвет шрифта становился black..?

    ----------
    Мы на горе всем буржуям, мировой пожар раздуем... А.Блок.

    Всего записей: 5257 | Зарегистр. 16-04-2006 | Отправлено: 18:38 15-12-2009
    baston



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    pribush
    Я поправил макрос, ибо он форматировал не текущий абзац, а первый, и во-вторых, он искал только первый символ из слов-паразитов. Вот код:

    Код:
    Sub selectWords()
    '*********************
    'Выделяем в текущем параграфе:
    '  слова, содержащие нечетное количество букв, красным цветом
    '  слова, содержащие четное количество букв, синим цветом
    '@wordexpert.ru, 2009
    '*********************
    Dim oWrd As Range
    Dim parazit As String
    Dim i As Long
    parazit = ",.;:!?""'|/*+-=()[]{}_`~%^@" 'символы-паразиты
    For Each oWrd In Selection.Paragraphs(1).Range.Words
       If (InStr(parazit, RTrim(oWrd)) = 0) And (oWrd <> Chr(13)) Then
          oWrd.Select
          'удаляем пробелы справа от диапазона, если они есть
          With Selection
             If Right(.Range, 1) = Chr(32) Then
                .MoveLeft unit:=wdCharacter, Count:=1, Extend:=wdExtend
                Set oWrd = .Range
             End If
          End With
          'определяем количество символов в словах и их четность или нечетность
          If Len(RTrim(oWrd)) Mod 2 = 0 Then
             oWrd.HighlightColorIndex = wdBlue
          Else
             oWrd.HighlightColorIndex = wdRed
          End If
       End If
    Next oWrd
    End Sub

     
    Добавлено:
    suomifinland
    Возможно. Для этого надо использовать автомакрос AutoOpen.
    Например, так:

    Код:
    Sub AutoOpen()
    With ActiveDocument.Range.Font
       .Name = "Times New Roman"
       .Size = 16
       .ColorIndex = wdBlack
    End With
    End Sub

    Всего записей: 39 | Зарегистр. 27-12-2005 | Отправлено: 11:09 16-12-2009
    suomifinland



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Спасибо Вам уважаемый Гуру baston
    , вот только куда и как это макрос скопировать, или положить... ? А можно у Вас попросить добавить к нему, команду удаления гиперссылок в документе, вообще, было бы здорово!!! Еще раз Огромное Благодарю за помощь.

    ----------
    Мы на горе всем буржуям, мировой пожар раздуем... А.Блок.

    Всего записей: 5257 | Зарегистр. 16-04-2006 | Отправлено: 18:23 16-12-2009
    SIgor33

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть таблица в документе.
    Нужно обединить N ячеек в M столбце.
    Как это сделать из VBA?

    Всего записей: 652 | Зарегистр. 03-03-2009 | Отправлено: 09:34 17-12-2009
    SERGE_BLIZNUK

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SIgor33 - сорри... я влез с ответом, не обратив внимание, что речь идёт о WORD..
     
    к сожалению, плохо знаю объектную модель Word'а :(
    само объединение делается так же, как и в Excel:  ....Cells.Merge
    но команде объединения требуется указать нужные ячейки...  

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 10:07 17-12-2009 | Исправлено: SERGE_BLIZNUK, 10:23 17-12-2009
    baston



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    suomifinland
    Откройте шаблон Normal.dot в режиме редактирования. Перейдите в редактор кода VBA (Alt+F11) и вставьте в модуль этого шаблона код макроса. Сохраните, выйдите и теперь при открытии ВСЕХ(!) документов у вас будут они форматироваться по вашим данным в макросе.
    Либо рекомендую изменить имя макроса и вынести кнопку макроса на панель инструментов, чтобы запускать этот макрос только тогда, когда вам нужно.
    Вот новая версия макроса с удалением гиперссылок:

    Код:
    Sub AutoOpen()
    Dim hl As Hyperlink
    With ActiveDocument
       .Range.Font.Name = "Times New Roman"
       .Range.Font.Size = 16
       .Range.Font.ColorIndex = wdBlack
       While .Hyperlinks.Count > 0
          .Hyperlinks(1).Delete
       Wend
    End With
    End Sub

     
     
    Добавлено:
    SIgor33
    Попробуйте такой пример. Нам нужно объединить ячейки В2 и С2. Тогда макрос будет:

    Код:
    Sub Макрос1()
    Dim oTable As Table
    Set oTable = Selection.Tables(1)
    With oTable
       .Cell(Row:=2, Column:=2).Merge MergeTo:=.Cell(Row:=2, Column:=3)
    End With
    End Sub

    Всего записей: 39 | Зарегистр. 27-12-2005 | Отправлено: 11:02 17-12-2009
    suomifinland



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вроде всё поняла, спасибо Вам за Ваш труд.., ВСЕ РАБОТАЕТ..., и последняя к Вам просьба, Уважаемый ГУРУ baston, а можно в Ваш макрос добавить пакетную обработку файлов, обрабатывать не по одному файлу, а, к примеру открываю папку Uroki, в ней 100 файлов, и макрос спустя некоторое время выдает обработанную, по заданному, алгоритму информацию... Если поможете то незнаю даже, как отблагодарить ВАС..!!!  

    Всего записей: 5257 | Зарегистр. 16-04-2006 | Отправлено: 12:51 17-12-2009
    baston



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    suomifinland
    Во-первых, я не гуру (скромно).
    Во-вторых, можете попробовать следующий макрос для ваших целей:  
    http://wordexpert.ru/2009/08/28/massovoe-formatirovanie-dokumentov/

    Всего записей: 39 | Зарегистр. 27-12-2005 | Отправлено: 13:04 17-12-2009
    suomifinland



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Я знаю о нем, но как туда вставить "уборку ссылок"...,  спасибо за столь быстрый ответ, да и по сравнению с Вашим кодом макроса, тот более объемный... Как же туда "всунуть" Ваш макрос..?

    ----------
    Мы на горе всем буржуям, мировой пожар раздуем... А.Блок.

    Всего записей: 5257 | Зарегистр. 16-04-2006 | Отправлено: 13:09 17-12-2009
    baston



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

    Всего записей: 39 | Зарегистр. 27-12-2005 | Отправлено: 13:47 17-12-2009 | Исправлено: baston, 11:45 05-01-2010
    Inexhody

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    У меня такой вопрос. Есть куча документов. Во всех нужно проделать ряд одинаковых операций. Записываю макрос. Открываю другой документ. запускаю, все работает. Вопрос:можно ли запустить макрос сразу ко всем оставшимся документам, а не каждый документ открывать и запускать макрос

    Всего записей: 102 | Зарегистр. 06-06-2008 | Отправлено: 21:16 03-01-2010
    baston



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

    Всего записей: 39 | Зарегистр. 27-12-2005 | Отправлено: 11:08 05-01-2010
    shengjeng



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    2 All
     
    Гиперссылки в выделенном тексте можно удалять с помощью комбинации Ctrl+6

    Всего записей: 215 | Зарегистр. 25-04-2009 | Отправлено: 23:29 15-01-2010
    Zhenek_Salnikov

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Кто знает как сделать в ворде VBA так чтобы таблица заполнялась по порядку, а то у меня она заполняется токо первая строчка?

    Всего записей: 1 | Зарегистр. 20-01-2010 | Отправлено: 19:40 20-01-2010
    Andrew20051



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Пишу макрос, объединяющий ячейки столбца таблицы с одинаковым значением.
    Пока остановился на поиске индексов начала-конца группы таких ячеек.

    Код:
        ' индексы начала-конца группы одинаковых ячеек
        Dim iStart As Integer
        iStart = 0
        Dim iFinish As Integer
        iFinish = 0    
        ' флаг объединения ячеек
        Dim bMerge As Boolean    
        bMerge = False
         
        Dim aCell As Word.Cell    
        Dim cCells As Cells
        ' извлекаем все ячейки столбца
        Set cCells = ActiveDocument.Tables.Item(1).Columns.Item(1).Cells
             
        For Each aCell In cCells
               On Error Resume Next            
               ' пропускам первую ячейку (начинаем работать со второй)
               If aCell.RowIndex > 1 Then
                    ' сравниваем значение с предыдущей
                    If aCell.Range.Text = cCells.Item(aCell.RowIndex - 1).Range.Text Then
                            ' при равенстве значений и если нет начала группы iStart = 0, то
                            ' начинаем ее
                            If iStart = 0 Then
                                    iStart = aCell.RowIndex - 1
                            End If
                    Else
                            ' если значения не равны, то проверяем нужно ли закончить группу
                            If iStart <> 0 Then
                                    iFinish = aCell.RowIndex - 1
                                    bMerge = True
                            End If
                    End If
                End If
                 
                ' если достигли конца, завершаем группу
                If iStart <> 0 And aCell.RowIndex = cCells.Count Then
                        iFinish = aCell.RowIndex
                        bMerge = True
                End If
                 
                If bMerge Then
                  ' объединяем (нужен код)                                    
                  bMerge = False
                  MsgBox iStart & " - " & iFinish
                  iStart = 0
                End If            
        Next aCell

    Код по определению границ групп ячеек вроде работает, но нужен собственно код объединения ячеек. Заранее спасибо.

    Всего записей: 90 | Зарегистр. 21-06-2005 | Отправлено: 15:48 26-01-2010 | Исправлено: Andrew20051, 15:50 26-01-2010
    GenyaMS



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго времени суток! Гуру и другие такой ВОПРОС!
    Задача - получить ЗНАЧЕНИЕ точного количества символов, которое поместится в ОДНУ строку на листе с текстом. На листе заданы все параметры:шрифт, его высота, размеры Полей, тип шрифта....  
     
    Мне код не обязателен, подскажите какая функция может это сделать или хотябы ход решения.
     
    PS:Это необходимо для следующего после копирования текста из док-та с колонками или другого форматирования, количество символов в строке часто не оптимально(значительно меньше) чем возможно. Вот и надо сделать так что бы после выполнения макросы - количество символов в строке стало оптимальным.

    Всего записей: 184 | Зарегистр. 24-01-2009 | Отправлено: 11:12 31-01-2010
    Panzer82

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

    Код:
     
      Set oWord = CreateObject("Word.Application")
      Set oDoc = oWord.Documents.Open(Filename:=sNameTargetFile + ".txt", Format:=wdOpenFormatAuto, Encoding:=866)
      With oWord.Selection
        .Find.Text = "   текст1 "  
        .Find.Execute
     

     
    из Экселя вызываю Ворд, на .Find.Execute оба вылетают.

    Всего записей: 2 | Зарегистр. 08-02-2010 | Отправлено: 13:00 08-02-2010
    psxi

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребята нужна помошь.  
    Есть документ с гиперссылками в большом количестве. Нужно что б они ссылались на WAV файлы. WAV в одтельных папках типа папка "глава один" - в ней 200 файлов WAV называются они так 001001 , 001002, 001286...114001...114005(первые три цифры номер главы и папки следующие три номер ссылки)  , соответсвенно в документе глава один и 200 ссылок. Таких глав порядка 114. гиперссылок около 6000!  
    Есть ли более простой способ редактировать гиперссылки  разом или хотя бы упростить? А то придётся  несколько месяцев возиться по одной.

    Всего записей: 18 | Зарегистр. 05-11-2008 | Отправлено: 15:36 24-02-2010
    Открыть новую тему     Написать ответ в эту тему

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