A.D. Tejpal
adtp at airtelmail.in
Thu Jun 3 13:41:22 CDT 2010
Arthur, Sample procedure named P_ExportImgAttachmentsToWord() as given below, will export the .jpg type attachments on current record of the form, to destination word document. The images get inserted at pre-existing sequential bookmarks. The bookmarks can be in any alphanumeric series. The first bookmark where insertion of images is required to commence, can be passed as an argument. If starting bookmark is not specified, it defaults to "Pic001". Sample call in click event of form's command button would be as follows (SampleWord.doc is the destination word document located in the same folder that holds the access db. Fatt is the name of control bound to attachment type field): ' Code in form's module: '============================= Private Sub CmdExpToWord_Click() P_ExportImgAttachmentsToWord Me, _ "Fatt", CurrentProject.Path & _ "\SampleWord.doc", "Pic001" End Sub '============================= Note: (a) The bookmarks can be any alphanumeric series. For example, if "Img005" is passed as an argument for starting bookmark, the available images will get inserted at "Img005", "Img006", "Img007" and so on. (b) Simultaneously, copy of each exported image gets stored in the temporary folder. Best wishes, A.D. Tejpal ------------ ' Code in general module '===================================== ' Declarations section Public Const TempFolderName As String = "ZZZTemp" '-------------------------------------------------------- Sub P_ExportImgAttachmentsToWord( _ fm As Access.Form, _ ControlName As String, _ WordDocPath As String, _ Optional StartBkMark As _ String = "Pic001") On Error Resume Next Dim wd As Word.Application Dim rst As DAO.Recordset2 Dim fdAtch As DAO.Field2 Dim fso As FileSystemObject Dim Fpt As String, Cnt As Long Dim DocName As String, FmtString As String Dim BkMark As String, Pfx As String Dim TempFolderPath As String Set fso = New FileSystemObject Pfx = Fn_Prefix(StartBkMark) FmtString = String(Len(StartBkMark) - _ Len(Pfx), "0") Cnt = Val(Mid(StartBkMark, Len(Pfx) + 1)) - 1 ' Set temp folder path ' This temp folder is placed within the folder ' housing this db and will get created if missing. TempFolderPath = CurrentProject.Path & "\" & _ TempFolderName If Not fso.FolderExists(Fpt) Then MkDir Fpt End If Set wd = New Word.Application wd.Documents.Open WordDocPath Set rst = fm.Recordset.Fields( _ fm(ControlName).ControlSource).Value With rst .MoveFirst Do Until .EOF DocName = .Fields("FileName") If DocName Like "*.jpg" Then Cnt = Cnt + 1 BkMark = Pfx & Format(Cnt, FmtString) ' Set path for temp file Fpt = TempFolderPath & "\" & DocName ' Delete any such file if existing fso.DeleteFile Fpt ' Set fdAtch to binary data for the ' attachment component Set fdAtch = .Fields("FileData") ' Save to destn path in temp folder fdAtch.SaveToFile Fpt ' Insert this image file at proper ' bookmark in word doc and exit ' if export not successful Err.Clear wd.Selection.GoTo What:=wdGoToBookmark, _ Name:=BkMark If Err.Number <> 0 Then MsgBox "No more sequential bookmarks available" Exit Do End If wd.Selection.InlineShapes.AddPicture FileName:= _ Fpt, LinkToFile:=False, _ SaveWithDocument:=True End If .MoveNext Loop .Close End With wd.ActiveDocument.Save wd.Quit MsgBox "Images attached to current record " & _ "have been exported to " & _ WordDocPath & vbCrLf & vbCrLf & _ "Copies also extracted to folder " & _ TempFolderName & vbCrLf & _ "(Placed in the main folder housing this db)" Set wd = Nothing Set fdAtch = Nothing Set rst = Nothing Set fso = Nothing On Error GoTo 0 End Sub '----------------------------------------------------- Function Fn_Prefix(ByVal Fdv As Variant) As String ' Returns The Vaue Of Non-Numeric Prefix ' In Field Value Fdv On Error Resume Next Dim Pfx As String, Pos As Integer, Cnt As Integer, Txt As String Pfx = "" Fdv = Fdv & "" If Len(Fdv) > 0 Then Else GoTo ExitPoint End If ' Len(Fdv) > 0 Pos = 1 Do While Pos <= Len(Fdv) If IsNumeric(Mid(Fdv, Pos, 1)) Then Exit Do End If Pos = Pos + 1 Loop If Pos > 1 Then Pfx = Left(Fdv, Pos - 1) End If ' Pos > 1 ExitPoint: Fn_Prefix = Pfx On Error GoTo 0 End Function '============================= ----- Original Message ----- From: Arthur Fuller To: Access Developers discussion and problem solving Sent: Wednesday, June 02, 2010 18:47 Subject: [AccessD] Attachment Data Type I have been playing with the Attachment data type, introduced in Access 2007. Using the samples provided by Helen Fedemma and A.D. Tejpal, I have learned how to perform the basic operations (insert, remove, extract, and open in original app), but now I want to go a step further. Assume a Word document containing bookmarks which are populated from Access code. I have all that working fine. But now I want to auto-populate four new bookmarks (call them Pic1...4) with photos that are stored as Attachments on the Access record of interest. I have no clue how to achieve this. Any help or pointer to a sample will be much appreciated. TIA, Arthur