Semenalidery.com

IT Новости из мира ПК
5 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Vba word работа с таблицами

Vba word работа с таблицами

Здравствуйте, kas1830, Вы писали:

K>Но в этом случае три значения выводятся не в одну строку, а в три, разделенные возвратом каретки.
K>Как склеить значения в одну строку?
Очевидно, надо убрать возвраты каретки. 🙂

Здравствуйте, ZAMUNDA, Вы писали:
ZAM>Очевидно, надо убрать возвраты каретки.

Спасибо. Но самое интересное в том, что необходимо вырезать не один последний символ, а два,
тогда склеивание строк в итоговой ячейке отрабатывается как надо. Дело в том, что в конце каждой ячейки присутствует
спецсимвол, который, вероятно, обозначает ее конец. Так что и его вырезать надо.

И еще один вопрос вдогонку:
два файла находятся в одной директории. Как мне в коде сослаться на второй документ (в этой же директории) без указания полного пути?
В одной из САПР VBA поддерживал следующий тип записи —

точка и слеш указывали на то, что файл находится в той же директории. В VBA для Word я не нашел такого.

И вот еще вопрос:
необходимо запустить процедуру из другого документа.
Пробую что-то типа

но не прокатывает. Процедура находится в ThisDocument. Как до нее достучаться?

Здравствуйте, kas1830, Вы писали:

K>два файла находятся в одной директории. Как мне в коде сослаться на второй документ (в этой же директории) без указания полного пути?
K>В одной из САПР VBA поддерживал следующий тип записи —

K>точка и слеш указывали на то, что файл находится в той же директории. В VBA для Word я не нашел такого.

Он и сейчас это поддерживает, потому что это свойство файловой системы. Также есть функция CurDir() (и обратная к ней ChDir()), которая может дать ответ, где ищется файл. К тому же, код выполняется в некоем окружении, в котором также есть пути, например, ActiveDocument.Path или thisDocument.Path, и можено самому формировать путь к документу ActiveDocument.Path & «» & «.имя файла».

Здравствуйте, Vi2, Вы писали:

Vi2>Он и сейчас это поддерживает, потому что это свойство файловой системы. Также есть функция CurDir() (и обратная к ней ChDir()), которая может дать ответ, где ищется файл. К тому же, код выполняется в некоем окружении, в котором также есть пути, например, ActiveDocument.Path или thisDocument.Path, и можено самому формировать путь к документу ActiveDocument.Path & «» & «.имя файла».

Спасибо большое! Дельный совет.
А как насчет вопроса с использованием Application.Run.

Здравствуйте, kas1830, Вы писали:

ZAM>>Очевидно, надо убрать возвраты каретки. 🙂
K>Спасибо. Но самое интересное в том, что необходимо вырезать не один последний символ, а два,
K>тогда склеивание строк в итоговой ячейке отрабатывается как надо. Дело в том, что в конце каждой ячейки присутствует
K>спецсимвол, который, вероятно, обозначает ее конец. Так что и его вырезать надо.
Я знаю, я про это уже писал здесь

Здравствуйте, Vi2, Вы писали:

Vi2>ActiveDocument.Path или thisDocument.Path,
Только не надо забывать, что это разные вещи! ActiveDocument это субстанция не постоянная, сделаешь Documents.Open и активным станет свежеоткрытый документ. А ThisDocument это ссылка на документ, в котором находится модуль макроса, т.е. если вызвать функцию из другого документа, то ThisDocument для этой функции уже будет свой.

Vi2>и можено самому формировать путь к документу ActiveDocument.Path & «» & «.имя файла».
ActiveDocument.Path & «» & «имя файла»
🙂

Здравствуйте, kas1830, Вы писали:

K>И вот еще вопрос:
K>необходимо запустить процедуру из другого документа.
K>Пробую что-то типа

K>
Читай внимательнее помощь:

MacroName Required String. The name of the macro. Can be any combination of template, module, and macro name. For example, the following statements are all valid.

Application.Run «Normal.Module1.MAIN»
Application.Run «MyProject.MyModule.MyProcedure»
Application.Run «‘My Document.doc’!ThisModule.ThisProcedure»

