Letysite.ru

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

Как создать таблицу word vba

Таблицы в 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 = «Отмена». С права можно поместить лейблс описанием программы. У вас должнополучится примерно так:

Синтерфейсом программы разобрались, а это,поверь мне читатель, совсем не мало.Приступаем к завершающей стадии нашейстатьи, пишем программный код нашейпрограммы. Он совсем не сложный благодарятому что мы используем 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 . Щелкаем поэтой надписи и не отпуская левой кнопкимыши тащим ее на удобную для вас панельинструментов и отпускаем. Получившуюсякнопку можно отредактировать, поменять вней надпись, использовать картинку. Дляэтого достаточно нажать правую кнопку мыши,над нашей кнопкой, главное чтобы при этойоперации было открыто окно «Настройка»иначе ничего не получится.

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

Как создать таблицу word vba

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

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

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

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

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

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

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

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

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

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

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

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

Читать еще:  Word application методы 1с

Здравствуйте, 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 Excel – Формируем документы по шаблону

Очень часто бывает такое, что нужно сформировать документы по определенному шаблону, на основе каких-то данных, например, по каждому сотруднику или по каждому лицевому счету. И делать это вручную бывает достаточно долго, когда этих самых сотрудников или лицевых счетов много, поэтому сегодня мы рассмотрим примеры реализации таких задач в Excel с помощью макроса написанного на VBA Excel.

Немного поясню задачу, допустим, нам необходимо сформировать какие-то специфические документы по шаблону массово, т.е. в итоге их получится очень много, как я уже сказал выше, например, по каждому сотруднику. И это нужно сделать непосредственно в Excel, если было бы можно это сделать в Word, то мы бы это сделали через «Слияние», но нам нужно именно в Excel, поэтому для этой задачи мы будем писать макрос.

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

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

Напомню, что на данном сайте тема VBA Excel уже затрагивалась, например, в материале – Запрет доступа к листу Excel с помощью пароля

И так приступим!

Пишем макрос на VBA Excel по формированию документов

Реализовывать нашу задачу будем на примере «Электронной карточке сотрудника» (я это просто придумал:), хотя может такие и на самом деле есть), т.е. документ в котором хранится личные данные сотрудника вашего предприятия, в определенном виде, именно в Excel.

Примечание! Программировать будем в Excel 2010.

И для начала приведем исходные данные, т.е. сами данные и шаблон

Данные.

Лист, на котором расположены эти данные так и назовем «Данные»

Шаблон.

Лист, на котором расположен шаблон, тоже так и назовем «Шаблон»

Далее, нам необходимо присвоить имена полей для вставки, так более удобней к ним обращаться чем, например, по номеру ячейки.

Это делается очень просто, выделяете необходимую ячейку или диапазон, и жмете правой кнопкой мыши и выбираете «Присвоить имя», пишите имя ячейки и жмете «ОК»

Свои поля я назвал следующим образом:

  • ФИО – fio;
  • № — number;
  • Должность – dolgn;
  • Адрес проживания – addres;
  • Тел. № сотрудника – phone;
  • Комментарий – comment.

Код макроса на VBA Excel

Для того чтобы написать код макроса, открывайте на ленте вкладку «Разработчик», далее макросы.

Примечание! По умолчанию данной вкладке в Excel 2010 может и не быть, чтобы ее отобразить нажмите правой кнопкой по ленте пункт меню «Настройка ленты»

затем, в правой области поставьте галочку напротив пункта «Разработчик»

После вкладка разработчик станет отображаться на ленте.

Далее, когда Вы откроете вкладку разработчик и нажмете кнопку «Макросы» у Вас отобразится окно создания макроса, Вы пишите название макросы и жмете «создать».

После у Вас откроется окно редактора кода, где собственно мы и будем писать свой код VBA. Ниже представлен код, я его как обычно подробно прокомментировал:

