Link word and access

  • Remove From My Forums
  • Question

  • Hello everyone,

    I’m solving a problem with linking ms word with access (2010). Is there any way to link specific cell within query database with e.g. field in ms word document? I think if I update data in specific cell within table/query, it will be changed in word document
    automatically. I found the way to link whole access table/query with word document, but not specific cell with specific place in word document.

    Is here anyone, who can help me please?

    Thanks a lot.

Answers

    • Edited by

      Thursday, September 5, 2013 4:19 AM

    • Marked as answer by
      George123345
      Wednesday, September 11, 2013 8:17 AM
  • Remove From My Forums
  • Question

  • I am having trouble linking MS Word to Access.  What I want to do is insert a field that has data from an access database and then allow an open connection so that if I update the database my word document is updated.

    I am trying to use the built-in tool in MS Word 2007 to select the database, define my query and then retrieve the information.  The problems I’m facing are:

    1. I go to Insert->Quick Parts ->Field -> Database -> Insert Database and define my database and query options.  On the third tab on the Query Options form, «Select Fields,» I select that I only want a single field.  Regardless
    of what I select however, it will always return ALL of the fields.  So even if the only thing in the «Selected Fields:» box is «ID» it will give me back every field in the record!

    2. If, when I press «Insert Data…» I press the «Insert data as field» check box, then I get the error: «Error has occured: Data type and mismatch in criteria expression.»  I have tried to use multiple databases but I
    always get this error.

    3. Ever since I installed the reference, «Microsoft ActiveX Data Objects 2.8 Library» I cannot run a recorded macro to insert a database record.  If I record a macro, insert a database without a live connection.  I can no longer run that
    SAME macro I just ran.  I get the «Data type and mismatch in criteria expression.» and a «word was unable to open the data source» error.

    For completeness my macro is:

       Selection.Range.InsertDatabase Format:=0, Style:=0, LinkToSource:=False, _
            Connection:= _
            «Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=C:Documents and Settingss384313DesktopSampledB.mdb;Mode=Read;Extended Properties=»»»»;Jet OLEDB:System database=»»»»;Jet
    OLEDB:Registry Path=»»»»;Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking» _
            , SQLStatement:= _
            «SELECT `ID`, `Name`, `Action`, `State` FROM `MCTDB` WHERE ((`ID` = ‘2’))» _
             & «», PasswordDocument:=»», PasswordTemplate:=»», WritePasswordDocument _
            :=»», WritePasswordTemplate:=»», DataSource:= _
            «C:Documents and Settingss384313DesktopSampledB.mdb», From:=-1, To:= _
            -1, IncludeFields:=True

    Thanks!

Answers

  • 1. Off the top of my head, try aliasing the table name. It shouldn’t be necessary, but Word can be picky.

            , SQLStatement:= _

            «SELECT [M].[ID], [M].[Name], [M].[Action], [M].[State] FROM [MCTDB] M WHERE (([M].[ID] = 2))» _

    (there’s no real difference between the « and the [] — but the [] always seem clearer to me).

    <<

    I have another problem that’s come up however:  It seems I cannot put these linked values inside of a table.  When I create an updating field and I put it in a table it gives me the error «Error! Not a valid result for a table.» 

    >>

    Unfortunately, the DATABASE field that is generated when you use Includefields:=True does not work inside another table.

    If you look at the current Word UI, you will see that the Database insertion facilities are not in the standard UI — in fact, they have not been there since Word 2003. Arguably, all the mechanisms for inserting data via field codes are now deprecated
    — I mean, you can use LINK fields to get stuff from Excel etc., but they don’t work in as useful way as they used to. The expectation now is that you use 3GL code such as C# or VB.NET to create documents by stuffing data in from outside. Crude, but that’s
    how it is.


    Peter Jamieson

    • Marked as answer by

      Wednesday, December 1, 2010 8:52 AM

Presentation on theme: «Integrating Word, Excel, and Access»— Presentation transcript:

1

Integrating Word, Excel, and Access

2

Objectives Integrate data among Word, Excel, and Access
Import an Excel worksheet into Access Copy a Word table to Access Link an Access table to Excel and Word Link an Access table to Word Microsoft Office 2013-Illustrated Introductory, Windows 7 Edition 2

3

Integrate Data Among Word, Excel, and Access
Integrating data from three programs Enter data into an Access database Make calculations using data in Excel Create Word report that includes Excel data and Access table Importing data from Excel spreadsheet into Access Copy a table from Word into a table in Access Microsoft Office 2013-Illustrated Introductory, Windows 7 Edition 3

4

