Add an Image to Word Document and Scale it using VBA

ms-word, vba

Solution

Well, first we need to clean up your code a bit, like below. This runs fine on my site - it places the image right at the front of the GraphicImage bookmark, not at the top of the document - but maybe your image is so large it extends to the top?

Dim objWdRange As Word.Range
Dim GraphImage As String
Dim shortString As String
shortString = Range("short").Value '? don't know what this is for
GraphImage = "http://xxx.xxxxx.com/xxx/xxx.png?instrument=Image.png"
wrdApp.Visible = True
    Set wrdDoc = wrdApp.Documents.Open("C:\Program Files\My Dropbox\dailystrategy.doc")
    Set objWdRange = wrdDoc.Content '? don't know what this is for
    With wrdDoc
        If .Bookmarks.Exists("shortString ") Then
           .Bookmarks("shortString ").Range.Text = shortString
        End If
     If .Bookmarks.Exists("GraphImage") Then
         Dim wrdPic As Word.InlineShape
         Set wrdPic = .Bookmarks("GraphImage").Range.InlineShapes.AddPicture(FileName:=GraphImage, LinkToFile:=False, SaveWithDocument:=True)
         wrdPic.ScaleHeight = 50
         wrdPic.ScaleWidth = 50
     End If
       .SaveAs "c:\temp\test.doc"
    End With
    wrdDoc.Close
    Set wrdDoc = Nothing
    wrdApp.Quit
    Set wrdApp = Nothing

EDIT: Jan 11, 2010 The above code was changed to include

 If .Bookmarks.Exists("GraphImage") Then
 Dim wrdPic As Word.InlineShape
 Set wrdPic = .Bookmarks("GraphImage").Range.InlineShapes.AddPicture(FileName:=GraphImage, LinkToFile:=False, SaveWithDocument:=True)
    wrdPic.ScaleHeight = 50
    wrdPic.ScaleWidth = 50
 End If

This sets the picture as an object and then uses the scaling methods `ScaleHeight` and `ScaleWidth` to make it 50% smaller in both height and width.

Problem

how do i programatically add an image using VBA to a word document. I've tried adding a bookmark to the word document and tried adding the image, but it always adds to the top of the form rather than the bookmark area. Should i persevere with the bookmark or is there another way to add the image? See my code below: ``` Dim wrdApp As Word.Application Dim wrdDoc As Word.Document Set wrdApp = CreateObject("Word.Application") Dim objWdRange As Word.Range Dim GraphImage As String Dim shortString As String shortString = Range("short").Value GraphImage = "http://xxx.xxxxx.com/xxx/xxx.png?instrument=Image.png" wrdApp.Visible = True Set wrdDoc = wrdApp.Documents.Open("C:\Program Files\My Dropbox\dailystrategy.doc") Set objWdRange = wrdDoc.Content With wrdDoc If wrdDoc.Bookmarks.Exists("shortString ") Then wrdDoc.Bookmarks("shortString ").Range.Text = shortString End If If wrdDoc.Bookmarks.Exists("GraphImage") Then wrdDoc.Bookmarks("GraphImage").Range.InlineShapes.AddPicture Filename:=GraphImage, LinkToFile:=False, SaveWithDocument:=True End If wrdDoc.SaveAs "c:\temp\test.doc" ' close the document Set wrdDoc = Nothing Set wrdApp = Nothing End With ``` regards

Original source