Т.е. кавычки и имя модуля ты забыл. И ещё не забывай чтоб процедура была Public. Например если в документ добавишь модуль MMain и напишешь в нём процедуру а затем сохранишь документ с именем «Z:test.doc»; то вызвать эту процедуру можно так:
И не забывай, что Application.Run загрузит документ с вызываемым макросом (если надо), но по окончании своей работы не выгрузит его.

K>но не прокатывает. Процедура находится в ThisDocument. Как до нее достучаться?
ThisDocument.

Таблицы в VBA

Введение:

Вэтой статье мы будем создавать программукоторая будет вставлять в документ Wordтаблицу. Ты конечно же скажешь: —Зачем мне нужна эта программа, если естьстандартная, ничем не хуже этой?, и будешькак всегда не прав. Ведь из этой статьи ты не только пополнишь знания в VBA, но и научишьсяписать и применять на практике ActiveXкомпоненты.

Еслиты совсем не знаком с программированием наVBA, то можешь прочитать мою статью «ИспользованиеUserForm в VBA». В ней дается краткоеописание языка, проводится параллель междуVBA и VB, их сходства и различия.

СозданиеActiveX компонента

Ура. Настала пора писать свой ActiveX компонент.Писать его мы будем на VisualBasic»e. И так,начнем. Запускаем Бейсик, перед вами появляется окно New Project, выбираем в нем»ActiveX Control». Перед вами должна появитсятакая форма:

Она похожа на обычнуюформу у которой свойство BorderStyle = 0 — None. Нуладно, идем дальше. Кидаем сюда текстовоеполе, свойство Text = 1, свойство Locked = True (чтобынельзя было ввести текст в это текстовоеполе). Нижеего ставим две кнопки. Свойство Caption 1 кнопки= » «. Подгоняем размер User Control»a под наши кнопки итекстовое поле. Теперь надопереименовать наш проект и User Control . Дадим имя проекту Mein, UserContol»y»Spin». Ваш ActiveX долженвыглядеть примерно так:

Насталовремя писать программный код. Для началаобъявим переменную в разделе глобальныхобъявлений ActiveX контрола (это послестроки Option Explicit).

После того как мы ее объявили переходим ксобытию Initialize User Control»a, и вводим тудаследующий код:

Private Sub UserControl_Initialize()
Number = 1
End Sub

Здесьмы присваиваем переменной Number значение1. Теперь переходим к событию Click первойкнопки и вводим туда такой код:

Private Sub Command1_Click()
If Number > 1 Then
Number = Number — 1
Text1.Text = Number
End If
End Sub

Принажатии на нее мы проверяем переменную Number,если она больше 1 вычитаем из нее 1, втекстовое поле вставляем значение этойпеременной. В событие Click второй кнопкивставляем код:

Private Sub Command2_Click()
If Number Components > Browse. , открыть папку в которойнаходится нужный OCX и кликнуть по нему 2раза.

Созданиепрограммы для WORD»A

Насталовремя писать программу для Word»a. И так, запустим MsWord, после того как он откроетсяжмем Alt + F11 (или Сервис > Макрос > РедакторVisual Basic). Создаем новую форму (Insert > UserForm илина аналогичный значок в инструментах).Присваиваем ей имя (свойство Name) frmTables,выставляем свойство Сaption = «Созданиетаблицы» Теперь нам надо извлечь нашранее написанный ActiveX компонент и поместитьна нашу форму. Для этого в окне Toolbox на какой ни будьиз вкладок (обычно это вкладка Controls)нажимаем правой кнопкой мыши и выбираемAdditional Controls. перед вами должно открытьсяокно со всеми зарегистрированными всистеме ActiveX компонентами, в нем выбираем нашОСХ»сик (если вы все сделали как написановыше он должен называться Mein.Spin) и жмемкнопку OK. После этого в окне Toolbox долженпоявиться новый инструмент, и выглядеть ондолжен так(я его выделил красным цветом):

Кидаемдва таких инструмента на нашу форму, одинпод другим, слева от них ставим лейблы, вверхней метке свойство Caption = «Числостолбцов», в нижней «Число строк».Ниже всего этого ставим две кнопки, уверхней свойство Name = cmdNewTables, свойство Caption = «Создать таблицу», у нижнейсоответственно Name = «cmdCancel», Caption = «Отмена». С права можно поместить лейблс описанием программы. У вас должнополучится примерно так:

