Я пытаюсь прочитать изображение из поля вложения доступа, а затем вставить его в документ Word. Как показано в приведенном ниже коде, я мог бы прочитать вложение в файл, а затем вставить его в документ Word, но это неэффективно, и мне нужен способ сделать это напрямую. есть идеи?
Option Compare Database
Sub picloader()
Dim appword As Word.Application
Dim doc As Word.Document
On Error Resume Next
Err.Clear
Set appword = GetObject(, "Word.Application")
If Err.Number <> 0 Then
Set appword = New Word.Application
End If
appword.Visible = True
appword.Activate
'word doc to save picture
Set doc1 = appword.Documents.Open("D:\file1.docx")
Dim db As Database
Set db = CurrentDb
Dim picpath As String
Dim people As String
Dim rspictures As Variant
'Dim tmp As Variant
picpath = "D:\file1.jpg"
Dim rs As DAO.Recordset
people = "select * from persons"
Set rs = CurrentDb.OpenRecordset(people)
If Not (rs.EOF And rs.BOF) Then
rs.MoveFirst
Set rspictures = rs.Fields("Picture").Value
While Not rspictures.EOF
rspictures.Fields("FileData").SaveToFile (picpath)
rspictures.MoveNext
Wend
End If
Dim wrdPic As Word.InlineShape
Set wrdPic = doc1.Bookmarks("picture").Range.InlineShapes.AddPicture(picpath, LinkToFile:=False, SaveWithDocument:=True)
wrdPic.ScaleHeight = 10
wrdPic.ScaleWidth = 10
Exit Sub
errHandler:
MsgBox Err.Number & ": " & Err.Description
End Sub
Единственный способ поместить изображение прямо в Word — это скопировать/вставить. Или вам нужно преобразовать изображение в памяти в Base 64, затем обернуть его в допустимый Word Open XML в формате плоского файла OPC и вставить его с помощью метода Range.InsertXML.
@yaser Вы говорите, что ваш код работает, но неэффективен? Что в нем неэффективного? В каком масштабе вы делаете это, что эффективность является проблемой?
На мой взгляд, этот вопрос слишком широк. Если вы используете вложения Access, это будет медленным. Access сжимает изображения и не предлагает встроенных функций для удаления этого сжатия без экспорта. Хотя идея Синди хороша, для ее реализации потребуется слишком много кода для ответа здесь.