04. Данный пример показывает как можно создать таблицу в Microsoft Word, используя vba в Word. При этом создается соединение внутри документа Word. Обратите внимание, что функция InsertDatabase отличается параметрами в разных версиях офиса.
Option Compare Database Option Explicit '#Const AccessVer = 2000 '#Const AccessVer = 2002 #Const AccessVer = 2003 '*************************************************************** '04.Пример. Как создать таблицу в документе Word ? '*************************************************************** '============================================================== ' Создание таблицы в документе Word ' --------------------------------- ' Для этого Вы должны создать в шаблоне la_automat.dot ' закладку с имеенем Таблица. Например, ' Вставка - Закладка ... - Имя закладки=Таблица ' (Нажмите кнопку Добавить и сохраните шаблон) ' Private Sub butNewWord_Click() Dim app As Word.Application 'Приложение программы Dim strDOC As String ' Имя документа Dim strDOT As String ' Имя шаблона Dim strMDB As String ' Имя базы данных Dim rng As Word.Range ' Область данных Dim tbl As Word.Table ' Таблица документа Dim c As Word.Cell ' Ячейка таблицы Dim i As Long ' Переменная On Error GoTo 999 ' Определяем имена шаблона, документа и базы данных With Application.CurrentProject strDOT = .Path "" "la_automat.dot" strDOC = .Path "" "la_automat.doc" strMDB = .Path "" .Name End With ' Управление документом Word Set app = New Word.Application 'Новое приложение Word app.Visible = True 'Отображаем документ app.Documents.Add strDOT 'Добавляем шаблон ' Выбираем закладку (позицию) таблицы Set rng = app.ActiveDocument.Bookmarks("Таблица").Range With rng .Collapse wdCollapseEnd ' Вставляем таблицу, используя запрос из базы данных #If AccessVer = 2000 Then .InsertDatabase _ Style:=191, _ LinkToSource:=False, _ Connection:="Query ЗапросПримера04", _ DataSource:=strMDB #ElseIf AccessVer = 2002 Then .InsertDatabase Format:=0, Style:=0, LinkToSource:=False, _ Connection:= _ "Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=" strMDB ";Mode=Read;Extended Properties="""";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet OLEDB:Engi" _ , SQLStatement:="SELECT * FROM `ЗапросПримера04`" "", PasswordDocument _ :="", PasswordTemplate:="", WritePasswordDocument:="", _ WritePasswordTemplate:="", DataSource:= _ strMDB, From:=-1, To:=-1, _ IncludeFields:=True #Else .InsertDatabase Format:=0, Style:=0, LinkToSource:=False, _ Connection:= _ "Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=" strMDB ";Mode=Read;Extended Properties="""";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet OLE" _ , SQLStatement:="SELECT * FROM `ЗапросПримера04`" "", PasswordDocument _ :="", PasswordTemplate:="", WritePasswordDocument:="", _ WritePasswordTemplate:="", DataSource:= _ strMDB, From:=-1, To _ :=-1, IncludeFields:=True #End If i = .Tables.Count ' Всего таблиц в данной области Set tbl = .Tables(i) ' Созданная таблица ' Форматируем всю таблицу tbl.Range.Font.Size = 10 ' Выбираем шрифт tbl.AutoFormat wdTableFormatGrid8 ' Выбираем авто-формат ' Вставляем колонку в начало таблицы tbl.Columns.Add tbl.Columns(1) ' Добавляем колонку i = 0 For Each c In tbl.Range.Columns(1).Cells If i Then ' Изменяем данные c.Range.InsertAfter Format(i, "000") ' Вставить данные c.Range.ParagraphFormat.Alignment = wdAlignParagraphRight 'Правый формат Else ' Изменяем заголовок ячейки tbl.Range.Columns(1).Cells(1).Range.Text = "Пункт" End If i = i + 1 Next c ' Форматируем заголовок, т.е. всю строку tbl.Rows(1).Select ' Выбираем заголовок With app.Selection .ParagraphFormat.Alignment = wdAlignParagraphCenter .Font.Name = "Arial" ' Имя шрифта .Font.Size = 10 ' Размер шрифта End With ' Добавляем новую строку tbl.Rows.Add ' Добавляем строку в конец таблицы With tbl.Cell(tbl.Rows.Count, 1) ' Выбираем 1 ячейку строки .Formula "=SUM(ABOVE)" ' Устанавливаем формулу .Shading.BackgroundPatternColorIndex = wdDarkRed ' Назначаем цвет фона .Range.Font.Bold = True ' Толщина (вес) текста End With End With app.ActiveDocument.SaveAs strDOC ' Сохраняем файл ' app.Quit 'Закрываем приложение Exit Sub 999: MsgBox Err.Description 'Ошибка Err.Clear app.Quit End Sub
Всем привет, сегодня мы поговорим о том, как можно выгрузить данные из Access в такие приложения как Word и Excel. Но не о стандартном способе, который есть в Access (связь с Office), а о способе, который позволяет выгружать данные в заданный шаблон как в Word, так и в Excel.
Другими словами, это нужно тогда, когда создать отчет в Access по шаблону, который уже существует, например, в Word, невозможно или слишком трудоемко. Как Вы знаете, отчет в Access может выводиться просто коряво или, самый распространенный вариант, это когда много текста, который в отчете Access не так хорошо форматируется как в Word, а данных не так много, но отчет необходимо автоматизировать, например это какие-то договора, заявления и так далее.
Использование слияния из самого Word-а не очень удобно, поэтому сегодня я расскажу, как можно заполнять такие шаблоны напрямую из Access, путем нажатия на одну кнопку.
Кроме выгрузки в шаблон Word, иногда возникает и необходимость выгрузки в шаблон Excel, и этот способ мы тоже сегодня рассмотрим.
Содержание
- Экспорт данных из Access в шаблон Word
- Код VBA для выгрузки данных в шаблон Word
- Экспорт данных из Access в шаблон Excel
- Код VBA для выгрузки данных в шаблон Excel
Вся разработка делится на две части, это:
- Настройка шаблона Word;
- Настройка выгрузки данных в шаблон.
Суть настройки шаблона заключается в том, чтобы проставить необходимые поля в тех местах шаблона, где нужно выводить те или иные данные. Это делается с помощью полей формы.
Примечание! Я использую Microsoft Word 2003.
Открываем шаблон Word, для начала добавим необходимую панель инструментов, для этого нажимаем «Вид -> Панель инструментов» и ставим галочку «Формы». Теперь у Вас отобразилась панель инструментом «Формы». Все, что осталось сделать — это вставить в местах, в которых необходимо выводить данные, элементы «Текстовое поле», которые доступны на только что добавленной панели инструментов.
После добавления поля, у Вас появится серая область, которая свидетельствует о том, что поле добавлено. Теперь необходимо задать имя этого поля, для того чтобы потом из access вставлять в него значения (стандартное названия не очень удобное). Для этого щелкните правой кнопкой мыши по полю и нажмите «Свойства». В поле закладка напишите желаемое имя этого поля, я в примере назвал его MyTestPole.
Создайте столько полей, сколько Вам нужно.
На этом настройка шаблона закончена, рекомендую сделать этот шаблон только для чтения, а то пользователь возьмет, сформирует документ и сохранит его, и шаблон тем самым потеряется, а если сделать его только для чтения, то у него такой возможности не будет, только сохранять через «Сохранить как».
Переходим к более интересной задачи, это к реализации самой выгрузки из Access в этот шаблон на VBA.
Примечание! Я использую Access в связке с MS SQL 2008, поэтому и данные буду брать от туда.
Код VBA для выгрузки данных в шаблон Word
Допустим, у Вас есть форма, сделайте на ней кнопку (я назвал ее testbutton) и в событие нажатие кнопки вставьте следующий код VBA:
Private Sub testbutton_Click() 'Объявляем переменные Dim FileDialog As FileDialog Dim rsd As ADODB.Recordset Dim strSQL As String Dim WordApOb As Object Dim WordOb As Object Dim path As String Set rsd = New ADODB.Recordset 'запрос к базе данных для получения необходимых данных strSQL = "select * from dbo.table where KOD = " & Me.kod & "" rsd.open strSQL, CurrentProject.Connection 'Выбираем шаблон Set FileDialog = Application.FileDialog(msoFileDialogOpen) 'убираем множественный выбор, он нам не нужен FileDialog.AllowMultiSelect = False 'очистим и установим фильтры FileDialog.Filters.Clear FileDialog.Filters.add "Word", "*.doc" 'установим фильтр по умолчанию FileDialog.FilterIndex = 1 'проверяем, что сделал user, если выбрал шаблон, то начинаем работу If FileDialog.Show = False Then 'Если нет, то выходим Set dlgFile = Nothing Exit Sub End If 'получаем путь к файлу path = Trim(FileDialog.SelectedItems(1)) 'Очистим переменную Set FileDialog = Nothing If path <> "" Then 'Будем отслеживать ошибки On Error GoTo Err_testbutton_Click 'Создаем объект Word Set WordOb = CreateObject("Word.document") 'Задаем нашему документу значение из шаблона Set WordOb = GetObject(path) 'Задаем значение объекту word.Application Set WordApOb = WordOb.Parent 'делаем приложение word видимым WordApOb.Visible = True 'ищем наше поле в шаблоне WordOb.Bookmarks("mytestpole").Select 'задаем ему новое значение из нашего Recordset WordApOb.Selection.TypeText Text:=Nz(rsd.Fields("field").Value, " ") 'и так далее по всем полям 'в конце перейдем на начало нашего документа WordApOb.Selection.Goto wdGoToFirst 'и активируем его WordApOb.Activate 'Очистим переменные Set WordOb = Nothing Set WordApOb = Nothing Exit_testbutton_Click: Exit Sub Err_testbutton_Click: MsgBox Err.Description 'в случае ошибки будем делать следующие 'закроем word без сохранения WordOb.Close (wddonotsavechanges) WordApOb.Quit 'и также очистим переменные Set WordOb = Nothing Set WordApOb = Nothing Resume Exit_testbutton_Click End If End Sub
Код прокомментирован, поэтому сложностей возникнуть не должно. Здесь весь смысл сводится к созданию объекта word.document и word.application. А после мы уже работаем с нашими объектами, т.е. заполняем их.
Экспорт данных из Access в шаблон Excel
В шаблоне Excel уже не нужно создавать поля как в Word, так как здесь мы уже будем ориентироваться по адресам ячеек.
Существует несколько способов, как заполнять Excel шаблон, я опишу два, первый — это тогда, когда Вам просто необходимо проставить несколько полей, т.е. в источнике данных будет всего одна строка с несколькими столбцами. Второй — это когда строк будет уже несколько, причем Вы не знаете, сколько именно (в зависимости от каких то условий). В шаблоне по умолчанию отведено для этого все пару строк, поэтому мы будем нужные нам строки добавлять, для того чтобы наши данные не накладывалась на строки ниже (допустим там примечание, подпись руководителя и т.д.). И совет, я здесь, для примера, использую всего один источник данных, а Вы, если Вам необходимо заполнить шапку, примечание и некое количество строк (т.е. область данных), можете использовать несколько источников (Recordset).
Код VBA для выгрузки данных в шаблон Excel
Сначала добавьте кнопку на форму (я ее назвал testexcel) и вставьте следующий код в событие «Нажатие кнопки».
Private Sub testexcel_Click() 'Объявляем переменные Dim XL As Object Dim XLT As Object Dim newrow As Object Dim rsd As ADODB.Recordset Dim strSQL As String Set rsd = New ADODB.Recordset 'Запрос к базе данных strSQL = "select * from dbo.table where kod = " & Me.kod & "" rsd.open strSQL, CurrentProject.Connection 'Создаем необходимые объекты Set XL = CreateObject("Excel.Application") 'для примера показываю, как можно сразу загружать шаблон без выбора Set XLT = XL.Workbooks.open("C:testfile.xls") '1 способ - если в источнике данных всего одна строка With XLT.Worksheets("Лист1") .[a1] = rsd.Fields("field1") .[b1] = rsd.Fields("field2") .[c1] = rsd.Fields("field3") .[d1] = rsd.Fields("field4") End With '2 способ - если строк в источнике несколько 'причем мы учтем то, что у нас есть шапка и примечание в Excel 'и мы не знаем, сколько строк у нас вставится 'и поэтому строки будем добавлять в случае необходимости 'зададим, с какой строки будем начинать вставлять данные Rowss = 10 'для нумерации numrow = 1 'запускаем цикл, он будет работать до тех пор, пока не закончатся строки в нашем источнике While Not (rsd.EOF) 'смотрим, если строк больше чем мы задали в шаблоне If Rowss >= 12 Then 'то добавляем строку XLT.Worksheets("Лист1").Rows(Rowss).Insert 'Запомним нашу строку Set newrow = XLT.Worksheets("Лист1").Rows(Rowss) 'и вставим туда копию предыдущей строки 'для того если вдруг у вас там есть объединенные ячейки или какие-то нужные данные 'так как новая строка создастся без всяких объединений и значений XLT.Worksheets("Лист1").Rows(Rowss - 1).Copy newrow 'это просто для примера как можно очистить некий диапазон внутри документа 'XLT.Worksheets("Лист1").Range("A10:F10").ClearContents 'динамически формируем адрес нужной ячейки cell = "a" & Rowss 'и задаем ей значение XLT.Worksheets("Лист1").Range(cell) = numrow cell = "b" & Rowss XLT.Worksheets("Лист1").Range(cell) = rsd.Fields("field5").Value 'переходим на следующую строку Rowss = Rowss + 1 'переходим на следующую строку в источнике данных rsd.MoveNext Else 'а это выполняется до тех пор, пока не закончатся заданные строки в шаблоне 'т.е. если строк в источнике всего 1, то в код, который выше мы даже не попадем cell = "a" & Rowss XLT.Worksheets("Лист1").Range(cell) = numrow cell = "b" & Rowss XLT.Worksheets("Лист1").Range(cell) = rsd.Fields("field5").Value Rowss = Rowss + 1 rsd.MoveNext End If 'для нумерации numrow = numrow + 1 'конец цикла Wend 'это просто пример как можно удалить строку целиком 'XLT.Worksheets("Лист1").Rows(20).Delete 'делаем Excel видимым XL.Visible = True 'Очищаем переменные Set XL = Nothing Set XLT = Nothing Set newrow = Nothing End Sub
Здесь я также все подробно прокомментировал, но если есть вопросы, то задавайте их в комментариях к данной статье.
Для сведения, я здесь при создании объекта и Word.Application и Excel.Application использовал позднее связывание, для того чтобы не добавлять необходимые библиотеки и обеспечить совместимость.
Надеюсь, мои примеры Вам помогут!
0 / 0 / 0 Регистрация: 18.11.2011 Сообщений: 41 |
|
1 |
|
18.11.2011, 09:41. Показов 39757. Ответов 74
Пожалуйста, помоги довести базу до ума.
0 |
7267 / 4469 / 288 Регистрация: 12.08.2011 Сообщений: 13,512 |
|
18.11.2011, 09:55 |
2 |
Пожалуйста, помоги Кто-то конкретно должен помочь? Вы к кому обращаетесь? 2.Я не буду против того, чтобы увидеть ваш mdb.
0 |
Модератор 11343 / 4661 / 749 Регистрация: 07.08.2010 Сообщений: 13,512 Записей в блоге: 4 |
|
18.11.2011, 10:26 |
3 |
а где шаблон и форма ПУТЕВКИ1, которую вы вызываете по идее вроде должно бы быть Путевки для навигации и поиска путевок соответственно 3 таблицы(не считая справочников) перечень путешествий туриста —это уже расчетная величина
0 |
0 / 0 / 0 Регистрация: 18.11.2011 Сообщений: 41 |
|
18.11.2011, 14:23 [ТС] |
4 |
Спасибо за оперативные ответы. Прошу прощения за не верно составленный текст просьбы.
0 |
Ameli 2091 / 1167 / 39 Регистрация: 05.11.2009 Сообщений: 1,605 |
||||
18.11.2011, 16:17 |
5 |
|||
Сообщение было отмечено как решение Решение У меня, как и многих других форумчан 2003 офис, и нет возможности открыть accdb, поэтому alvk и просил вас выложить mdb формат. Также просьба перед выкладыванием сжимать бд.
8 |
Ameli 2091 / 1167 / 39 Регистрация: 05.11.2009 Сообщений: 1,605 |
||||||
18.11.2011, 17:14 |
6 |
|||||
Набросала примерчик.
включает защиту формы (все, кроме полей формы). Поэтому смотрите сами, нужна ли она вам Вложения
1 |
0 / 0 / 0 Регистрация: 18.11.2011 Сообщений: 41 |
||
18.11.2011, 18:21 [ТС] |
7 |
|
Большое спасибо за ответ. P.s. в формате mdb сохранить не получается (из-за не совместимости) Вложения
0 |
Ameli 2091 / 1167 / 39 Регистрация: 05.11.2009 Сообщений: 1,605 |
||||||||||
19.11.2011, 13:03 |
8 |
|||||||||
В 2007 офисе не нашла, как создавать элементы управления, тем более в вашем случае их использование не обязательно. Поэтому для вставки данных можно воспользоваться обычными закладками ворда:
У вас закладки были перепутаны, не все добавлены, я их исправила;
Вложения
1 |
0 / 0 / 0 Регистрация: 18.11.2011 Сообщений: 41 |
|
20.11.2011, 21:22 [ТС] |
9 |
Здорово, спасибо!!!
0 |
0 / 0 / 0 Регистрация: 18.11.2011 Сообщений: 41 |
||
21.11.2011, 11:21 [ТС] |
10 |
|
Добрый день!!! Вложения
0 |
shanemac51 Модератор 11343 / 4661 / 749 Регистрация: 07.08.2010 Сообщений: 13,512 Записей в блоге: 4 |
||||
22.11.2011, 13:51 |
11 |
|||
1) как избавиться правильно от ошибки при незаполненном поле (т.е. если, например, поле стоимость не заполнено, то в шаблон ничего не выгружалось (ну или пробел)
1 |
2091 / 1167 / 39 Регистрация: 05.11.2009 Сообщений: 1,605 |
||
22.11.2011, 16:51 |
12 |
|
Или с помощью ф-ии Nz(), которая возвращает пустую строку «» или другое указанное значение, если переменная в скобках = Null. Добавим ее перед каждым обращением к полю формы для вставки в шаблон ворда Вложения
1 |
0 / 0 / 0 Регистрация: 18.11.2011 Сообщений: 41 |
|
23.11.2011, 14:23 [ТС] |
13 |
2.
2. В подчиненной форме формы ТУРИСТЫ необходимо сделать следующее: при двойном нажатии на код путевки открывалась путевка с указанным кодом. Сделала сама. ))))
0 |
0 / 0 / 0 Регистрация: 18.11.2011 Сообщений: 41 |
|
23.11.2011, 15:10 [ТС] |
14 |
теперь у меня возникли следующие вопросы:
0 |
0 / 0 / 0 Регистрация: 18.11.2011 Сообщений: 41 |
|
23.11.2011, 15:46 [ТС] |
15 |
приложила в формате 2003
0 |
0 / 0 / 0 Регистрация: 18.11.2011 Сообщений: 41 |
|
23.11.2011, 20:17 [ТС] |
16 |
с горем на пополам я изменила версии access и word.
0 |
7267 / 4469 / 288 Регистрация: 12.08.2011 Сообщений: 13,512 |
|
24.11.2011, 07:51 |
17 |
Сообщение было отмечено как решение Решение Посмотрите как сделано здесь и продублируйте:
1 |
2091 / 1167 / 39 Регистрация: 05.11.2009 Сообщений: 1,605 |
|
24.11.2011, 08:58 |
18 |
Базу данных с ошибкой вы так и не приложили ни в каком формате — ни в 2003, ни в 2007. Мой приложенный пример у меня работает без проблем — ошибки не выскакивают, открывать документ не нужно, он открывается сам, правда свернутый.
0 |
0 / 0 / 0 Регистрация: 18.11.2011 Сообщений: 41 |
|
24.11.2011, 09:49 [ТС] |
19 |
прикрепила
0 |
0 / 0 / 0 Регистрация: 18.11.2011 Сообщений: 41 |
||
24.11.2011, 11:16 [ТС] |
20 |
|
прикрепила в той версии, над которой я сейчас тружусь Вложения
0 |
Всем привет, сегодня поговорим о выгрузки данных из Access в такие приложения как Word и Excel. Но не о стандартном способе, который есть в Access (связь с Office), а о способе, который позволяет выгружать данные в заданный шаблон как в Word, так и в Excel.
Другими словами это нужно тогда когда создать отчеты в Access по шаблону, который уже существует, например, в Word, невозможно или слишком трудоемко или как Вы знаете, может получаться просто коряво или самый распространенный вариант это когда много текста, который в отчете Access не так хорошо форматируется как в Word, а данных не так много, но необходимо автоматизировать, например это какие-то договора, заявления и так далее. Использование слияния из самого Word-а не очень удобно, поэтому я расскажу сегодня, как можно заполнять такие шаблоны напрямую из Access, путем нажатия на одну кнопку. Также как и необходимость выгрузки в шаблон Word, существует и необходимость выгрузки в шаблон Excel, и этот способ мы тоже сегодня рассмотрим.
Начнем с Word.
Вся разработка делится на две части это:
• Настройка шаблона Word;
• Настройка выгрузки данных в шаблон.
Суть настройки шаблона заключается в том, что необходимо проставить необходимые поля в тех местах шаблона, где нужно выводить то или иное поле. Это делается с помощью полей формы.
Открываем шаблон Word, для начала добавим необходимую панель инструментов, для этого нажимаем вид->панель инструментов и ставим галочку «формы». Теперь у вас отобразилась панель инструментом «Формы» все, что осталось сделать это встать на то место где необходимо добавить нужное поле и на панели выбрать «Текстовое поле». После в том месте у Вас появится серая область, которая свидетельствует о том, что поле добавлено. Теперь необходимо задать имя этого поля, для того чтобы потом из access вставлять в него значения (стандартное названия не очень удобное). Для этого щелкните правой кнопкой мы по полю и нажмите «Свойства». В поле закладка напишите желаемое имя этого поля, я в примере назвал его MyTestPole
Создайте столько полей, сколько Вам нужно.
Ну и настройка шаблона закончена, только единственное сделайте этот шаблон только для чтения, а то пользователь возьмет, сформирует документ и сохранит его, и шаблон тем самым потеряется, а если сделать только для чтения, то у него такой возможности не будет только сохранять через «Сохранить как».
Переходим к более интересной задачи это к реализации самой выгрузки из Access в этот шаблон.
Примечание! Я использую Access в связке с MS Sql 2008 поэтому и данные буду брать от туда.
Допустим у Вас есть форма, сделайте на ней кнопку (я назвал ее testbutton) и в событие нажатие кнопки вставьте следующий код:
Private Sub testbutton_Click()
‘Объявляем переменные
Dim FileDialog As FileDialog
Dim rsd As ADODB.Recordset
Dim strSQL As String
Dim WordApOb As Object
Dim WordOb As Object
Dim path As String
Set rsd = New ADODB.Recordset
‘запрос к базе данных для получения необходимых данных
strSQL = «select * from dbo.table where KOD = » & Me.kod & «»
rsd.open strSQL, CurrentProject.Connection
‘Выбираем шаблон
Set FileDialog = Application.FileDialog(msoFileDialogOpen)
‘убираем множественный выбор, он нам не нужен
FileDialog.AllowMultiSelect = False
‘очистим и установим фильтры
FileDialog.Filters.Clear
FileDialog.Filters.add «Word», «*.doc»
‘установим фильтр по умолчанию
FileDialog.FilterIndex = 1
‘проверяем, что сделал user если выбрал шаблон, то начинаем работу
If FileDialog.Show = False Then
‘Если нет то выходим
Set dlgFile = Nothing
Exit Sub
End If
‘получаем путь к файлу
path = Trim(FileDialog.SelectedItems(1))
‘Очистим переменную
Set FileDialog = Nothing
If path <> «» Then
‘Будем отслеживать ошибки
On Error GoTo Err_testbutton_Click
‘Создаем объект Word
Set WordOb = CreateObject(«Word.document»)
‘Задаем нашему документу значение из шаблона
Set WordOb = GetObject(path)
‘Задаем значение объекту word.Application
Set WordApOb = WordOb.Parent
‘делаем приложение word видимым
WordApOb.Visible = True
‘ищем наше поле в шаблоне
WordOb.Bookmarks(«mytestpole»).Select
‘задаем ему новое значение из нашего Recordset
WordApOb.Selection.TypeText Text:=Nz(rsd.Fields(«field»).Value, » «)
‘и так далее по всем полям
‘в конце перейдем на начало нашего документа
WordApOb.Selection.Goto wdGoToFirst
‘и активируем его
WordApOb.Activate
‘Очистим переменные
Set WordOb = Nothing
Set WordApOb = Nothing
Exit_testbutton_Click:
Exit Sub
Err_testbutton_Click:
MsgBox Err.Description
‘в случае ошибки будем делать следующие
‘закроем word без сохранения
WordOb.Close (wddonotsavechanges)
WordApOb.Quit
‘и также очистим переменные
Set WordOb = Nothing
Set WordApOb = Nothing
Resume Exit_testbutton_Click
End If
End Sub
Код прокомментирован, поэтому сложностей возникнуть не должно. Здесь весь смысл сводится к созданию объекта word.document и word.application, конечно же. А после мы уже работаем с нашими объектами, т.е. заполняем их.
Теперь перейдем к Excel.
В шаблоне Excel уже ненужно создавать поля как в Word, так как здесь мы уже будем ориентироваться по адресам ячеек.
Существует несколько способов, как заполнять Excel шаблон, я опишу два, первый это тогда когда Вам просто необходимо проставить несколько полей, т.е. в источнике данных будет всего одна строка с несколькими полями и второй это когда строк будет уже несколько, причем Вы не знаете, сколько именно (в зависимости от каких то условий), но в шаблоне по умолчанию отведено для этого все пару строк, поэтому мы будем нужные нам строки добавлять, для того чтобы наши данные не накладывалась на строки ниже (допустим там примечание, подпись руководителя и т.д.). И совет, я здесь для примера использую всего один источник данных, а вы, если Вам необходимо заполнить шапку, примечание и некое количество строк (т.е. область данных) то для этих задач используйте несколько источников (Recordset).
Форум программистов Vingrad
Модераторы: Akina |
Поиск: |
|
Слияние Access в Word, Выводится только одна запись |
Опции темы |
Artmishin |
|
||||
Новичок Профиль Репутация: нет
|
Необходимо, при нажатии на кнопку передать все записи (по условию фильтра) из Access в Word по готовому шаблону /dot/шаблон.dot при этом сколько записей столько и страниц в документе.
Затем код для кнопки на событие Click
Проблема в том что выводится только одна текущая запись. Что делаю не так подскажите, пожалуйста. |
||||
|
|||||
bopoha |
|
||
Эксперт Профиль
Репутация: 21
|
А где цикл по записям? ——————— Как создавать приложения на MS Access |
||
|
|||
Artmishin |
|
||||
Новичок Профиль Репутация: нет
|
Точно! А слона я и не увидел!
Это сообщение отредактировал(а) Artmishin — 18.8.2010, 06:40 |
||||
|
|||||
bopoha |
|
||
Эксперт Профиль
Репутация: 21
|
Artmishin, а переходить по записям кто будет? Лучше делать так:
——————— Как создавать приложения на MS Access |
||
|
|||
Artmishin |
|
||||
Новичок Профиль Репутация: нет
|
Решил проблему следующим кодом
Добавлено через 7 минут и 14 секунд
|
||||
|
|||||
bopoha |
|
||
Эксперт Профиль
Репутация: 21
|
Не понятно что хотите сделать… ——————— Как создавать приложения на MS Access |
||
|
|||
|
Правила форума «MS Access» | |
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) |
0 Пользователей: |
« Предыдущая тема | MS Access | Следующая тема » |