Читать еще:  Создание гиперссылки в word

Синтерфейсом программы разобрались, а это,поверь мне читатель, совсем не мало.Приступаем к завершающей стадии нашейстатьи, пишем программный код нашейпрограммы. Он совсем не сложный благодарятому что мы используем ActiveX компоненты. Итак, начнем, перед этим слегка закатимрукава, так на всякий случай, чтобы немешали :))). Кликаем два раза по кнопке cmdNewTables и вносим туда такой код:

Private Sub cmdNewTables_Click()
Dim myrange
Set myrange = ActiveDocument.range(0, 0)
Selection.Tables.Add range:=myrange, NumRows:=Spin2.Number,_ NumColumns:=Spin1.Number
Selection.Collapse Direction:=wdCollapseEnd
Unload Me «выгружае наше окно
End Sub

Ондостаточно прост и я не буду заострятьвнимание на каждой строке программы (еслиты что-то не понятно можешь посмотретьсправку, в ней все подробно описано), а лишьобъясню подключение нашего ActiveX компонента,вернее двух его экземпляров.

Дляэтого еще раз всмотритесь в строку Selection.Tables.Addrange:=myrange, NumRows:=Spin2.Number, NumColumns:=Spin1.Number .Вспомните переменную Number которую мыобъявляли в области глобальных объявленийнашего ActiveX компонента. Когда мывставляем таблицу в документ намнеобходимо указать количество строк (NumRows) иколичество столбцов (NumColumns) в создаваемойтаблице, для этого мы использовали значениепеременной Number. Теперь напишем кодкнопки cmdCancel, он очень прост:

Private Sub cmdCancel_Click()
Unload Me «выгрузить это окно
End Sub

