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

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



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AndVGri
    Чёрт, а ведь и правда...
    У меня в C:\Program Files\Microsoft Office\Document Themes 12

    Всего записей: 283 | Зарегистр. 20-09-2006 | Отправлено: 10:59 19-10-2011
    SEdefor

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Хм, не там задал первый раз, повторюсь:
     
    День добрый.
     
    Так сложилось, что текст получен из html и все таблицы пришли с нулевым значением интервала между ячейками. На практике это приводит к появлению двойных границ каждой ячейки в таблице. Дабы этого избежать, параметр "Интервал между ячейками" можно отключить вручную. Однако... Таблиц то море.. А в макрос я могу записать только конкретное число большее либо равное нулю..  
    Есть ли возможность в VBA "снять галочку" с параметра spacing для каждой таблицы?
    Пример кода приложу, дабы не быть голословным:

    Код:
     
    Sub Tables()
    '
    '
    '
    Dim i As Integer
    Dim Acount As Integer
    Acount = ActiveDocument.Tables.count
    For i = 1 To Acount
    ActiveDocument.Tables(i).Spacing = 0 'приводит к появлению сдвоенных границ
    Next
    End Sub
     

     
     
    Попробовал на чистом документе -> Создал произвольную таблицу (по умолчанию параметр/галочка Интервалы между ячейками отключен) -> Запустил процесс создания макроса -> Сначала активировал интервалы, потом снял.
    Автоматический код привожу ниже:

    Код:
     
    Sub a_111()
    '
    '
    '
        With Selection.Tables(1)
            .TopPadding = CentimetersToPoints(0)
            .BottomPadding = CentimetersToPoints(0)
            .LeftPadding = CentimetersToPoints(0.19)
            .RightPadding = CentimetersToPoints(0.19)
            .Spacing = CentimetersToPoints(0.04)
            .AllowPageBreaks = True
            .AllowAutoFit = True
        End With
        With Selection.Tables(1)
            .TopPadding = CentimetersToPoints(0)
            .BottomPadding = CentimetersToPoints(0)
            .LeftPadding = CentimetersToPoints(0.19)
            .RightPadding = CentimetersToPoints(0.19)
            .Spacing = 0
            .AllowPageBreaks = True
            .AllowAutoFit = True
        End With
    End Sub
     

    Как видно, единственным отличаем является параметр "Spacing". Однако при выставлении его в 0 = параметр не деактивируется, а выставляется в нулевое значение ==> сдвоенные границы, что визуально сильно "карявит" документ..

    Всего записей: 6 | Зарегистр. 30-08-2010 | Отправлено: 11:57 26-10-2011
    AndVGri

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

    Код:
     
    Private Sub SetBorder(ByVal forBorder As Border)
        With forBorder
            .LineStyle = wdLineStyleSingle
            .LineWidth = wdLineWidth025pt
            .Color = wdColorAutomatic
        End With
    End Sub
     
    Public Sub Test()
        Dim pTStyle As Style, pTable As Table
        Set pTStyle = ActiveDocument.Styles.Add("New Table3", WdStyleType.wdStyleTypeTable)
        SetBorder pTStyle.Table.Borders(wdBorderBottom)
        SetBorder pTStyle.Table.Borders(wdBorderHorizontal)
        SetBorder pTStyle.Table.Borders(wdBorderLeft)
        SetBorder pTStyle.Table.Borders(wdBorderTop)
        SetBorder pTStyle.Table.Borders(wdBorderVertical)
        SetBorder pTStyle.Table.Borders(wdBorderRight)
        For Each pTable In ActiveDocument.Tables
            pTable.Style = pTStyle
        Next pTable
    End Sub


    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 02:44 27-10-2011
    indapublic



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как перемещаясь по обычному Word-тексту с помощью команд:
     
      Selection.MoveRight Unit:=wdCharacter, Count:=1 ' ВПРАВО на 1 позицию

      Selection.MoveDown Unit:=wdLine, Count:=1 ' ВНИЗ на 1 строк

      If Selection = ????? Then <На обработку конца текста>
     
    Отыскать конец текст

    Всего записей: 200 | Зарегистр. 05-02-2008 | Отправлено: 16:08 01-12-2011
    Gena1971



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

    Код:
    Selection.End и (ActiveDocument.Characters.Count - 1)

    Всего записей: 2567 | Зарегистр. 25-01-2005 | Отправлено: 18:14 01-12-2011
    indapublic



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ага, понятно, буду дальше пробовать

    Всего записей: 200 | Зарегистр. 05-02-2008 | Отправлено: 17:07 02-12-2011
    Gena1971



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    indapublic
    А зачем такие сложности с перемещением? Не проще ли обрабатывать слова/символы/абзацы?
    Конструкцией типа

    Код:
    For Each ___ in ___
       ..................
       ..................
    next

    Всего записей: 2567 | Зарегистр. 25-01-2005 | Отправлено: 17:32 02-12-2011
    indapublic



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Я не силен в VBA и не очень понял как обрабатывать слова-абзацы. Упор делаю именно на перемещение по тексту.

    Всего записей: 200 | Зарегистр. 05-02-2008 | Отправлено: 05:01 03-12-2011
    Gena1971



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

    Код:
    Sub XXX()  
       On Error Resume Next  
       For Each tarakan In Selection.Columns.First.Cells  
         tarakan.Range.Words.First.Bold = 1  
       Next  
     End Sub

    tarakan - это переменная все ячейки первой колонки выделенной таблицы.
    Далее для каждой из них в тексте выбираются первые слова и делаются жирными.
    Можно и так сделать

    Код:
    For Each tarakan In Selection.Columns(1).Cells  
         tarakan.Range.Words(1).Bold = 1

    Все абзацы - Selections.Paragrafs
    Все слова - Selections.Words
    Это в выделенном. А в документе надо ActiveDocument использовать.
    Вот таким образом как тут написал можно найти практически что угодно.

    Всего записей: 2567 | Зарегистр. 25-01-2005 | Отправлено: 06:46 03-12-2011
    indapublic



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

    Всего записей: 200 | Зарегистр. 05-02-2008 | Отправлено: 15:03 04-12-2011
    indapublic



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

    Всего записей: 200 | Зарегистр. 05-02-2008 | Отправлено: 12:30 08-12-2011
    indapublic



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

    Всего записей: 200 | Зарегистр. 05-02-2008 | Отправлено: 06:37 11-12-2011
    Lightingee

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    День добрый. Помогите пожалуйста.
    Нужно написать макрос который переносит слова (без пробелов, знаков препинания и т.д.) с нумерацией в новый документ. И если можно поподробнее.  
    Заранее спасибо!

    Всего записей: 1 | Зарегистр. 19-12-2011 | Отправлено: 11:54 19-12-2011
    murkovich



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

    Цитата:
    в документе две надписи. Мне нужно скопировать их в тот же документ, пониже  
    Копирование самих надписей я добился - но не могу скопировать содержимое.  

    Не совсем понятно, что такое "надписи", и в каком смысле их самих копировать можно, но без содержимого? Разве надпись не то же самое, что ее содержимое?

    Всего записей: 1551 | Зарегистр. 26-05-2005 | Отправлено: 13:30 19-12-2011
    nu4eHbko

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

    Цитата:
    1030100053| 1.000|
     1030100066| 1.000|
     14.00|
     
     | |
     |. |
     1030200045| 297.000|
     311.00|
     
     28 2011. .

    который нужно привести к подобному виду

    Цитата:
    1020200003| 3.000|
     1020200004| 6.000|
     1020200009| 3.000|
     1020200013| 9.000|

    то есть убрать лишние строки содержащие символы или же  цифры менее 8ми знаков в начале
     

    Код:
    Sub m_1()
    Dim oWrd As Range
     For Each oWrd In Selection.Paragraphs(1).Range.Words
        If Len(LTrim(oWrd)) < 8 Then
           oWrd.Select
           Selection.Delete
          Next oWrd
    End Sub

    написал данное но цикл тормазится при первой же встрече с не удаляемой строкой у меня логический ступр и не хватка знаний

    Всего записей: 2 | Зарегистр. 09-01-2012 | Отправлено: 14:34 09-01-2012
    Gena1971



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    nu4eHbko
    Selection.Paragraphs(1).Range.Words - все слова первого абзаца.
    Вот типа такого надо

    Код:
    For Each prgrph In ActiveDocument.Paragraphs
      If prgrph.Range.Words.First.Characters.First.Text = " " Then
        prgrph.Range.Words.First.Select
        Selection.Delete
      End If
      If prgrph.Range.Words.First.Characters.Count < 8 Then
        prgrph.Range.Select
        Selection.Delete
      End If
    Next prgrph

    На кусочке документа сработало.
    Первое if - это удаление пробела вначале абзаца т.к. он считается первым словом.

    Всего записей: 2567 | Зарегистр. 25-01-2005 | Отправлено: 15:46 09-01-2012 | Исправлено: Gena1971, 15:49 09-01-2012
    nu4eHbko

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    пасиба огромное!!!!!!  
    я в поросячем визге
     
    понял ошибку ...

    Всего записей: 2 | Зарегистр. 09-01-2012 | Отправлено: 16:01 09-01-2012
    Vadim39



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Имеется документ, содержащий несколько тысяч букв. Нужно каждой из них случайным образом присвоить один из пяти стилей.  
    Подскажите, пожалуйста как написать VBA скрипт такого типа (совершенно не владею синтаксисом):
     
    идти в начало документа
     
    найти любую букву (^$)
    Dim StyleNum
    StyleNum = Int((5 * Rnd) + 1)
    присвоить стиль ном. StyleNum найденной букве
    найти следующую букву
    и т.д. пока не достигнут конец документа
     
    ЗарСпасБол!

    Всего записей: 1117 | Зарегистр. 11-04-2002 | Отправлено: 05:22 16-01-2012
    Brainiacs

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго времени!
     
    А помогите доработать скриптик (не мои):
     

    Цитата:
    Option Explicit
     
    Dim strDocumentList
    Dim strBadTemplate
    Dim strDocument
     
    Dim objFSO
    Dim objWord
     
     
    strDocumentList = "E:\Песочница\0116\DocumentList.txt"
    strBadTemplate  = "\\fileserver2\USERS$\sba\My Documents\Brand Manual\Brand Manual\templates Norit russia\Templates NV\Norit NV - brief - ENG, V060403.dot"
     
     
    Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
     
    If objFSO.FileExists(strDocumentList) Then
        Set objWord = WScript.CreateObject("Word.Application")
        
        With objFSO.OpenTextFile(strDocumentList)
            Do Until .AtEndOfStream
                strDocument = .ReadLine()
                
                If objFSO.FileExists(strDocument) Then
                    WScript.Echo strDocument
                    
                    With objWord.Documents.Open(strDocument)
                        If .AttachedTemplate = strBadTemplate Then
                            WScript.Echo "  Template found in document [" & strDocument & "]"
                            
                            .AttachedTemplate = "Normal.dotm"
                            .Save
                        End If
                        
                        .Close
                    End With
                Else
                    WScript.Echo "Document [" & strDocument & "] not found"
                End If
            Loop
            
            .Close
        End With
        
        objWord.Quit
        
        Set objWord = Nothing
    Else
        WScript.Echo "Document list [" & strDocumentList & "] not found"
    End If
     
    Set objFSO = Nothing
     
    WScript.Quit 0

     
    Собственно вот Шаблон Word
     

    Цитата:
    strDocumentList = "E:\Песочница\0116\DocumentList.txt"  

     
    в этом файлике список путей к файлам ворд, созданный TotalCommander'ом:
     

    Цитата:
     
    .........
    Z:\CDM\anketa_k.doc
    Z:\CDM\pravil_karta_scheta.doc
    ..............
     

     

    Цитата:
    strBadTemplate

     
    это шаблон который встроен в вордовские документы (таких доков много)
     
    Задача: удалить путь к шаблон или заменить на шаблон по умолчанию (в 1283 документах)
     
    Не работает, что-то скриптик! Файл он открывает, но шаблон не удаляет и не заменяет!
    И ещё он когда echo отрабатывает, это ж надо будет на каждый файл "ок" нажимать, иначе он дальше не идет, можно как-то это тоже поправить?!

    Всего записей: 19 | Зарегистр. 03-10-2007 | Отправлено: 10:12 14-02-2012 | Исправлено: Brainiacs, 11:39 14-02-2012
    jackfrost

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите возможно ли создание своих кодов-полей для MS Word, нечто похожее на Ctrl+F9 {=myFun \param1 \param2}
    по аналогии с Excel (там можно в формуле вызывать любую public функцию модуля)
     
    не ужели в ворде нет никакого способа? может какие-нибудь AddIns помогут?
     

    Всего записей: 110 | Зарегистр. 23-07-2004 | Отправлено: 16:13 22-02-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