Теперь осталось выполнить этот макрос, для этого откройте вкладку разработчик->макросы->выполнить наш макрос:

и после выполнения у Вас в той же папке появится вот такие файлы

Вот с таким содержимым:

Для удобства можете на листе с данными создать кнопку и задать ей событие выполнить наш только что созданный макрос, и после чего простым нажатием выполнять этот макрос. Вот и все! Удачи!

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

Объект Word.Table, программная работа с таблицами в документе Word из VBA, автосуммирование

Если в вашем предложении нужно вывести какой-то стандартный документ по утвержденной форме (платежка, кассовый ордер, командировочный отчет и т.п.), то, скорее всего, для форматирования вы будете использовать таблицу. Таблица во многих ситуациях позволяет гарантировать правильное расположение данных в форме относительно друг друга. Многие программисты изначально используют таблицу даже форм, которые на таблицы походи мало (сетку таблицы всегда можно скрыть, а ячейки — слить между собой).

Создание таблицы начинается с того, что в коллекцию Tables (она предусмотрена для объектов Document, Selection и Range) добавляется новый объект Table (в данном случае — с тремя строками и четырьмя столбцами):

Читать еще:  Не печатается текст в word

Set Range1 = ThisDocument.Range(Start:=0, End:=0)

Dim Table1 As Table

Set Table1 = ThisDocument.Tables.Add(Range1, 3, 4)

Затем можно настроить свойства таблицы, например, воспользовавшись методом AutoFormat() (возможности у него — те же, что доступны через меню Таблица -> Автоформат):

Table1.AutoFormat wdTableFormatGrid 5

Чаще всего в итоге нам нужно ввести какие-либо данные в ячейку таблицы. Мы можем добраться до нужной ячейки через объекты Columns и Rows, Selection и Range, однако удобнее всего сделать так:

Мы ввели во первую строку первого столбца значение 10, во вторую строку первого столбца — значение 15, а в третьей строке мы просуммировали значения по всему столбцу. Таблицы Word — это, конечно, не Excel, но при помощи метода Formula() для объекта Cell в таблицу можно вставлять достаточно сложные вычисляемые значения.

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

В этом разделе представлены примеры Visual Basic, связанные с задачами, указанными в следующих разделах. This topic includes Visual Basic examples related to the tasks identified in the following sections.

Создание таблицы, вставка текста и применение форматирования Creating a table, inserting text, and applying formatting

В следующем примере в начало активного документа вставляется таблица из трех строк и трех столбцов. The following example inserts a four-column, three-row table at the beginning of the active document. Параметр For Each. Следующая структура используется для пошагового перехода по каждой ячейке в таблице. The For Each. Next structure is used to step through each cell in the table. В разделе For Each. Next Structure метод InsertAfter объекта Range используется для добавления текста в ячейки таблицы (ячейка 1, ячейка 2 и т. д.). Within the For Each. Next structure, the InsertAfter method of the Range object is used to add text to the table cells (Cell 1, Cell 2, and so on).

Вставка текста в ячейку таблицы Inserting text into a table cell

В примере ниже показано, как вставить текст в первую ячейку первой таблицы в активном документе. The following example inserts text into the first cell of the first table in the active document. Метод Cell возвращает один объект Cell . The Cell method returns a single Cell object. Свойство Range возвращает объект Range . The Range property returns a Range object. Метод Delete используется для удаления существующего текста, а метод InsertAfter вставляет текст «Cell 1, 1». The Delete method is used to delete the existing text and the InsertAfter method inserts the «Cell 1,1» text.

Возвращение текста из ячейки таблицы без возвращения маркера конца ячейки Returning text from a table cell without returning the end of cell marker

В следующем примере показано возвращение и отображение содержимого каждой ячейки в первой строке первой таблицы документа. The following example returns and displays the contents of each cell in the first row of the first document table.

Преобразование существующего текста в таблицу Converting existing text to a table