Осталсяпоследний штрих — вынести нашу программу напанель инструментов MS Word»а. Для этогосоздаем новый модуль(он создаетсяаналогично форме, даем ему имя modTables. Ивписываем в него следующий код:

Послечего закрываем редактор VBA и переходим вокно Word»a. Заходим в Сервис>Настройка>переходим в раздел «Команды» в окне «Категории»находим «Макросы» и в окне «Команды»находим (если вы все сделали как былонаписано выше) Normal.modTables.modTablesCount . Щелкаем поэтой надписи и не отпуская левой кнопкимыши тащим ее на удобную для вас панельинструментов и отпускаем. Получившуюсякнопку можно отредактировать, поменять вней надпись, использовать картинку. Дляэтого достаточно нажать правую кнопку мыши,над нашей кнопкой, главное чтобы при этойоперации было открыто окно «Настройка»иначе ничего не получится.

Послередактирования кнопки закрываем окно «Настройка»и жмем по новой кнопке. Если все сделалиправильно, должно открыться окно которое мыделали выше.

Vba word работа с таблицами

Некоторые «фокусы» при работе стаблицами в VBA for MS Word

Предисловие
В настоящее время основная часть документооборота происходит в документах MS Word и многие из них содержат таблицы. Иногда просто необходимо представить данные из удаленной базы данных (MS SQLServer, DB2, Oracle и т.д.), в связи с чем приходится решать проблемы скорости импортирования данных из БД в документы MS Word.

Постановка задачи

Сформулируем задачу: необходимо импортировать данные, находящиеся на MS SQLServer 6.5, в документ MSWord, и будем использовать Visual Basic for Application для решения данной проблемы. Многие знают, что данную операцию можно выполнить средствами MSWord, не прибегая к помощи VBA (если вызвать панель базы данных и самим создавать источники базы данных и, используя средства MSQuery, строить запросы к БД), но не многие пользователи обладают достаточными знаниями для настроек источников БД (Data Source) и, конечно, не многие знают, какую необходимо вызвать хранимую процедуру (Stored Procеdure) и какие указать параметры для получения необходимой информации. В связи с этим программистам приходится решать эти проблемы с помощью VBA. Будем считать, что у нас на сервере инсталлирован MS SQLServer 6.5, на котором находится некоторая БД, и на машине клиента установлен ODBC. Клиент имеет свой Login на сервере (авторизация происходит на уровне сервера), и для него настроены все права (permissions) для доступа к данным (таблицам, хранимым процедурами т.д.).

«Общие приготовления»

В MicroSoft Visual Basic создадим форму UserForm для ввода некоторых параметров и сделаем так, что она будет сразу вызываться при запуске макроса:
Sub mine()
UserForm.Show
End Sub

Допустим, форма имеет следующий вид:

Как видно, форма имеет поля редактирования для ввода имени и пароля клиента (эти данные будут использоваться для подключения к серверу БД через ODBC) и возможность ввода и выбора реквизитов, которые будут использоваться как параметры вызываемой хранимой процедуры. Таким образом, мы будем вызывать хранимую процедуру на сервере с указанием необходимых параметров (но так как вызов хранимой процедуры осуществляется посредством обычного SQL, то возможно также исполнение SELECT-конструкций).

Первый «страшный» подход

Попробуем решить проблему, не зная досконально VBA for MSWord, и первым делом приходит в голову идея создать таблицу, выполнить запрос и после получения данных заполнить каждую ячейку таблицы (конечно же, используя циклы). Вот код исполнения данного «замысла»:
Задаем строку для подключения к БД, где:
ODBC — указывает на то, что подключение к серверу будет производиться через ODBC, а не через ядро Microsoft Jet
DSN — имя DataSource добавленного в ODBC Manager
UID — имя пользователя
PWD — пароль
Database — имя БД на сервере

connstring = «ODBC;DSN=mssql;UID=» + strUID + «;PWD=» + strPassword + «;Database=budget»

Dim dbs As Database
Dim qdf As QueryDef
Dim rst As Recordset

Открываем БД на сервере
Set dbs = OpenDatabase(«mssql», _
dbDriverNoPrompt, True, _
connstring)

Set qdf = dbs.CreateQueryDef(«»)

Задаем параметры объекта RecordSet (sqlstring — SQL-конструкция типа «EXEC sp_p_returndata» либо «SELECT * from . «)
With qdf
.Connect = connstring
.Sql = sqlstring
Set rst =.OpenRecordset()
If rst.RecordCount = 0 Then
MsgBox («Данные отсутствуют»)
GoTo Error
End If
End With

ActiveDocument.PageSetup.Orientation = wdOrientLandscape
Set myrange = ActiveDocument.Range(Start:=0, End:=0)

Создаем таблицу в документе (заранее известно, что в таблице будет 23 колонки — параметр NumColumns)

ActiveDocument.Tables.Add Range:=myrange, NumRows:=rst.RecordCount + 1, NumColumns:=23

Двигаясь по всем ячейкам, заносим данные из RecordSet в таблицу
For I = 2 To rst.RecordCount + 1
For K = 0 To 22
ActiveDocument.Tables(1).Cell(I, K + 1).Range = rst.Fields(K).Value
Next K
rst.MoveNext
Next I

В результате получаем таблицу, заполненную необходимыми данными, где все прекрасно работает, изумительно отформатированную, содержащую точные данные. Но такие мысли греют душу программиста до того момента, пока запрос возвращает не более 100 строк. Но все эти восхищения выполненной работой проходят после того, как вы пытаетесь выполнить запрос, который возвращает 1500 строк (в БД больших предприятий это просто мизерный набор данных). И после того как вы прождете полдня и ничего не увидите, вы поймете, что здесь что-то не так. Тогда программисту остается либо обучать всех пользователей работе с БД в MSWord, что является сущим наказанием, либо искать другие варианты решения проблемы, либо переходить из «программистов в пользователи». Конечно же, существует оптимальное решение проблемы.

Второй «приятный» подход

Теперь обратим взор к Excel. В Excel проблема решена тем, что в нем существует возможность импортирования данных через Range (которая по сравнению с Word показывает рекорд по времени, что логично, так как Excel изначально и разработан для работы с табличными данными). И не верится, что Microsoft «обидела» Word данной возможностью. Теперь приведем текст, который выполняет импорт данных из БД другим методом:

Задаем строку для подключения к БД
connstring = «ODBC;DSN=mssql;UID=» + strUID + «;PWD=» + strPassword + «;Database=budget»

Dim dbs As Database
Dim qdf As QueryDef
Dim rst As Recordset

Открываем БД на сервере
Set dbs = OpenDatabase(«mssql», _
dbDriverNoPrompt, True, _
connstring)

Импортируем данные из БД
With Selection
.Collapse Direction:=wdCollapseEnd
.Range.InsertDatabase Format:=wdTableFormatSimple2, Style:=16, _
LinkToSource:=False,Connection:=connstring, SQLStatement:=sqlstring
End With

Читать еще:  Word поиск по тексту

Как видно, исходный текст уже стал намного короче (чем же не улучшение?). Уже отсутствует «явное» создание таблицы в документе, нет никаких циклов. Если сравнить быстродействие первого примера и второго, то скорость второго просто поражает.
Конечно, интересно, за счет чего это достигается, но пока Microsoft не открыла свои исходные тексты программ, это остается загадкой. Если посмотреть на параметры последнего оператора, то интересным является параметр Style, который позволяет изначально задавать стиль форматирования таблицы, которая получается в результате его выполнения, т.е. нет никакой потребности в вызове оператора ActiveDocument. Tables(1).AutoFormat (a в MS Word этот оператор выполняется довольно долго), что, конечно же, влияет на скорость.

Заключение

Как становится видно, нет пределов совершенствования исходных текстов и применения оптимизации. Но все еще нет совершенства в работе с таблицами в MS Word, и будем надеяться, что в скором времени мы все сможем наслаждаться прекрасными возможностями в работе с таблицами.

Особенности таблицы Word и ее связь с кодом VBA

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

Сообщений [ 7 ]

1 Тема от aap77 07.02.2014 18:13:48

  • aap77
  • генерал-полковник
  • Неактивен
  • Зарегистрирован: 12.09.2011
  • Сообщений: 925
  • Поблагодарили: 242

Тема: Особенности таблицы Word и ее связь с кодом VBA

Здесь я рассказываю об особенностях таблицы Word, как объекта VBA.
1-я особенность: Многие пользователи часто сравнивают таблицу Word с таблицей Excel. Отчасти это верно, и там, и там у них общие основные свойства. Общая схема обеих таблиц в порядке подчинения выглядит так:
Таблица —> Строка (Столбец) —> Ячейка
Дальше начинаются разногласия, в основном из-за разного свойства Range (Область) в объектных моделей программ.
1. В Excel в объект Range может входить набор ячеек, которые не соседствуют между собой, как по горизонтали, так и по вертикали. А в Word это непрерывный поток данных.
Например, условновно мы имеем таблицу, состоящую из 1 строки и 3 столбцов (A1, B1, C1), то при выделении ячеек A1 и C1, Excel включит в объект Range 2-е ячейки A1 и C1, а Word — только A1, т.к. между ними есть разрыв ячека B1.
2. В Excel и в Word есть понятие Cell (Ячейка) и Cells (Ячейки).
В Word Cell и Cells представляются одноименными классами с отдельными свойствами и методами, а в Excel они представлены объектом Range, что дает намного больше преймуществ.
3. Разница получения данных из ячеек.

В Excel мы обращаемся к одному свойству Value и получаем чистый результат. Например, если в ячейке стоит 2, то для дальнейшего использования мы имеем [переменную] = 2, как число, если ячейка имеет общий или числовой формат.

В Word таже ячейка (как и любая ячейка Word) представляет собой текстовую строку с двумя лишними знаками «¶» и «¤»

Пишите мне в эту тему с отдельными вопросами связанными с данной темой. Постепенно буду здесь расмещать более развернутые вопросы.

2 Ответ от Зульфия 14.12.2016 18:11:37

  • Зульфия
  • рядовой
  • Неактивен
  • Зарегистрирован: 14.12.2016
  • Сообщений: 2

Re: Особенности таблицы Word и ее связь с кодом VBA

Добрый день! Буквально два дня изучаю макросы и пытаюсь создать макрос для таблиц. Необходимо применить ко всем таблицам стиль, задать стиль текста, стиль шапки и копирование её на следующих страницах, задать стиль подписи к таблице. Последний пункт вызывает трудности, с остальными более-менее справилась.

3 Ответ от Зульфия 14.12.2016 19:12:10

  • Зульфия
  • рядовой
  • Неактивен
  • Зарегистрирован: 14.12.2016
  • Сообщений: 2

Re: Особенности таблицы Word и ее связь с кодом VBA

Добрый день! Буквально два дня изучаю макросы и пытаюсь создать макрос для таблиц. Необходимо применить ко всем таблицам стиль, задать стиль текста, стиль шапки и копирование её на следующих страницах, задать стиль подписи к таблице. Последний пункт вызывает трудности, с остальными более-менее справилась.

Уточнение, работа идет с Word.

4 Ответ от Boris_R 21.12.2016 09:44:08

  • Boris_R
  • полковник
  • Неактивен
  • Зарегистрирован: 07.08.2012
  • Сообщений: 233
  • Поблагодарили: 110

Re: Особенности таблицы Word и ее связь с кодом VBA

Необходимо применить ко всем таблицам стиль, задать стиль текста, стиль шапки и копирование её на следующих страницах, задать стиль подписи к таблице. Последний пункт вызывает трудности, с остальными более-менее справилась.

Уточнение, работа идет с Word.

По последнему пункту — смотрите в Справке свойства и методы объектов CaptionLabel и CaptionLabels.

5 Ответ от Fck_This 28.12.2016 16:33:24

  • Fck_This
  • генерал-полковник
  • Неактивен
  • Откуда: Минск, Беларусь
  • Зарегистрирован: 13.07.2016
  • Сообщений: 648
  • Поблагодарили: 97

Re: Особенности таблицы Word и ее связь с кодом VBA

Буду признателен, если поделитесь своими знаниями в отношении объединённых ячеек таблицы по вертикали и горизонтали.

6 Ответ от aequit 02.03.2017 15:54:30

  • aequit
  • сержант
  • Неактивен
  • Зарегистрирован: 31.03.2015
  • Сообщений: 12

Re: Особенности таблицы Word и ее связь с кодом VBA

Здравствуйте!
Подскажите, можно ли занести значение в ячейку таблицы Word одной командой, вместо двух:

7 Ответ от yshindin 02.03.2017 16:10:10

  • yshindin
  • генерал-полковник
  • Активен
  • Откуда: Москва
  • Зарегистрирован: 12.05.2012
  • Сообщений: 446
  • Поблагодарили: 170
  • За сообщение: 1

Re: Особенности таблицы Word и ее связь с кодом VBA

Здравствуйте!
Подскажите, можно ли занести значение в ячейку таблицы Word одной командой, вместо двух:

Сообщений [ 7 ]

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

Вы можете помочь в развитии сайта, сделав пожертвование:

Или помочь сайту популярной криптовалютой:

BTC Адрес: 1Pi3a4c6sJPbfF2sSYR2noy61DMBkncSTQ

ETH Адрес: 0x7d046a6eaa1bd712f7a6937b042e9eee4998f634

LTC Адрес: LUyT9HtGjtDyLDyEbLJZ8WZWGYUr537qbZ

DOGE Адрес: DENN2ncxBc6CcgY8SbcHGpAF87siBVq4tU

BAT Адрес: 0x7d046a6eaa1bd712f7a6937b042e9eee4998f634

XRP Адрес: rEb8TK3gBgk5auZkwc6sHnwrGVJH8DuaLh Депозит Tag: 105314946

USDT (ERC-20) Адрес: 0x7d046a6eaa1bd712f7a6937b042e9eee4998f634

Яндекс Деньги: 410013576807538

Вебмани (R ещё работает): R140551758553 или Z216149053852

А тут весь список наших разных крипто адресов, может какой добрый человек пожертвует немного монет или токенов — получит плюсик в карму от нас 🙂 Благо Дарим, за любую помощь!

Похожие темы

Особенности таблицы Word и ее связь с кодом VBA

Любую работу можно сделать несколькими различными способами. В силах человека выбрать наиболее удобный для себя, оптимальный и рациональный. На портале о Microsoft Office Word вы узнаете про: как расставить нумерацию страниц в ворде с рамкой на 15. Если говорить о работе с текстами: написании рефератов, дипломов, статей, редактировании различных документов и оформлении презентаций, то Microsoft Word дает массу возможностей для этого. Наш сайт о Microsoft Office Word даст ответ про: как поместить таблицу на одной странице.

Познакомиться с ними, расширить свои познания о программе или поделиться секретами и хитростями с другими пользователями вы можете на форуме Ворд Эксперт. На портале о Microsoft Office Word вы узнаете про: сохранить документ автоматически.

Здесь собрана основная информация и ответы на наиболее популярные вопросы по работе с приложением. Например, о создании макросов, о колонтитулах, удалении лишних пробелов. На портале о Microsoft Office Word вы узнаете про: как бруть непечатаемые символы в word 2010.

В основных разделах можно обсудить настройки самого Ворда и способы работы с текстом в различных версиях программы. На портале о Microsoft Office Word вы узнаете про: изменить лист на альбомный ворд 2010. Подфорум «Автоматизация» предлагает освоить технику создания макросов и задания шаблонов для различных операций и функций. На портале о Microsoft Office Word вы узнаете про: как расположить страницу альбомно.

Читать еще:  Как отключить автозаполнение в excel

Здесь же на форуме можно найти готовые решения, разнообразные шаблоны, макросы для редактирования таблиц, оглавлений и многое другое. На портале о Microsoft Office Word вы узнаете про: преобразование презентации в word. Возможно и оставить заявку, описав свою проблему в соответствующем подразделе. Если у вас есть какие –то оригинальные идеи и решения – форум лучшее место поделиться ими с другими пользователями Ворда. Наш сайт о Microsoft Office Word даст ответ про: антоним к слову уважаемым.

Макрос создания документов Word по данным таблицы Excel

Макрос предназначен для программного создания документов Word на основе шаблона

(без использования функции слияния в Word)

В прикреплённом к статье архиве находятся 2 файла:

  • шаблон договора в формате Microsoft Word (расширение .dot)
  • файл Excel с макросом

Настройки макроса задаются в коде:

Const ИмяФайлаШаблона = «шаблон.dot»
Const КоличествоОбрабатываемыхСтолбцов = 8
Const РасширениеСоздаваемыхФайлов = «.doc»

При нажатии кнопки запуска макрос на основе шаблона dot создаёт очередной файл, и в этом документе производит замену текста («кода поля») из первой строки файла Excel на значение поля (из очередной строки с данными файла Excel)

Папка для сформированных документов создаётся автоматически, и содержит в имени текущую дату и время
(например, созданная папка будет называться Договоры, сформированные 01-05-2011 в 15-03-24)

Имена создаваемых файлов формируются объединением полей фамилия, имя и отчество, с добавлением расширения doc

PS: Макрос был написан достаточно давно, когда я только начинал изучать VBA, — так что код недостаточно универсален.

Но, в качестве примера, пожалуй, подойдёт (если вам нужен более функциональный макрос, воспользуйтесь универсальной надстройкой (см. ниже))

Ознакомьтесь также с универсальной надстройкой формирования документов по шаблонам,
которая может делать всё тоже самое, что и эта программа,
только в качестве шаблонов могут выступать, помимо документов Word, ещё текстовые файлы, и книги Excel.

В надстройке — много возможностей, и полезных дополнений: склонение ФИО в родительный и дательный падежи, автоматический вывод на печать (с заданным количеством копий), размещение созданных файлов в разных папках, создание и рассылка писем со вложениями, и множество других полезных функций.

По вышеприведённой ссылке программа заполнения документов Word из Excel доступна для бесплатного скачивания.

Внимание: просьбы о доработке макроса, описанного в этой статье, не принимаются.

Есть новая (универсальная) версия, — в которой уже есть практически всё, что может понадобиться.

  • 160302 просмотра

Комментарии

Спасибо, за макрос, не могли бы подсказать что в нем изменить что бы обрабатывалась только та строка в которой выделенная ячейка?

Спасибо за макрос. Очень помог в работе.

Этот макрос уже не поддерживается.
Используйте новую (расширенную) версию программы, — там все работает без ошибок.

Макрос выдает ошибку (Type mismatch (Error 13)) при обработке ячейки с формулой, подскажите пожалуйста как решить эту проблему?

Здравствуйте. Спасибо вам за этот макрос, который помог мне в работе.
Не могли бы вы еще подсказать как сделать чтоб в шаблон Word прописывались данные из нескольких (разных) строк Excel?
Заранее спасибо.

Подскажите. а можно сделать чтобы макрос обрабатывал только те строки в которых стоит номер договора, а если пусто пропускал?

Ознакомился с программой. Серьезный труд. Снимаю шляпу. Но мне понравился именно этот макрос. С колонтитулами я разобрался — оказалось ничего сложного, да и сам макрос оброс уже кучей доработок. Затянуло, знаете ли ))

