How do I Select an Object with VBA?

D

DerbyDad03

I am trying to learn how to Select an object in a Word doc via VBA.

Let me give you an example.

First - I know that I can insert this particular object as an Icon
linked to the file, but if someone can tell me why this conversion
code doesn't work, I'm hoping I'll learn something about selecting
objects via VBA. In other words, this question isn't about the best
way to convert an object, it's about how to select an object.

OK, so I have a new document open. I start the recorder and then
perform these steps:

1 - Go to my desktop
2 - Right click a PDF document and select Copy
3 - Go back into the document and use Edit...Paste
4 - Right-click the object and use the PDF Convert option to create a
PDF Icon
5 - Stop the recorder

This produces the following code:

Sub ConvertToIcon()
Application.WindowState = wdWindowStateNormal
Selection.Paste
ActiveDocument.Shapes("Object 2").Select
If Selection.Type <> wdSelectionShape Then
Selection.InlineShapes(1).ConvertToShape.Select
End If
Selection.ShapeRange(1).OLEFormat.ConvertTo ClassType:= _
"AcroExch.Document.7", DisplayAsIcon:=True, IconFileName:= _
"C:\WINDOWS\Installer\{AC76BA86-7AD7-1033-7B44-
A90000000001}\PDFFile_8.ico" _
, IconIndex:=0, IconLabel:="Acrobat Document"
End Sub

Now here's the problem: If I copy another PDF and then run this code,
I get an error related to the object not being found, or it tries to
convert the same object over again, etc. Depending on what I've done
before I run the code, the error will change.

It's obvious that it is not selecting the most recently pasted object
because "Object 2" is hard coded. How do I get the code to select the
last object that was pasted without actually knowing what number that
object is?

Thanks.
 
G

Greg

DD,

In this case you would probably just select the shape in the document and
then run:

Sub Test()
Dim oILShape As InlineShape
Set oILShape = Selection.InlineShapes(1)
oILShape.OLEFormat.ConvertTo ClassType:= _
"AcroExch.Document.7", DisplayAsIcon:=True, IconFileName:= _

"C:\WINDOWS\Installer\{AC76BA86-7AD7-1033-7B44-A90000000001}\PDFFile.ico",
IconIndex:=0, IconLabel:="Acrobat Document"
End Sub

The recorded often adds a lot of superfilous fluff. E.g., there is no need
to covert an InLineShape to a Shape before converting again.

Easier yet would probably be to simply use Edit>Paste Special and paste as
an icon.
 
G

Graham Mayor

Define a range eg as your code

Dim orng As Range
Set orng = Selection.Range 'define a range at the insertion point
orng.Paste 'paste into that range
orng.Select 'select the range
'now you can operate on the selection
If Selection.Type <> wdSelectionShape Then
Selection.InlineShapes(1).ConvertToShape.Select
End If
Selection.ShapeRange(1).OLEFormat.ConvertTo ClassType:= _
"AcroExch.Document.7", DisplayAsIcon:=True, IconFileName:= _
"C:\WINDOWS\Installer\{AC76BA86-7AD7-1033-7B44-A90000000001}\PDFFile_8.ico"
_
, IconIndex:=0, IconLabel:="Acrobat Document"

or if the default paste mode is in-line

Dim orng As Range
Set orng = Selection.Range 'define a range at the insertion point
With orng
.Paste 'paste into that range
'and work with the range rather than the selection
.InlineShapes(1).OLEFormat.ConvertTo ClassType:= _
"AcroExch.Document.7", DisplayAsIcon:=True, IconFileName:= _
"C:\WINDOWS\Installer\{AC76BA86-7AD7-1033-7B44-A90000000001}\PDFFile_8.ico"
_
, IconIndex:=0, IconLabel:="Acrobat Document"
.InlineShapes(1).ConvertToShape 'Are you sure?
End With

--
<>>< ><<> ><<> <>>< ><<> <>>< <>><<>
Graham Mayor - Word MVP


<>>< ><<> ><<> <>>< ><<> <>>< <>><<>

--
<>>< ><<> ><<> <>>< ><<> <>>< <>><<>
Graham Mayor - Word MVP


<>>< ><<> ><<> <>>< ><<> <>>< <>><<>
 
D

DerbyDad03

Graham,

Thanks for the rsponse, but I may be missing something.

I pasted both sets of code into the VBA editor, as is, and got the
same error message at the lines containing InlineShapes(1)

Run-time error '5941'

The requested member of the collection does not exist.

Is there something I should be editing?

I was also wondering if there is way to access the object while it is
still on the clipboard. That way there would be no way VBA would be
confused about what object I am trying to work on.
 
G

Greg Maxey

I will try again since you have apparently not seen my reply on 28 Feb
that is showing up in the Office Online Discussion groups but not
here.

In this case you would probably just select the shape in the document
and then run:

Sub Test()
Dim oILShape As InlineShape
Set oILShape = Selection.InlineShapes(1)
oILShape.OLEFormat.ConvertTo ClassType:= _
"AcroExch.Document.7", DisplayAsIcon:=True, IconFileName:= _

"C:\WINDOWS\Installer\{AC76BA86-7AD7-1033-7B44-
A90000000001}\PDFFile.ico",
IconIndex:=0, IconLabel:="Acrobat Document"
End Sub

The recorded often adds a lot of superfilous fluff. E.g., there is no
need to covert an InLineShape to a Shape before converting to a icon.

Easier yet would probably be to simply use Edit>Paste Special and
paste as an icon.
 
D

DerbyDad03

Thank you for the response.

Actually, just recording the Paste-Special operation works and is
repeatable.

The only thing missing is that the IconLabel simply says Adobe Acrobat
Document. Is there any way to set the IconLabel to the original file
name?
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top