В примере ниже показано, как вставить текст с разделителями табуляцией в начало активного документа, а затем преобразовать текст в таблицу. The following example inserts tab-delimited text at the beginning of the active document and then converts the text to a table.

Возвращение содержимого каждой ячейки таблицы Returning the contents of each table cell

В следующем примере определяется массив, равный количеству ячеек в первой таблице документа (при условии, что параметр Base 1). The following example defines an array equal to the number of cells in the first document table (assuming Option Base 1). Параметр For Each. Следующая структура используется для возвращения содержимого каждой ячейки таблицы и назначения текста соответствующему элементу массива. The For Each. Next structure is used to return the contents of each table cell and assign the text to the corresponding array element.

Копирование всех таблиц в активном документе в новый документ Copying all tables in the active document into a new document

В этом примере показано, как скопировать таблицы из текущего документа в новый документ. This example copies the tables from the current document into a new document.

Поддержка и обратная связь Support and feedback

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь. Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.

Предисловие
В настоящее время основная часть документооборота происходит в документах 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 — имя БД на сервере

Читать еще:  Поиск пробела в excel

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;U

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

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

Заключение

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

Как вставить таблицу в текст документа Word

Различные способы вставки таблиц из приложения Excel в документы текстового редактора Word.

Создание таблиц в документе стандартными средствами Word

Редактор имеет собственные средства для создания таблиц, которые находятся на вкладке «Вставка». Меню кнопки «Таблицы» позволяет:

— создавать пустые таблицы, размер которых не превышает 8 столбцов и 10 строк;

— вставлять пустые таблицы заданного размера (до 63 столбцов и до 32767 строк);

— преобразовать в таблицу выделенный текст;

— вставить в документ таблицу Excel, в результате чего формируется область, в которой видны названия столбцов, номера строк, названия листов и полосы прокрутки по вертикали и горизонтали;

— вставлять встроенные экспресс-таблицы.

Как вставить таблицу из Excel в Word

Поскольку таблицы, как правило, создаются в приложении Excel, а отчетные документы в текстовом редакторе Word, часто требуется перенос табличных данных из одного приложения в другое. Скопированный в буфер обмена диапазон ячеек может быть вставлен в документ Word с различными параметрами вставки. На вкладке «Главная», в меню кнопки «Вставить» можно выбрать наиболее подходящий вариант, а наводя курсор мыши на иконки можно сразу видеть результат.

В меню кнопки «Вставить» доступен также пункт «Специальная вставка…».

Настроить параметры вставки по умолчанию можно в Параметры/Дополнительно/Вырезание, копирование и вставка.

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

При необходимости периодического переноса таблиц с данными из Excel в Word процесс можно автоматизировать при помощи встроенного в эти приложения языка программирования Visual Basic for Application. В шаблоне исходного документа Word, необходимо создать закладки в тех позициях документа, в которых должны находиться таблицы. На листе рабочей книги Excel необходимо создать таблицу с исходными данными:

1. имена закладок в шаблоне документа Word;

2. адреса или имена копируемых диапазонов ячеек;

3. имена листов, на которых находятся копируемые диапазоны ячеек;

4. расположение копируемой таблицы на странице документа Word после вставки;

5. номер столбца (используется для одновременной вставки изображений в ячейки указанного столбца таблицы).

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

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

Для исключения выхода вставляемых диапазонов за пределы страниц, можно создать закладки и именованные диапазоны таким образом, чтобы шапка таблицы уже находилась в шаблоне заполняемого документа Word, а диапазон ячеек со значениями без шапки подставлялся из Excel.

Кроме копирования таблиц в Excel с последующей вставкой в шаблоны документов Word, надстройка позволяет автоматизировать подстановку изображений. Реализована возможность подстановки фото, сканированных копий и других графических объектов как в произвольные позиции документов Word (в соответствии с созданными закладками), так и в ячейки вставленных таблиц.

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