Евгений, воспользуйтесь универсальной программой для заполнения документов Word — там реализована подстановка значений в колонтитулы

Добрый день! Макрос очень помог в работе. Доделал его немного под свои нужды: вывод в разные шаблоны документов word при разных значениях в excel. Остался один вопрос — в сам документ word текст вставляется отлично, а вот в колнтитулы — нет 🙁 Подскажите, пожалуйста, как это исправить?

Вова, если нет денег на заказ, есть только 2 варианта:
1) разобраться в этих макросах, и сделать самому (благо, примеров подобных макросов в интернете предостаточно)
2) обратиться за помощью на любой из форумов по Excel (но, опять же, если с вашей стороны никаких наработок нет, вряд ли кто сделает всю работу за вас)

А если в етом макросе сделать так чтоби он заменял дание сначла с строки активной ячейки а потом если одна из ячеек следующей строки = ячейке из предедущей строкии снова вставлял в ворд документ заменяемие поля и снова делел замену, и так до момента когда одна из ячеек не будеть раван ячеике из следуищей, строки тогад макрос по ектому условию не вставляет заменяемие поля а просто сохраняет ворд документ. То есь допустим мне нужно создать документ ворд по одному из людей дание по которому есть в нескольких строках. Пожалста помогите очень нужно, просто нет денег на заказ.