Integrate Data Among Word, Excel, and Access
Importing Excel worksheet into Access Enter data directly into Access database table Import data from other sources Use Get External Data command Copying Word table into Access Copy and paste into new or existing table in Access Linking Access table to Excel and Word Keeps data current in all three applications Use Copy and Paste Special commands You cannot change structure of linked Access table in Excel Linking Access table to Word You can reformat the linked table in Word Microsoft Office 2013-Illustrated Introductory, Windows 7 Edition 4

5

Integrate Data Among Word, Excel, and Access
Excel data imported to an Access table Microsoft Office 2013-Illustrated Introductory, Windows 7 Edition 5

6

Integrate Data Among Word, Excel, and Access
Word report with links to Excel and Access Microsoft Office 2013-Illustrated Introductory, Windows 7 Edition 6

7

Import an Excel Worksheet into Access
Ways to import Excel data to Access Import Excel data into new Access table Append Excel data to an existing table Options in the Get External Data dialog box Microsoft Office 2013-Illustrated Introductory, Windows 7 Edition 7

8

Import an Excel Worksheet into Access
Changing a field name in an imported table Excel table imported to Access Microsoft Office 2013-Illustrated Introductory, Windows 7 Edition 8

9

Copy a Word Table to Access
Copy table in Word, Paste in Access Source Word table and destination Access table not linked Two methods for adding Word table Paste table into new, blank Access table Paste table into existing Access table Rule for pasting into existing table in Access Word and Access tables must have same number of records Microsoft Office 2013-Illustrated Introductory, Windows 7 Edition 9

10

Copy a Word Table to Access
Selecting the location for copied data Table containing data copied from Word Microsoft Office 2013-Illustrated Introductory, Windows 7 Edition 10

11

Copy a Word Table to Access
Renaming the ID field Microsoft Office 2013-Illustrated Introductory, Windows 7 Edition 11

12

Link an Access Table to Excel and Word
Benefits of linking three programs Reduce amount of data entry Use Copy and Paste Special commands Link Access object and Excel destination file Copy Excel data to Word file Changing data in source Access database Linked data in Excel and Word will update itself Microsoft Office 2013-Illustrated Introductory, Windows 7 Edition 12

13

Link an Access Table to Excel and Word
Copied data formatted in Excel Microsoft Office 2013-Illustrated Introductory, Windows 7 Edition 13

14

Link an Access Table to Excel and Word
Excel data pasted in Word Microsoft Office 2013-Illustrated Introductory, Windows 7 Edition 14

15

Link an Access Table to Excel and Word
Paste options Microsoft Office 2013-Illustrated Introductory, Windows 7 Edition 15

16

Link an Access Table to Word
Paste Access tables directly into Word if Excel is not needed Use Copy and Paste Special tools Data will link between Access and Word Access table can be formatted in Word Opening linked files and enabling content Open linked files in order of creation Broken links occur when linked files are moved to different locations Microsoft Office 2013-Illustrated Introductory, Windows 7 Edition 16

17

Link an Access Table to Word
Completed Word report Microsoft Office 2013-Illustrated Introductory, Windows 7 Edition 17

18

Link an Access Table to Word
Unit B integration tasks Microsoft Office 2013-Illustrated Introductory, Windows 7 Edition 18

19

Summary Integrating data among Word, Excel, and Access
Importing an Excel worksheet into Access Copying a Word table to Access Linking an Access table to Excel and Word Linking an Access table to Word Microsoft Office 2013-Illustrated Introductory, Windows 7 Edition 19

Forum home »
Delegate support and help forum »
Microsoft Access Training and help
» access vba courses — Linking Word with Access

access vba courses — Linking Word with Access

resolvedResolved · Low Priority · Version Standard

Wed 19 Dec 2007, 16:39 Delegate Sarah said…

Linking Word with Access

Is there a way to link a Word text-box/paragraph with a database cell such that the cell is automatically updated with the updated text in the Word document?

For upcoming training course dates see: Pricing & availability

Wed 2 Jan 2008, 11:27 Trainer Pete said…

RE: Linking Word with Access

Hi Sarah, Thank you for your post, There is a way but you will need to create an OLE field in your database table.
1. Open the table in design view, and create a new field with OLE properties.
2. Save the design and change to Datasheet view,
3. Select the new empty field and from the menu choose Insert, Object.
4. Select Microsoft Word Document from the options in the middle box, Select Create From File and using the Browse option select your chosen word document file.
5. Click OK and in the dialog box click the Link box, Click OK. The dialog box will close and you will notice in your field the words; Microsoft Word document.
6, If you double click on the field the document will open in Word, and any subsequent changes in the Word document will be reflected each time you double click on the appropriate field.
Note: if you create a Form the Document will be displayed as a graphic, double clicking the field will again open the document with any changes updated.
I hope that helps, best regards Pete.

TrustPilot

TrustScore
4.8

/ 5
      1783 reviews

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
Option Compare Database
Option Explicit
Dim strPathDot As String, strPathWord As String 'strPathWord-полный путь к документу'
Dim app As Word.Application
 
 
'Вставка текста
Private Sub SelectionText(ByVal SelTxt As Selection, ByVal StrTxt As String, ByVal Bld As Byte, ByVal Otstup As Boolean, Optional ByVal OtstAbsac As Boolean = False)
    With SelTxt
        If Otstup = True Then
            .ParagraphFormat.LeftIndent = 12
        Else
            .ParagraphFormat.LeftIndent = 0
        End If
        Select Case Bld
            Case 1
                .Font.Bold = True
            Case 0
                .Font.Bold = False
        End Select
        If OtstAbsac = True Then
            .ParagraphFormat.SpaceAfter = 3
        Else
            .ParagraphFormat.SpaceAfter = 0
        End If
        .TypeText StrTxt
     End With
End Sub
 
'проверка наличия закладки
Private Function TrueBookmark(ByVal BookmarkName As String, ByVal wa As Word.Document) As Boolean
Dim i As Integer
    For i = 1 To wa.Bookmarks.Count
        If wa.Bookmarks(i).Name = BookmarkName Then
            TrueBookmark = True
            Exit For
        End If
    Next i
End Function
 
'функция выгрузки в Word значений полей формы через закладки в шаблоне
Function funOutputWord(strPathDot As String, strPathWord As String) As Boolean
On Error GoTo Err_
 
Dim DlgUser As Integer, i As Long
 
    'проверяем наличие софрмированного ранее документа
    If Dir(strPathWord) <> "" Then 'если нашелся документ по заданому в strPathWord полному пути (вместе с именем)
        DlgUser = MsgBox("Документ с таким именем ранее уже был создан. Заменить его?", vbYesNo, "admin")
        If DlgUser = vbNo Then 'если пользователь выбрал Нет - то открываем прежний вариант документа
            Set app = CreateObject("Word.Application") 'создаем объект Word, чтобы можно было работать с его методами и свойствами
            With app
                .Visible = True 'запускаем приложение Word
                .Documents.Open strPathWord 'открываем документ (по пути в переменной strPathWord)
            End With
            Set app = Nothing 'уничтожаем переменную
        Else 'если пользователь выбрал Да - то есть согласился перезаписать документ
            GoTo nn 'переходим по метке nn
        End If
    Else 'если не нашлось документа по заданому в strPathWord полному пути
nn:
        Set app = New Word.Application 'делаем ссылку на объект Word для создания нового документа
        app.Visible = True 'запускаем приложение Word
        app.Documents.Add strPathDot 'присоединяем к объекту Word шаблон по заданому пути
        With app.ActiveDocument 'делаем ссылку на активный документ - в данном случае тот что формируется
            'находим закладку по имени в заменяем ее на текст из поля формы
            .Bookmarks.Item("ДатаДоговора").Range.Text = Nz(ДатаДоговора, "")
        .Bookmarks.Item("НомерПриложения").Range.Text = Nz(НомерПриложения, "")
            .Bookmarks.Item("Дата").Range.Text = Nz(ДатаДоговора, "")
            .Bookmarks.Item("НазваниеЖурнала").Range.Text = Nz(Название, "")
            .Bookmarks.Item("НазваниеЖурналаПриложение").Range.Text = Nz(Название, "")
            .Bookmarks.Item("ПорядокРасчета").Range.Text = Nz(ПорядокРасчетов, "")
            '.Bookmarks.Item("НомерДоговора").Range.Text = Nz(НомерДоговора, "")
            .Bookmarks.Item("ДоговорНомер").Range.Text = Nz(НомерДоговора, "")
            .Bookmarks.Item("Итого").Range.Text = Nz(Итогo, "")
            .Bookmarks.Item("Итого1").Range.Text = Nz(Итогo, "")
            .Bookmarks.Item("СуммаПр").Range.Text = Nz(Поле69, "")
            .Bookmarks.Item("СуммаПроп").Range.Text = Nz(Поле69, "")
            ' заполнить таблицу
            Call funOutputTableWordQuery(strPathDot, strPathWord)
                        
            'Чистим незаполненные закладки
            With .Bookmarks
                For i = .Count To 1 Step -1
                    'если имя Bookmark совпадает с его содержимым
                    If .Item(i).Name = .Item(i).Range.Text Then
                        'Удаляем содержимое (вместе с ним удаляется и сама Bookmark)
                        .Item(i).Range.Text = ""
                    End If
                Next i
            End With
 
            .SaveAs strPathWord 'сохраняем созданный документ по заданному пути strPathWord
        End With
        Set app = Nothing 'уничтожаем переменную
    End If
    funOutputWord = True 'ставим флаг успешного выполнения функции
    
