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

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

  • Всего записей: 3329 | Зарегистр. 27-09-2001 | Отправлено: 03:05 01-06-2005 | Исправлено: ALeXkRU, 17:10 03-08-2021
    Troitsky



    Водник Водкин
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Anatolij2005
    Вот так покатит?
    Код:
    Sub Макрос2()
      Dim strNew As String
      Dim intCount As Integer
      Dim i As Integer
       
      With ActiveDocument.Tables(1) ' .Tables(1)
        intCount = .Rows.Count
         
        For i = 1 To intCount
          strNew = Mid(.Cell(i, 2).Range.Text, 1, Len(.Cell(i, 2).Range.Text) - 2)
          ActiveDocument.FormFields(i).TextInput.EditType Type:=wdRegularText, Default:=strNew, Format:=""
        Next i
      End With
     
    End Sub

     
     
    Добавлено:
    Макрос перебирает все ячейки второго столбца таблицы 1 и присваивает их содержимое свойству текст по умолчанию текстовых полей, имеющих индекс, равный номеру текущей строки.

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

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 20:44 22-02-2006
    Anatolij2005

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    С праздником. Пробовал макрос, не работает, на первом месте оказалось пустое текстовое поле. А другие поля остались на месте.Может что делаю не так?Взял кусок текста с полями и таблицу в которую вписал новые и старые значения, запустил макрос.

    Всего записей: 26 | Зарегистр. 04-10-2005 | Отправлено: 10:05 23-02-2006
    Troitsky



    Водник Водкин
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Anatolij2005
    А в документе есть еще таблицы? Были? Таблица о которой идет речь (со значениями) добавлялась первой? В ней есть шапка? Она состоит только из двух столбцов - в первом старые значения, во втором - новые? Порядок добавления полей в документ был тот же, что и порядок следования соответствующих им строк таблицы?
     
    В тестовом документе у меня все работает.
    http://rapidshare.de/files/13925005/doc.zip.html
    Проверь а у тебя заработает?

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

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 10:46 23-02-2006
    Anatolij2005

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

    Всего записей: 26 | Зарегистр. 04-10-2005 | Отправлено: 10:55 23-02-2006
    Troitsky



    Водник Водкин
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Anatolij2005
    Жмешь на открывшейся странице кнопку "Free".
    На следующей странице (возможно придется секунд несколько подождать) введешь в текстовое поле буквенно-цифровой код, который на картинке изображен, и нажмешь кнопочку "Download" - пойдет закачка.

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

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 11:19 23-02-2006 | Исправлено: Troitsky, 11:21 23-02-2006
    Anatolij2005

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

    Всего записей: 26 | Зарегистр. 04-10-2005 | Отправлено: 13:33 23-02-2006
    Troitsky



    Водник Водкин
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Anatolij2005
    Тогда созавай новый документ вставляй в него таблицу со значениями и сохраняй.
    В документ с полями вставляй макрос
    Код:
    Sub Макрос1()
      Dim strNew As String
      Dim intCount As Integer
      Dim i As Integer
       
      Documents.Open FileName:="D:\Документ с таблицей.doc", ReadOnly:=True, Visible:=False
         
      With Documents("D:\Документ с таблицей.doc").Tables(1)
        intCount = .Rows.Count
         
        For i = 1 To intCount
          strNew = Mid(.Cell(i, 2).Range.Text, 1, Len(.Cell(i, 2).Range.Text) - 2)
          Documents("D:\Документ с полями.doc").FormFields(i).TextInput.EditType Type:=wdRegularText, Default:=strNew, Format:=""
        Next i
      End With
     
      Documents("D:\Документ с таблицей.doc").Close savechanges:=False
     
    End Sub
    и запускай его. Должно работать нормально.
     
    Примеры файлов тут:
    http://rapidshare.de/files/13933749/docs.zip.html

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

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 14:09 23-02-2006
    Anatolij2005

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

    Всего записей: 26 | Зарегистр. 04-10-2005 | Отправлено: 16:09 28-02-2006
    Anatolij2005

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    В дополнение к решению прошлой проблемы с полями формы, могу озадичить следующим.Подскажите какой можно написать макрос в VBA Word, что бы при удалении текстовых полей в большом тексте, происходило обновление закладки.Например была номерация Текстовое поле1, Текстовое поле2,Текстовое поле3
    а после удаления поля, Текстовое поле1, Текстовое поле3 нужно чтобы было Текстовое поле1, Текстовое поле2 тоесть они должны идти подряд.
     Попогите пожалуйста а то у меня пока опыта маловато.
     

    Всего записей: 26 | Зарегистр. 04-10-2005 | Отправлено: 15:09 01-03-2006
    Mbus



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    У меня достаточно простая задача.  
    Есть подпись-факсимиле = картинка в формате Png с прозрачным фоном.  
    Мне нужна кнопка, по нажатию которой вставлялась бы подпись в нужное место. Это все без проблем не сложно, но вот одна фигня вылезла, что мне не нравится.  
     
    В документах используются штампы - это по сути таблица со строго заданными размерами. Когда в нее (в ячейку) вставляешь картинку, эта картинка сразу принимает масштаб ячейки, при чем даже если ячейки объеденены, картинка всеравно вставится размером как в одну ячейку.  
     
    Подписи бывают разные, у некоторых оч. выперают закорючки. И поэтому подпись, вписанная в ячеку становится оч. мелкой..... хочется правдоподобия.  
    А к в реальности бывает? подпись может слегка выходить своими закорючками за поля.  
     
    Я не знаю как сделать так, чтобы подпись вставлялась с определенным масштабом и св-вом, например, перед текстом. Потомучто иначе если подпись растягивать, она всеравно за границы ячейки не вылазит, просто что уместилось в ячейке, то видно, что дальше - скрыто.  
     
    Добавлено:  
    Во, сама и сделала..... теперь вставляет со свойством = перед текстом  и масштаб в два раза меньше реального  
     

    Код:
     
        With ActiveDocument.Shapes.AddPicture(Anchor:=Selection.Range, filename:= _  
                                                                   "D:\g.png", LinkToFile:=False, _  
                                                                    SaveWithDocument:=True)  
                                                                    .Select  
        End With  
        Selection.ShapeRange.ScaleWidth 0.5, msoFalse  
        Selection.ShapeRange.ScaleHeight 0.5, msoFalse  
     
     
     
    Теперь другие два вопроса:
    1. при такой вставке картинки, она улетает в начало строки, а не остается на том месте где ее вставили
    2. проблема которая впринципе и была
    Есть у нас в колонтитуле штамп = таблица со строго заданными размерами.
    Вставляем в ее ячейку картинку через Вставка-Рисунок-Из файла
    Потом щелкаем по нему два раза и меняем полодение на = перед текстом (или любое другое) и эта картинка куда-то вылетает...не видно ее....
    При вставке макросом теже самое  
    Это именно со свойством связано, может кто-то знает ответ на этот вопрос? Хотя вроде если вставлять просто в чистый колонтитул так все нормально....

    Всего записей: 655 | Зарегистр. 04-06-2003 | Отправлено: 07:44 07-04-2006
    Archimed



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Никак не могу решить такую задачу. В UserForms есть 32 Combobox-са (ВВод). Все тексты из них надо переписать в массив М(1 То 32). Сделать это в ЦИКЛЕ по I.
    М(1) = Ввод1.Text, М(2) = Ввод2.Text и т.д. У меня проблема с перебором текстовых полей Ввод1-32. Как задать ВводI.Text. Не хочу писать 32 строки вместо 2-3. Тем более еще придется как-то обрабатывать текст, выбрасывать пустышки и т.п.

    Всего записей: 752 | Зарегистр. 25-10-2002 | Отправлено: 20:34 09-04-2006
    Troitsky



    Водник Водкин
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Archimed
    По идее, нужен массив элементов ComboBox, а не 32 отдельных штуки, тогда перебрать можно было бы по индексам. В твоей ситуации можно только попробовать осуществить перебор с помощью инструкции For Each ... Next. Другого выхода не вижу.

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

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 23:20 09-04-2006 | Исправлено: Troitsky, 23:21 09-04-2006
    mrdime



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Господа, возникла такая проблема:
    Импортирую (руками) таблицы из IE в Word. Все таблицы имеют обьемные границы, которые в Word-е выглядят просто ужасно. Посему написал небольшой макрос. Который меняет тип и ширину границ.  

    Цитата:
    Sub TableEdit()
     
    For Each aTable In ActiveDocument.Tables
        aTable.Borders.OutsideLineStyle = wdLineStyleSingle
        aTable.Borders.OutsideLineWidth = wdLineWidth025pt
        aTable.Borders.InsideLineStyle = wdLineStyleSingle
        aTable.Borders.OutsideLineWidth = wdLineWidth025pt
        aTable.Spacing = 0
        aTable.AllowPageBreaks = True
        aTable.AllowAutoFit = True
         
    Next aTable
     
    End Sub

    Но остается параметр Spacing, даже принудительное присваивание ему значения "0" не дает возможности от него полностью избавиться. Между линиями остаются небольшие зазоры. Приходится для каждой таблицы руками в Свойствах таблицы - Таблица - Параметры убирать галку с "Интервалы между ячейками". Подскажите как избавиться от этой гадости, как это сделать на VBA?

    Всего записей: 2975 | Зарегистр. 04-01-2005 | Отправлено: 02:20 11-04-2006 | Исправлено: mrdime, 02:23 11-04-2006
    Archimed



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Troitsky
    Массив элементов ComboBox тоже надо как-то заполнить. Попытался для 3-х
    Dim M(3) As String
    For Each I In M
    M(I) = ВводI.Text
    Next I
    Никак не прокатывает. Неверное свойство или метод. Может кто подскажет другое, или я не так делаю.

    Всего записей: 752 | Зарегистр. 25-10-2002 | Отправлено: 19:36 11-04-2006
    Troitsky



    Водник Водкин
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Archimed
    Осекся я немного. В ВБА некоторые трудности с массивами элементов управления
     
    Можно что-то типа такого попробовать:
    Код:
      Dim MyCombo As ComboBox
      Dim M() As String
      Dim i As Integer
       
      i = -1
       
      For Each MyCombo In UserForm1.Controls
        i = i + 1
        ReDim Preserve M(i)
        M(i) = MyCombo.Text
      Next

     
    Добавлено:
    Или точнее, вот так лцчше будет:
    Код:
      Dim anyControl As Control
      Dim M() As String
      Dim i As Integer
       
      i = -1
       
      For Each anyControl In UserForm1.Controls
        If (TypeOf anyControl Is ComboBox) Then
          i = i + 1
          ReDim Preserve M(i)
          M(i) = anyControl.Text
        End If
      Next

     
    Добавлено:
    Вот тут была в чем-то похожая проблема.

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

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 20:23 11-04-2006 | Исправлено: Troitsky, 20:42 11-04-2006
    Fr1end

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Кто подскажет, как макросом создавать формулу в Ворде?

    Всего записей: 164 | Зарегистр. 13-05-2005 | Отправлено: 16:52 12-04-2006
    Mbus



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ВОПРОС
     
    Вот делаю так  
    1. пишу макрос
    2. вытаскиваю его на панельку
     
    А можно ли как-нить написать макрос так, чтобы он сам формировал панель или меню?
     
     
     
    Добавлено:
    Вот написала так:
     

    Код:
     
    Sub menu()
     
    Set MainMenu = CommandBars("Menu Bar").Controls.Add (Type:=msoControlPopup, Temporary:=True)
    MainMenu.Caption = "MAIN"
     
    Set SubMenu = MainMenu.CommandBar.Controls.Add(Type:=msoControlButton, ID:=1)
    With SubMenu
    .Caption = "Вставить картинку"
    .OnAction = "img"
    End With  
     
     
    End Sub
     
    Sub img(fio)
     
    Selection.InlineShapes.AddPicture filename:="D:\img\" + fio + "_g.png", _
    LinkToFile:=False, SaveWithDocument:=True
     
    End Sub
     
     
     
     
    В результате выполнения макроса формируется меню MAIN с подменю ВСТАВИТЬ КАРТИНКУ
     
    Если щелкнуть по кнопке, то должна выполнится функция IMG
    Если она без параметров, то работает в таком варианте, но если есть параметр (FIO в данном случае), то я не знаю как его передать...что-тов се на синтаксическую ошибку жалуется, т.е. надо правильно написать строку , выделенную красным шрифтом

    Всего записей: 655 | Зарегистр. 04-06-2003 | Отправлено: 11:57 18-04-2006 | Исправлено: Mbus, 14:19 18-04-2006
    Troitsky



    Водник Водкин
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Mbus
    А как ты себе представляешь работу макроса?
    Ну жмешь "ВСТАВИТЬ КАРТИНКУ" и должен выполнится макрос. И что в него передается? Откуда берется параметр fio? Или он с каждым вызовом макроса остается постоянным? Меняется?
    Если, допустим, это строковая переменная, которая содержит выделенный текст, не проще ли будет так это в макросе и отразить не изобретая никаких параметров?

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

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 20:05 18-04-2006
    Mbus



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Troitsky
    я конкретный ворос задала как передать параметр, остальное не важно...
    вот мне подсказали два способа
    один из них так записать .OnAction = "'img ""Фамилия""'"
    другой с использованием .Parameter = "Фамилия" и в самой функции img обратиться к нему

    Всего записей: 655 | Зарегистр. 04-06-2003 | Отправлено: 09:12 19-04-2006
    Troitsky



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

    Цитата:
    вот мне подсказали
    и работают?
     
    Мне кажется, в лучшем случае получится передать параметр, который нельзя будет изменить, постоянный.
    Кстати, не могу найти ни одного аналога среди существующих стандартных объектов CommandBar. М.б. отсюда и недопонимание задачи?
     
    Можно конечно сделать "каскадом":
    Код:
    Sub img()
      img2 "Фамилия"
    End Sub
     
    Sub img2(fio)
      Selection.InlineShapes.AddPicture FileName:="D:\img\" + fio + "_g.png", _
      LinkToFile:=False, SaveWithDocument:=True
    End Sub
    Но наверняка все гораздо проще и использование параметра не обязательно.


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

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 18:22 19-04-2006
    Открыть новую тему     Написать ответ в эту тему

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