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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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  
     
     
    Родственные топики:
  • Вопросы по работе с Microsoft Word - часть 1, часть 2
  • Технические проблемы с Microsoft® Office® 2016 | Microsoft® Office® 2013 | Microsoft® Office® 2010 | Microsoft® Office® 2007 | Microsoft® Office® 2003
     
     
  • Excel VBA все вопросы по Excel VBA туда
  • Access все вопросы по программированию в Access туда
  • Книжульки по VBA - книги по программированию с использованием VBA
     
    Конкретные вопросы/готовые решения:
  • функция возвращает список закладок в документ
     
    Перечень основных ColorIndex'ов из MSDN
     
    - стартовый вопрос топика...

  • Всего записей: 2929 | Зарегистр. 27-09-2001 | Отправлено: 03:05 01-06-2005 | Исправлено: ALeXkRU, 11:40 02-07-2018
    Alex_Piggy

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

    Цитата:
    не совсем помогает. ". \1" Ставит: точку пробел Заглавная буква пробел оставшееся слово.  То есть отделяет первую букву.  Пока в мыслях загвоздка

    Не понял...

    Код:
     
    Dim r
     Set r = ActiveDocument.Range
     With r.Find
         .Text = " - ([A-ZА-Я])"
         .Forward = True: .Wrap = wdFindContinue: .format = False : .MatchCase = False: .MatchWholeWord = False:    .MatchAllWordForms = False :  .MatchSoundsLike = False: .MatchWildcards = True
         .Replacement.Text = " . \1"
         .Execute Replace:=wdReplaceAll
     End With
     

    Вроде заменяет правильно (Office 2003)...
     

    Всего записей: 1541 | Зарегистр. 07-08-2002 | Отправлено: 14:15 02-02-2014 | Исправлено: Alex_Piggy, 14:34 02-02-2014
    msmih



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

    Цитата:
    Не понял...  

    теперь я не понял))) вроде все тоже самое было, но первую букву в моем варианте отделял.
    Ваш вариант идеально работает.  Большое спасибо!

    Всего записей: 1151 | Зарегистр. 29-01-2006 | Отправлено: 14:39 02-02-2014
    msmih



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    еще с одной заморочкой зашел. Задача: удалить параграф содержащий определенный текст. Пока додумался до такого кода

    Код:
     
    For Each Paragraph In ActiveDocument.Paragraphs
        Selection.Find.ClearFormatting
        Selection.Find.Replacement.ClearFormatting
        With Selection.Find
            .Text = "то что я ищу"
            .Forward = True
            .Wrap = wdFindContinue
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With
        Selection.Find.Execute
         
        If Selection.Find.Found = True Then Paragraph.Range.Delete
    Next
     

    находит. но удаляет не текущий абзац, а текущий и все перед ним стоящие.
    Буду признателен за подсказку

    Всего записей: 1151 | Зарегистр. 29-01-2006 | Отправлено: 16:39 02-02-2014 | Исправлено: msmih, 16:42 02-02-2014
    Alex_Piggy

    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    msmih
    А что если зайти с другой стороны?

    Код:
     
    With ActiveDocument.Range.Find
             .ClearFormatting
             .Text = "test"
             .Forward = True
             .Wrap = wdFindContinue
             .format = False
             .MatchCase = False
             .MatchWholeWord = False
             .MatchWildcards = False
             .MatchSoundsLike = False
             .MatchAllWordForms = False
        Do While .Execute
          With .Parent
           .Expand Unit:=wdParagraph
           .Delete
          End With
        Loop
    End With
     

    Всего записей: 1541 | Зарегистр. 07-08-2002 | Отправлено: 17:21 02-02-2014
    msmih



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

    Цитата:
    А что если зайти с другой стороны?  

    Отработало все отлично! Еще раз благодарю! и преклоняю голову за ваш труд!

    Всего записей: 1151 | Зарегистр. 29-01-2006 | Отправлено: 18:17 02-02-2014
    agevelenko

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите, пожалуйста, с задачей.  
     
    В результате расчета создается каждый раз НОВЫЙ файл .doc с таблицами результатов. Есть намерение связать полученные таблицы с постоянно существующим файлом. Но поскольку файл новый, постоянно рабочие ссылки создать не получается. Пробовал пересохранять новый файл в каком-то постоянном с тем же именем, с замещением, но ссылки на таблицы в этом случае теряются. То есть в документе, источнике связанных таблиц, эти таблицы даже временно не должны удаляться или замещаться новыми.
     
    В Worde есть возможность сохранить файл поверх существующего с ВНЕСЕНИЕМ В НЕГО ИЗМЕНЕНИЙ. Эта возможность решает проблему, но в коде ВБА такой опции я не нашел. activedocument.saveas и activedocument.saveas2 сохраняют файл с замещением без запроса. Как можно решить задачу?

    Всего записей: 9 | Зарегистр. 12-03-2014 | Отправлено: 14:21 12-03-2014
    agevelenko

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите, пожалуйста, с другой проблемой .
     
    Есть необходимость получить в Ворде адрес последней строки таблицы, существующей в Экселе. Почему не работает следующий способ: (?)
     
    Dim Ex as Object
     
    Set Ex = GetObject(путь на файл Эксель)
    Addr$=Ex.Application.Range("VAR1").End(xlDown).Address( , , xlR1C1)
     
    В этом коде, расположенном на листе Ворда, ВБА не распознает метод .End(xlDown). Пишет ошибку 1004. Ячейка Range("VAR1") располагается не на первом листе, если вдруг это важно.

    Всего записей: 9 | Зарегистр. 12-03-2014 | Отправлено: 18:21 19-03-2014
    msmih



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго времени суток. Буду признателен за подсказку.
    С помощью VBA меняю один знак на кавычки. условно замена "-" на chr(34). Но результат всегда непредсказуем: могут появиться парные кавычки " или << и >>. Совсем худо когда идет сочетание "текс>>. Как жестко зафиксировать результат? чтобы была однозначная замена.

    Всего записей: 1151 | Зарегистр. 29-01-2006 | Отправлено: 21:48 19-03-2014
    Alex_Piggy

    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Доброе время
    agevelenko
    Странный адрес "VAR1". Это что?  
    В экселе эта же конструкция работает?  (MsgBox Application.Range("VAR1").End(xlDown).Address( , , xlR1C1))
    Выбор листа MYNAME - Ex.Application.WorkSheets("MYNAME").Range....
     
    msmih
    У Вас включена автозамена кавычек? Если ее отключать на время работы скрипта?

    Код:
     
    Application.Options.AutoFormatReplaceQuotes = False
    Application.Options.AutoFormatAsYouTypeReplaceQuotes = False
     

    http://technet.microsoft.com/en-us/library/ee692775.aspx

    Всего записей: 1541 | Зарегистр. 07-08-2002 | Отправлено: 00:09 20-03-2014
    AndVGri

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

    Цитата:
    Странный адрес "VAR1". Это что?  

    В формате файла для Excel 2007 последний столбец XFD, так что адрес ячейки VAR1 вполне допустим. Ошибкой может быть:
    1. Скорее всего, так как судя по коду осуществляется позднее связывание, то ссылка на библиотеку Excel не установлена (Tools/References). Тогда нужно заменить xlDown на -4121, а xlR1C1 на -4150. Иначе откуда VBA возьмёт, что стоит за именами перечислений?
    2. Текущий лист не рабочий лист (может быть, например, диаграмма).

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 03:53 20-03-2014
    agevelenko

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AndVGri
    Большое спасибо за подсказку 1), действительно помогло.

    Всего записей: 9 | Зарегистр. 12-03-2014 | Отправлено: 10:58 20-03-2014
    mrdime



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Господа,  
    Чтобы любой открываемый мною в Ворде документ открывался в удобном для меня виде (по ширине страницы) "воткнул" вот такой код в модули шаблона Normal.dotm

    Цитата:
    Public Sub AutoOpen()
        ThisDocument.Application.ActiveWindow.View.Zoom.PageFit = wdPageFitBestFit
    End Sub

    и все вроде бы хорошо, но есть одно НО.
    Если открываю документ, скачанный из Интернета, в нем по-умолчанию отключаются все макросы (и вверху появляется: Protected view. Файл скачан из Интернета и может быть небезопасен.) Соотвественно в такой ситуации из-за наявности вышеприведенного кода Ворд выдает мне ошибку (Run-time error '4248'. This command is not available because the document is open.).
    Вопрос: как избежать появления этой ошибки?
    Т.е. как проверять, что если документ открывается в режиме Protected view, то не выполнять данный макрос?
    Добавлено
    Разобрался сам. Добавил условие и все заработало:

    Цитата:
    If ThisDocument.Application.ActiveProtectedViewWindow Is Nothing Then
            ThisDocument.Application.ActiveWindow.View.Zoom.PageFit = wdPageFitBestFit
    End If

    но документ на всю ширину страницы почему-то не разворачивается (несмотря на команду : ThisDocument.Application.ActiveWindow.View.Zoom.PageFit = wdPageFitBestFit
    Так что вопрос: как из vba рзвернуть окно документа на всю ширину страницы?
     

    Всего записей: 2656 | Зарегистр. 04-01-2005 | Отправлено: 13:30 10-04-2014 | Исправлено: mrdime, 16:03 10-04-2014
    YuriyRR



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mrdime
    Запиши макрос и посмотри команды - самый простой метод изучения.

    Всего записей: 491 | Зарегистр. 07-06-2007 | Отправлено: 00:32 11-04-2014
    mrdime



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

    Цитата:
    Запиши макрос и посмотри команды - самый простой метод изучения.

    Так и сделал. Только по непонятным мне причинам он НЕ РАБОТАЕТ.
    При разворачивании открытого документа на всю ширину окна, запись макроса мне выдала вот такую строчку:
    ActiveWindow.ActivePane.View.Zoom.PageFit = wdPageFitBestFit
    Что эта команда, что та,  что я использовал раньше:
    ThisDocument.Application.ActiveWindow.View.Zoom.PageFit = wdPageFitBestFit  
    Не дают желаемого результата.
    Если я "руками" меняю масштаб отображения документа допустим до 50%.
    То после закрытия Ворда, и запуске вновь, новый документ открывается почему-то не по всей ширине экрана, а в последнем масштабе, в данном случае - 50% например.
    Мне пока неясно почему так происходит.

    Всего записей: 2656 | Зарегистр. 04-01-2005 | Отправлено: 01:35 12-04-2014
    agevelenko

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Не может ли кто-нибудь прояснить несколько вопросов о свойстве StatusBar? в справке VBA Word написано, что это свойство более не поддерживается, но нет информации, появилось ли что-нибудь на замену.
    И второй вопрос. Можно ли как-то остановить автоматическое обновление строки состояния Вордом (чтобы то, что я вписал в нее, не исчезало через секунду?).

    Всего записей: 9 | Зарегистр. 12-03-2014 | Отправлено: 13:08 14-04-2014
    Leviathann

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Уважаемые знатоки!
     
    Подскажите, пожалуйста, простую вещь - каким скриптом можно выделить или удалить все объекты WordArt в Word 2010 ?

    Всего записей: 4 | Зарегистр. 12-07-2007 | Отправлено: 12:29 15-04-2014
    agevelenko

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Leviathann
     
    Попробуй так.
     
        Dim MySh As Shape
         
        For Each MySh In ActiveDocument.Shapes
            If MySh.Type = msoTextEffect Then
                MySh.Delete
            End If
        Next MySh
     
    Свойство msoTextEffect должно указывать на объект WordArt, но в Word 2010 этого не происходит. Попробуй др. значения (см. MsoShapeType Enumeration в справке). У меня объект WordArt распознается как надпись (msoTextBox).

    Всего записей: 9 | Зарегистр. 12-03-2014 | Отправлено: 14:18 15-04-2014
    Leviathann

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    За несколько проходов всё вычистил, отлично! Вторая половина мусора оказалась как раз msoTextBox.
    Благодарю!

    Всего записей: 4 | Зарегистр. 12-07-2007 | Отправлено: 14:51 15-04-2014
    cccs54

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите, пожалуйста!
    Я сделал форму.  
    На ней поле TextBox1 и кнопка CommandButton1, так же есть  генератор чисел от 1 до 1000. Отдельно лежит фаил с текстом sobit.txt.
    Как объединить генератор с текстовым фаилом, чтоб случайным образом из него печаталось слово в  поле TextBox1 при нажатии на кнопку CommandButton1?

    Всего записей: 1 | Зарегистр. 01-05-2014 | Отправлено: 22:16 01-05-2014
    msmih



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

    Всего записей: 1151 | Зарегистр. 29-01-2006 | Отправлено: 19:03 29-07-2014 | Исправлено: msmih, 20:44 21-08-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

    Имя:
    Пароль:
    Сообщение

    Для вставки имени, кликните на нем.

    Опции сообщенияДобавить свою подпись
    Подписаться на получение ответов по e-mail
    Добавить тему в личные закладки
    Разрешить смайлики?
    Запретить коды


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.Board
    © Ru.Board 2000-2018

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru