- 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
-
Edited by
- 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:=TrueThanks!
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
-
Marked as answer by
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
Resolved · 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.
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 |