Exit_:
    Exit Function
Err_:
    funOutputWord = False
    Err.Clear
    app.Quit
    Resume Exit_
End Function
 
 
Function TextDog(strPathDot As String, strPathWord As String) As Boolean
On Error GoTo Err_
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim i As Long, j As Long, NumStr As Long
 Dim CountRec As Long
 
Set dbs = CurrentDb()
 
           Set rst = dbs.OpenRecordset("ЗапросДог", dbOpenSnapshot)
           'Set rst = CurrentDb.OpenRecordset("QveryWord", dbOpenSnapshot)  'открываем запрос на чтение
            If rst.RecordCount > 0 Then 'если в запросе есть хоть одна строка
        With app.ActiveWindow.Selection 'ставим фокус на текущее окно
             
                For i = 0 To rst.Fields.Count - 1 'создаем цикл перебора столбцов запроса
                    If TrueBookmark(rst.Fields(i).Name, .Document) Then
                        .GoTo What:=wdGoToBookmark, Name:=rst.Fields(i).Name  'Перейти на закладку
                        Call SelectionText(app.ActiveWindow.Selection, Nz(rst.Fields(i), ""), 2, False) 'Вставить текст
                    End If
                Next i
               rst.Close 'закрываем рекордсет - при этом автоматически уничтожается и перенменная rst
                
            'Чистим незаполненные закладки
            With .Bookmarks
                For i = .Count To 1 Step -1
                    'если имя Bookmark совпадает с его содержимым
                    If .Item(i).Name = .Item(i).Range.Text Then
                        'Удаляем содержимое (вместе с ним удаляется и сама Bookmark)
                        .Item(i).Range.Text = ""
                    End If
                Next i
            End With
    
            app.ActiveDocument.SaveAs strPathWord 'сохраняем созданный документ по заданному пути strPathWord
        End With
        Set app = Nothing
    End If
    
    TextDog = True 'ставим флаг успешного выполнения функции
    
Exit_:
    Exit Function
Err_:
    TextDog = False
    Err.Clear
    app.Quit
    Resume Exit_
End Function
 
 
 
'функция выгрузки в Word значений полей запроса через закладки в шаблоне
Function funOutputWordQuery(strPathDot As String, strPathWord As String) As Boolean
On Error GoTo Err_
 
 
 
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim i As Long, j As Long, NumStr As Long
 Dim CountRec As Long
Set dbs = CurrentDb()
 Dim i As Long
Dim DlgUser As Integer
 
    'проверяем наличие софрмированного ранее документа
    If Dir(strPathWord) <> "" Then 'если нашелся документ по заданому в strPathWord полному пути (вместе с именем)
        DlgUser = MsgBox("Документ с таким именем ранее уже был создан. Заменить его?", vbYesNo)
        If DlgUser = vbNo Then 'если пользователь выбрал Нет - то открываем прежний вариант документа
            Set app = CreateObject("Word.Application") 'создаем объект Word, чтобы можно было работать с его методами и свойствами
            With app
                .Visible = True 'запускаем приложение Word
                .Documents.Open strPathWord 'открываем документ (по пути в переменной strPathWord)
            End With
            Set app = Nothing 'уничтожаем переменную
        Else 'если пользователь выбрал Да - то есть согласился перезаписать документ
            GoTo nn 'переходим по метке nn
        End If
    Else 'если не нашлось документа по заданому в strPathWord полному пути
