View Single Post
  #18   Report Post  
Posted to microsoft.public.excel.programming
Peter T Peter T is offline
external usenet poster
 
Posts: 5,600
Default Changing the properties of a Shape/ AutoShape within a cell

Hi Nick,

I don't fully understand wmf's (Windows Meta File). They seem to be either a
vector drawing (not a picture), or can support an embedded raster image (a
picture). I guess there must be something in the header file that determines
what it is.

As for testing if a wmf is a drawing or a picture once loaded, and if
already referenced as a Shape -

myShape.Type, 13 (msoPicture) or 1 (msoAutoShape)
TypeName(myShape.DrawingObject), "Picture" or "Rectangle"

or Brute force
Dim pic as Picture
On error resume next
Set pic = myShape.DrawingObject
or
Set pic = myShape.Parent.Pictures(myShape.Name) ' assumes no punctuation in
name
If not pic is Nothing Then

The nice thing about wmf drawings is you can reformat fill and line formats.

Regards,
Peter T

"NickHK" wrote in message
...
Peter,
Thanks for the clarification.
It did seem strange, as I had assumed that a picture was a Picture.
Any idea how you tell a .wmf is not a Picture ?

NickHK

"Peter T" <peter_t@discussions wrote in message
...
Hi Nick,

That clipart wmf is not a Picture but an autoshape type of drawing with

a
yellow handle , so it setting it to an object declared 'As Picture'

would
fail.

If the OP wants to load the wmf to original size could use your Insert
method but declare NewTree As Object (or As Rectangle for this

particular
wmf type but less safe), or to size to needs on load use the Shape

method.

Regards,
Peter T



"NickHK" wrote in message
...
Yesterday, that code worked for me, but today I get that same error.

OK,
try
this, with the more modern Shapes collection:

Private Sub CommandButton3_Click()
Dim NewTree As Shape
Dim i As Long

Const TREEFILE As String = "C:\Program Files\Microsoft
Office\MEDIA\OFFICE11\AUTOSHAP\BD18253_.wmf"

For i = 1 To 10
Set NewTree = ActiveSheet.Shapes.AddPicture(TREEFILE, False, True,

10,
10, 10, 10)

With NewTree
.Left = Cells(10, i * 2).Left
.Name = "Tree_" & i
End With
Next

End Sub

NickHK

"wbntravis" wrote in message
...
Nick!
We are almost there!
You have been a wonderful help. Using a picture was correct and

this
routine I will reuse over and over again as what I am making -

involves
pictures.

The sub worked fine for one tree before the compiler gave me an

error
13
type mismatch. Please see where I remarked the code.


Sub createTrees()

Dim NewTree As Picture
Dim i As Long

'my folder string.... Nick... You were right my folder was

different.
Const TREEFILE As String = "C:\Program Files\Microsoft
Office\MEDIA\OFFICE11\AUTOSHAP\BD18253_.wmf"

For i = 1 To 10
Set NewTree = ActiveSheet.Pictures.Insert(TREEFILE)
'****** The above line is where I get the type mismatch error

13

With NewTree
.Left = Cells(10, i * 2).Left
.Name = "Tree_" & i
End With
Next

**** Like I said it worked fine to create 1 tree. The tree image is

up
on my screen. After the first tree it goes into the type mismatch

error.







"NickHK" wrote:

I just used that shape, as I didn't waht you meant by "tree".

However,
try
this. You may have to change the path depending on you
installation/version
of Office.

Private Sub CommandButton1_Click()
Dim NewTree As Picture
Dim i As Long

Const TREEFILE As String = "C:\Program Files\Microsoft

Office\Office
XP\media\office10\AutoShap\BD18253_.wmf"

For i = 1 To 10
Set NewTree = ActiveSheet.Pictures.Insert(TREEFILE)
With NewTree
.Left = Cells(10, i * 2).Left
.Name = "Tree_" & i
End With
Next
End Sub

NickHK

"wbntravis" wrote in message
...
continued: hit the wrong key again
I looked up
"msoShapeFlowchartPredefinedProcess" to see what that joy was

all
about
but neither online of offline help wanted to give me anything.

Trust me, we I get this down I will name a tree after you.
Please dont roll your eyes- haha

wbnTravis


"wbntravis" wrote:



You are so close! That code produced 10 rectangles here with

two
smaller
rectangles off to one side for each object that was produced

above
the
worksheet. (which made ugly looking trees )
There were 10 of these ufos (unitendified flying objects ) to
confirm
the
for i = 10


so I did a little digging and
found a tree was an autoshape (not sure if that makes a

difference)
and the name according to excel is BD18235.wmf (not sure if

that
makes
a difference. Your coding is interesting and the minute I

saw
it
I
almost
fell over to see the .name = Tree & i could do it.

I looked up
"NickHK" wrote:

Something like this ?

Private Sub CommandButton1_Click()
Dim NewTree As Shape
Dim i As Long

For i = 1 To 10
Set NewTree =

ActiveSheet.Shapes.AddShape(msoShapeFlowchartPrede finedProcess,
20
*
i,
202.5, 174.75, 84.75)
With NewTree
.Name = "Tree_" & i
End With
Next
End Sub

NickHK

"wbntravis" wrote in

message
...
Thanks Nick ! That helped show of some of the properties!
( I did not think of it because I had a macro on the tree

shape
already.)

Since I have more than one tree shape i was kinda looking

for
a
name
property... so I could move different "name"d trees from

one
cell to
another
based
on the players movement.

Here is how 2003 Excel indicates I selected the tree.




"wbntravis" wrote:

I am so new I squeek
I need to put shapes/ autoshapes and small photos in a

cell.
Like
cell( B:2)
How does one control the autoshape or photo properites

using
VBA?