Вова, в этом случае универсальное решение сделать не получится — уж слишком много возможных вариантов расположения данных в Excel, и способов заполнения документов Word.
Оформляйте заказ на сайте — сделаю для вас макрос под ваши требования.

Подскажите пожалуйста, как сделать так, чтобы макрос формировал один документ ворд на основании данных из нескольких строк Excel?

А как реализовать те же возможности, только используя функцию слияния в Word. Чтобы каждый новый раз не формировался новый документ а запись делалась на новой странице?

Теперь доступна новая версия универсальной программы формирования документов по шаблонам.

Программа очень удобна для быстрого создания договоров и приказов, заполнения актов и инструкций, печати писем и соглашений, заполнения путевых листов и извещений, распечатки протоколов и соглашений, подстановки данных в шаблоны заявлений и доверенностей.

Количество файлов-шаблонов (Word, Excel, TXT) неограничено.

Бесплатно скачать и протестировать программу можно по этой ссылке:
http://excelvba.ru/programmes/FillDocuments

Замечательно. Я, долгое время искал нечто подобное. Но к счасливой случайности вышел на Ваш сайт. Установил панели для VBA. И ещё коу-что. Практически разобрался в работе данного макроса. В VBA я, недавно. Но поставил перед собой задачу изучить его. Для этого я, решил составить программу для заполнения бланков аттестатов о среднем образовании и бланков дипломов об окончании ПТУ. До этого они заполнялись вручную. Задачу в Excel, я, программно решил, не безВашего в ней участия, некоторые фрагменты кода. У меня база заполняется посредством форм в виде развёрнутого аттестата. А, вот транспортировка данных в Word с листов — разворот и последняя страница. Как-то чуть-чуть не вяжется с общим видом программы. Нельзя-ли макрос транспортировки «засунуть» под форму? Если можно, то не смогли бы Вы посоветовать мне как это сделать. Делаю эту программу потому, что на Украине все мучаются с авторизованым заполнением бланков об окончании учебных заведений. А, так я бы мог бесплатно, это моё безусловное кредо, предоставить программу желающим. Заранее Вам благодарен. Помогая мне Вы помогаете и до того замордованым классным руководителям школ Украины.

можно ли по каждой записи сформировать 2 документа word?

Ссылка на основную публикацию
Adblock
detector