nn:
        Set app = New Word.Application 'делаем ссылку на объект Word для создания нового документа
        app.Visible = True 'запускаем приложение Word
        app.Documents.Add strPathDot 'присоединяем к объекту Word шаблон по заданому пути
        With app.ActiveWindow.Selection 'делаем ссылку на активный документ - в данном случае тот что формируется
           Set rst = dbs.OpenRecordset("QveryWord", dbOpenSnapshot)
           'Set rst = CurrentDb.OpenRecordset("QveryWord", dbOpenSnapshot)  'открываем запрос на чтение
            If rst.RecordCount > 0 Then 'если в запросе есть хоть одна строка
                For i = 0 To rst.Fields.Count - 1 'создаем цикл перебора столбцов запроса
                    If TrueBookmark(rst.Fields(i).Name, .Document) Then
                        .GoTo What:=wdGoToBookmark, Name:=rst.Fields(i).Name  'Перейти на закладку
                        Call SelectionText(app.ActiveWindow.Selection, Nz(rst.Fields(i), ""), 2, False) 'Вставить текст
                    End If
                Next i
               rst.Close 'закрываем рекордсет - при этом автоматически уничтожается и перенменная rst
            End If
            'если в шаблоне нужно заполнить таблицу - запускаем соответсвующую функцию
            'если заполнять таблицу не нужно - убираем эту строку
           ' Call funOutputTableWordQuery(strPathDot, strPathWord)
    
            'Чистим незаполненные закладки
            With .Bookmarks
                For i = .Count To 1 Step -1
                    'если имя Bookmark совпадает с его содержимым
                    If .Item(i).Name = .Item(i).Range.Text Then
                        'Удаляем содержимое (вместе с ним удаляется и сама Bookmark)
                        .Item(i).Range.Text = ""
                    End If
                Next i
            End With
    
            app.ActiveDocument.SaveAs strPathWord 'сохраняем созданный документ по заданному пути strPathWord
        End With
        Set app = Nothing
    End If
    
    funOutputWordQuery = True 'ставим флаг успешного выполнения функции
    
Exit_:
    Exit Function
Err_:
    funOutputWordQuery = False
    Err.Clear
    app.Quit
    Resume Exit_
End Function
 
Private Sub butExit_Click()
    DoCmd.Close 'закрываем форму
End Sub
 
Private Sub butWord_Click()
    'запускаем функцию выгрузки в Word из полей формы
    Call funOutputWord(strPathDot, strPathWord)
End Sub
 
Private Sub butWordQuery_Click()
    'запускаем функцию выгрузки в Word из запроса
    Call funOutputWordQuery(strPathDot, strPathWord)
End Sub
 
'функция выгрузки в Word из запроса в таблицу
Function funOutputTableWordQuery(strPathDot As String, strPathWord As String) As Boolean
On Error GoTo Err_
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim i As Long, j As Long, NumStr As Long
 Dim CountRec As Long
 Set dbs = CurrentDb()
Set rst = dbs.OpenRecordset("Запрос2", dbOpenSnapshot) 'открываем запрос для перебора столбцов
CountRec = rst.RecordCount 'определяем число строк в запросе
     With app.ActiveWindow.Selection 'ставим фокус на текущее окно
           If CountRec > 0 Then 'смотрим, чтоб не пустой запрос
            rst.MoveLast 'переходим в конец набора строк - тем самым они гарантированно загружаются в переменную rstTable
            rst.MoveFirst 'возращаемся в начало набора строк
            If TrueBookmark("NZ", .Document) Then 'если есть закладка
                .GoTo What:=wdGoToBookmark, Name:="NZ" 'Перейти на закладку ZT - начало втыкания данных в таблицу
            End If
            'запоминаем номер строки таблицы где стоит начальная закладка
            j = .Information(wdEndOfRangeRowNumber)
            If CountRec > 1 Then
                'Вставим необходимое количество строк
                .InsertRowsBelow CountRec - 1
            End If
            'Заполняем таблицу данными из запроса
             NumStr = 1
            Do While Not rst.EOF 'Запускаем цикл перебора столбцов запроса
                For i = 0 To rst.Fields.Count - 1
                'MsgBox (rst.Fields(i).Name)
                    If rst.Fields(i).Name = "НомерСтроки" Then 'если в запросе будет столбец с именем NumStr - то вместо него в ячейку таблицы встанет порядковый номер записи
                        .Tables(1).Cell(j, i + 1).Range = NumStr
                    Else
                        'Заполняем таблицу по координатам: номер столбца, номер строки
                        .Tables(1).Cell(j, i + 1).Range = Nz(rst.Fields(i), "")
                    End If
                Next i
                rst.MoveNext 'переходим на следующую запись
                NumStr = NumStr + 1 'увеличиваем номер по порядку
                j = j + 1 'увеличиваем номер координаты ячейки (номер столбца)
            Loop
        End If
        rst.Close 'закрываем рекордсет - при этом автоматически уничтожается и перенменная rstTable
    End With
    funOutputTableWordQuery = True 'ставим флаг успешного выполнения функции
    
Exit_:
    Exit Function
Err_:
    funOutputTableWordQuery = False
    Err.Clear
    Resume Exit_
End Function

Понравилась статья? Поделить с друзьями:
  • Link to sql server from excel
  • Link to pages in excel
  • Link to page in word document
  • Link to other excel files
  • Link to image in excel