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

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

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



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

    Цитата:
     
    Dim xlApp As Excel.Application  
    Dim xlSheet As Excel.WorkSheet
    Dim xlRange AS Exel.Range
     
    Set xlApp = CreateObject("Excel.Application")
    xlApp.Worbooks.Open('C:\FileExel.xls')
    xlSheet = xlApp.WorkSheets('Лист1')
    xlRange = xlSheet.UsedRange
     
     
    For r=1 To xlRange.Rows.Count Do
    For c=1 To xlRange.columns.Count Do
     
    xlRange.Cells(r,c).Value
     
     

    и т.д. в зависимости от поставленой задачи

    Всего записей: 557 | Зарегистр. 05-04-2006 | Отправлено: 13:26 11-08-2006
    Archimed



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

    Цитата:
    xlSheet = xlApp.WorkSheets('Лист1')  

    На этой строке выдает ошибку (Object variable or With block variable not set (Error 91)).
    В чем может быть причина? Не подключены какие-то библиотеки.
     

    Цитата:
    For r=1 To xlRange.Rows.Count Do  
    For c=1 To xlRange.columns.Count Do  

    в этих строках тоже какая-то ошибка.
     Если не трудно прогони код на компе, а то у тебя есть ошибки по тексту.
    Цитата:
    Dim xlRange AS Exel.Range  

    EXEL  и ' вместо ".

    Всего записей: 733 | Зарегистр. 25-10-2002 | Отправлено: 15:48 12-08-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Archimed
    Set xlSheet = xlApp.WorkSheets("Лист1")
    Set xlRange = xlSheet.UsedRange
     
    В For цикле Do не надо.

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 18:42 12-08-2006
    RedPromo



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Archimed
    Да немного есть ошибок приношу извиннеия прост я писал с ходу  
    да иногда неуспеваеш переключится на с одного языка на другой

    Всего записей: 557 | Зарегистр. 05-04-2006 | Отправлено: 20:02 12-08-2006
    mrdime



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Господа, такой вопрос:
     
    Все таблички в документе необходимо отформатить по одному образцу. Все бы хорошо, но надо, чтобы все ячейки в первой строке каждой таблицы форматировались по-горизонтали по-центру.  На следующий код получаю ошибку, что таблица содержит объединенные ячейки, поэтому опреация невозможна. Но, обьединенные ячейки находятся не в первой строке, в некоторых таблицах таких вообще нет. Как обойти эти грабли? Кроме того, если делать это "ручками" в Excel никакие объединения не мешают форматить ячейки как угодно.
    Вот код:
     
    Sub TableEdit ()
     
    Dim oTable As Table
     
    For Each oTable in ActiveDocument.Tables
         oTable.Rows(1).Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
    Next oTable
     
    End Sub

    Всего записей: 2694 | Зарегистр. 04-01-2005 | Отправлено: 21:54 22-08-2006
    mrdime



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Что-то не работает эта ветка форума...
    Разобрался сам. Если кого интересует - пишите - отвечу. Но суть в том, что ряды в Ворде не поддерживают свойство .ParagraphFormat.Alignment. Зато поддерживают ячейки. Через них я это и сделал: отформатил все ячейки с идексом 1.
     
    For Each oTable in ActiveDocument.Tables  
         For I=1 To 3 'у меня по 3 колонки в таблицах
               oTable.Columns(I).Cells(1).ParagraphFormat.Alignment = wdAlignParagraphCenter  
         Next I
    Next oTable  
     
    Пишу по памяти, мож. где ошибка, но принцип такой.

    Всего записей: 2694 | Зарегистр. 04-01-2005 | Отправлено: 19:56 02-09-2006
    mrdime



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Привет всем,
     
    Как я понял, эта ветка не слишком активна, мягко говоря, но может кто-то идейку подкинет...
     
    Такая проблема. Есть код:
     
    Sub Test()
    Dim myTable As Table
    Dim oCell As Cell
    Dim myRange As Range
     
    Set myTable = ActiveDocument.Tables(1)
     
    Set myRange = ActiveDocument.Range( _
    myTable.Cell(3, 1).Range.Start, _
    myTable.Cell(4, 1).Range.End)
    myRange.Cells.Merge
     
     
    End Sub
     
    Выдает ошибку:5941:"Запрашиваемый номер семейства не существует."
     
    Если объединять ячейки из любого другого столбца, кроме 1-го, все выполняется без проблем. Но, мне необходимо объеденить несколько ячеек именно в первом столбце таблицы.
     
    Буду благодарен, если кто-то подскажет решение проблемы, или хотя бы ресурс, где об этом можно поподробнее узнать (можно на английском или немецком). Мелкомягкие именно эту проблему в справке по ошибке с таким кодом не описывают.

    Всего записей: 2694 | Зарегистр. 04-01-2005 | Отправлено: 13:47 04-09-2006
    Yuk



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

    Код:
    ...
    myRange.Select
    Selection.Cells.Merge

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 21:12 04-09-2006
    mrdime



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Yuk
     
    Ух, Шайтан!
    Большое спасибо, не ожидал, что так просто можно решить эту проблему.

    Всего записей: 2694 | Зарегистр. 04-01-2005 | Отправлено: 10:19 05-09-2006 | Исправлено: mrdime, 10:20 05-09-2006
    OrlangurStep



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как заставить выполнятся макрос при открытии любого дока?

    Всего записей: 1392 | Зарегистр. 08-04-2006 | Отправлено: 14:52 12-11-2006
    Troitsky



    Водник Водкин
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    OrlangurStep
    Добавить его в шаблон всех документов (Normal.dot). Например,
    Код:
    Private Sub Document_Open()
      MsgBox "Привет"
    End Sub



    ----------
    Мы в хорошем настроении гуляем по лесам.
    Кто обидеть нас захочет – сам получит по усам.
    Сам полу- получит по усам. Сам полу- получит по усам!

    Всего записей: 794 | Зарегистр. 13-12-2003 | Отправлено: 14:58 12-11-2006
    OrlangurStep



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    TЕсть ще вопрос -  как проверить иня текущего дока на соответствие шаболону ????TMP.rtf ?

    Всего записей: 1392 | Зарегистр. 08-04-2006 | Отправлено: 18:36 12-11-2006
    Troitsky



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

    Цитата:
    TЕсть ще вопрос -  как проверить иня текущего дока на соответствие шаболону ????TMP.rtf ?

    Без регулярных выражений, не универсально
    Код:
      If Len("????TMP.rtf") = Len(ActiveDocument.Name) Then
        If StrComp(Right(ActiveDocument.Name, Len("TMP.rtf")), "TMP.rtf", 1) = 0 Then
          MsgBox "Соответствует шаблону"
        End If
      End If

     
    С использованием регекспов, универсально, но требует дополнительную библиотеку и знание синтаксиса регулярных выражений. Что то типа этого:
    Код:
      Dim regEx
      Set regEx = New RegExp
     
      regEx.Pattern = "^(.{4})TMP\.rtf"
      regEx.IgnoreCase = True
     
      If regEx.Test(ActiveDocument.Name) = True Then
        MsgBox "Соответствует шаблону"
      End If



    ----------
    Мы в хорошем настроении гуляем по лесам.
    Кто обидеть нас захочет – сам получит по усам.
    Сам полу- получит по усам. Сам полу- получит по усам!

    Всего записей: 794 | Зарегистр. 13-12-2003 | Отправлено: 20:13 12-11-2006
    Phelicks

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Народ. Может кто поможет.
     
    Есть таблица. Внутрь вставляю поле. Нужно чтобы при попытке Worda расширить таблицу по высоте, если текст не вписывается, уменьшить шрифт на 1 пт. И так пока не станет все пучком.
     
    Помогите плз. !!!! Можно в приципе за webmoney или пива

    Всего записей: 212 | Зарегистр. 28-04-2004 | Отправлено: 22:00 23-11-2006
    Archimed



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Опять прошу помощи. В Userform добавляю новый Controls как Forms.Label.1. Как изменить размер и тип шрифта в добавленной метке. ...NewControls.Font ="Arial" не прокатывает. Короче, надпись не помещается в выделенное под нее поле. нужно уменьшить шрифт. Расширить Width не предлагать.
    Вопрос снят. Нашел в Helpe как это можно сделать.

    Всего записей: 733 | Зарегистр. 25-10-2002 | Отправлено: 14:04 23-12-2006 | Исправлено: Archimed, 09:23 24-12-2006
    zeroandruxa



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Народ как програмно добраться до филдов (вставить поле в меню вставка), добавлять их заменять значениями в тексте?

    Всего записей: 530 | Зарегистр. 02-11-2005 | Отправлено: 13:55 28-12-2006
    VicFrag

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вот, казалось бы,типичная задача. Хочу написать что-либо типа Wizard для формирования документа пользователем. Программа строит документ и периодически предлагает пользователю заполнить конкретным содержимым отдельные блоки: шапочку, таблички и т.д.. В эти блоки юзер может вставлять всё что душе угодно: графику, текст, формулы, OLE объекты. Казалось бы, выкинул пользователю пустую страничку и говори заполняй, как закончишь нажми такую-то кнопочку или комбинацию клавиш. Макрос всё это подсосёт и продолжит работу. Типичная задача. А вот решения не вижу. В своё время писал макрос для интерактивного построения сложных многоуровневых диаграмм. И там содержимое отдельных блоков должно было быть любым(см. выще). По ходу работы макроса пользователь строил диаграмму(выбирал тип: ветвление, цикл, условие), а для заполнения содержимого текущего блока выбрасывался пустой документ и он туда пихал всё что-нужно. Нажимал кнопарь и поехали дальше. Подобная задача была решена в WordBasic(был такой) при помощи жуткого извращения. В VBA я не вижу подобного решения. Word либо исполняет макрос, либо работает с пользователем. Может у кого есть решение этой в общем то типичной проблеммы?

    Всего записей: 3 | Зарегистр. 04-01-2007 | Отправлено: 20:13 04-01-2007 | Исправлено: VicFrag, 20:15 04-01-2007
    SGavrish

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Если создать в Excel-е встроенный объект (несвязанный), например документ Word, то при его открытии в меню word-а нет команды "Сохранить", вместо нее "Обновить", изменены ряд других команд меню, заголовок окна, Document.Path="", и др. То есть word "знает", что документ был создан OLE-следствами, и соответственно им манипулирует. А вот как мне включить такой режим? Мне нужно создать документ из 1С v8, и сохранить его в 1С-ой базе. Как это сделать через временный файл понятно, а вот можно ли обойтись без файла? Куда word-у сохранять его по команде пользователя "Обновить"? Не понятен принцип такой работы, и описаловки нигде не могу найти
    Подскажите пожалуйста.

    Всего записей: 1 | Зарегистр. 12-03-2007 | Отправлено: 11:38 12-03-2007
    TashaA



    Newbie
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Уважаемые! HELPните, плиз!
    Как скопировать данные таблицы Excel и вставить их в таблицу Wordа?
    т.е. полностью таблицу, а не одну ячейку.

    Всего записей: 6 | Зарегистр. 30-05-2006 | Отправлено: 07:12 05-04-2007
    apexfmm



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    TashaA
    только через импорт данных Excel

    ----------
    -Если вы не испытываете желания преступить хоть одну из десяти заповедей - значит, с вами что-то не так
    [WINXP SP3eng, Intel P75, CoreDuoE7400 2.8GHz, 2Gb DDR2, Radeon HD4830]

    Всего записей: 782 | Зарегистр. 28-04-2005 | Отправлено: 03:34 06-04-2007
    Открыть новую тему     Написать ответ в эту тему

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