4

I am working on porting a project in Windows over to OSX. I have overcome issues with VBA for OSX Word 2011 not allowing you to send POSTs to a server and have figured out how to return a string result from an external script. Now I have to insert an image in my Word file from a URL that is built using the return of my external script.

The current attempt is as follows, and works in Windows but crashes Word in OSX:

Selection.InlineShapes.AddPicture FileName:=File_Name, _
    LinkToFile:=False, SaveWithDocument:=True

After doing some research, it looks like MS may have disabled this functionality in OSX as a "security risk". I still need to make it work. Does anybody know of a way within VBA for Office 2011 to make this work, or barring that a workaround? I am trying to avoid writing the image file to the disk if possible.

UPDATE: I have created a Python script for getting the image file from a URL, but I still do not know how to get this image from the Python script into VBA, and from there into the Word document at the location of the cursor. The important bits of the script are below. The image is read in as a PIL object and I can show it using img.show() just fine, but I am not sure what filetype this is or how to get VBA to accept it.

# Import the required libraries
from urllib2 import urlopen, URLError
from cStringIO import StringIO
from PIL import Image

# Send request to the server and receive response, with error handling!
try:
    # Read the response and print to a file
    result = StringIO(urlopen(args.webAddr + args.filename).read())
    img = Image.open(result)
    img.show()

except URLError, e:
    if hasattr(e, 'reason'):    # URL error case
        # a tuple containing error code and text error message
        print 'Error: Failed to reach a server.'
        print 'Reason: ', e.reason
    elif hasattr(e, 'code'):    # HTTP error case
        # HTTP error code, see section 10 of RFC 2616 for details
        print 'Error: The server could not fulfill the request.'
        print 'Error code: ', e.code

Note that in the above, args.webAddr and args.filename are passed to the script using the argparse library. This script works, and will show the image file that I expect. Any ideas on how to get that image into Word 2011 for OSX and insert it under the cursor?

Thanks a lot!

Edit: updated the link to the project since migrating to github.

Community
  • 1
  • 1
Engineero
  • 12,340
  • 5
  • 53
  • 75
  • 1
    Yeah Vba on mac is horror. I'm stuck with some code myself. Hopefully the answer you got, works out for you :) – Kathara Jan 29 '16 at 23:37

1 Answers1

2

Old question, but no answer, and I see the same crash here when the image is at an http URL. I think you can use the following workaround

Sub insertIncludePictureAndUnlink()
' Put your URL in here...
Const theImageURL As String = ""
Dim f As Word.Field
Dim r As Word.Range
Set f = Selection.Fields.Add(Range:=Selection.Range, Type:=wdFieldIncludePicture, Text:=Chr(34) & theImageURL & Chr(34), PreserveFormatting:=False)
Set r = f.Result
f.Unlink
Set f = Nothing
' should have an inlineshape in r
Debug.Print r.InlineShapes.Count
' so now you can do whatever you need, e.g....
r.Copy
Set r = Nothing
End Sub
  • I have yet to test this, but if you have finally solved my problem for me then I will upvote every answer you have ever given! Except that I think they filter upvote bombing, so not really, but I will want to. – Engineero Oct 30 '13 at 20:49
  • It worked! I finally got around to messing with this again, and your workaround fixed my problem. There is still more work to do, but this was a huge help. Thank you! – Engineero Jan 30 '16 at 17:48