UniqueID for shape

  • Thread starter Thread starter Lenonardo
  • Start date Start date
L

Lenonardo

Is there a way to associate a unique id with a shape.

I want to update a PPT presentation containing slides I have created from a
program.
The presentation will be edited interactively in between creating the
slides and updating them.

I want to make sure that if someone copies one of my shapes, adn deletes my
original, that I do NOT update the copy (and can detect that the original
is gone.)

Best I have managed to com up with so far is SlideID + shape index,
but I'm not sure if this is unique, or if there is something better.

Any help appreciated.
 
David,
That won't work as expected. There is a bug with naming shapes using VBA.
Once you name a shape with VBA everytime a copy/paste operation is performed
on the shape, the shape retains the same name.

Try renaming a shape with VBA.
Copy/Paste a duplicate of the shape, check the name of the new shape.
 
Leonardo,
The SlideID + shape index will create problems if the user changes the order
of shapes on the slide. Just use the slideID if you want to check if the
shape resides on the same slide as the stored internal indentification. But
consider what would happen it the author duplicated the slide or copied the
slide to another presentation.

If you are using PowerPoint 2002 or later, there is a read-only property -
ID - which is available. You could use this by itself or in combination with
the slide ID.
 
Leonardo,
The SlideID + shape index will create problems if the user changes the
order of shapes on the slide. Just use the slideID if you want to
check if the shape resides on the same slide as the stored internal
indentification. But consider what would happen it the author
duplicated the slide or copied the slide to another presentation.

If you are using PowerPoint 2002 or later, there is a read-only
property - ID - which is available. You could use this by itself or in
combination with the slide ID.

I had a search for all obvious 'unique name' properties - but didn't
find ID. I'll have another look.
 
=?Utf-8?B?RGF2aWQgTS4gTWFyY292aXR6?=
Why don't you give the shape a name. I don not believe that shape
names are copied when a shape is copied and pasted. There are some
procedures for naming shapes at my Web site:

http://www.loyola.edu/education/PowerfulPowerPoint/

Look for Example 8.7 by clicking on Examples by Chapter and Chapter 8.

--David

David M. Marcovitz
Author of _Powerful PowerPoint for Educators_
http://www.loyola.edu/education/PowerfulPowerPoint/


Copying shapes within the same slide will assign new automatically
generated names. But if you assing a name yourself - it gets copied.
If you copy shapes between slides then slightly different behaviour
occurs.

So it is possible that using the automatically generaed names may give
uniqueness within a slide. But probably not across slides.

I would suspect that all writeable properties get copied.
SO I am looking for a read-only application generated ID.
 
Leonardo,
The SlideID + shape index will create problems if the user changes the
order of shapes on the slide. Just use the slideID if you want to
check if the shape resides on the same slide as the stored internal
indentification. But consider what would happen it the author
duplicated the slide or copied the slide to another presentation.

If you are using PowerPoint 2002 or later, there is a read-only
property - ID - which is available. You could use this by itself or in
combination with the slide ID.

Looks like ID will do what I require for PPT 2002+.

But I think adding PLACEHOLDERS will do everything I want (which I can
use as I am creating the slides) and across all likely version of PPT (I
hope).
 
Is there a way to associate a unique id with a shape.

Hmmm. As Shyam's pointed out, naming it won't help.

But as it's created, each shape is assigned an ID which will be unique, as far
as I can tell (unlike the shape .Name)

You could do something along these lines:

' Tag the shape with its own ID to identify it as one of yours
Sub TagTheShape()
With ActiveWindow.Selection.ShapeRange(1)
Call .Tags.Add("MySecretID",Cstr(.ID))
End With
End Sub

Then later when you need to test if it's an original:

Sub IsItMine()
With ActiveWindow.Selection.ShapeRange(1)
If .Tags("MySecretID") = Cstr(.Id) Then
Msgbox ("It's MINE")
End If
End With
End Sub

--
Steve Rindsberg, PPT MVP
PPT FAQ: www.pptfaq.com
PPTools: www.pptools.com
================================================
Featured Presenter, PowerPoint Live 2004
October 10-13, San Diego, CA www.PowerPointLive.com
================================================
 
Hmmm. As Shyam's pointed out, naming it won't help.

But as it's created, each shape is assigned an ID which will be
unique, as far as I can tell (unlike the shape .Name)

You could do something along these lines:

' Tag the shape with its own ID to identify it as one of yours
Sub TagTheShape()
With ActiveWindow.Selection.ShapeRange(1)
Call .Tags.Add("MySecretID",Cstr(.ID))
End With
End Sub

Then later when you need to test if it's an original:

Sub IsItMine()
With ActiveWindow.Selection.ShapeRange(1)
If .Tags("MySecretID") = Cstr(.Id) Then
Msgbox ("It's MINE")
End If
End With
End Sub

--
Steve Rindsberg, PPT MVP
PPT FAQ: www.pptfaq.com
PPTools: www.pptools.com
================================================
Featured Presenter, PowerPoint Live 2004
October 10-13, San Diego, CA www.PowerPointLive.com
================================================

Thanks Steve.

I think the ID property is only for Powerpoint 2002+ and I need this to
work on Powerpoint 2000.

If ID is available then I will be storing the IDs of the charts I
create, so don't need to test them in the presentation - I will just
look for my saved Shape IDs.

With shape names - if you use the default names then these DO get
changed when copying onto the same slide. Not sure when / if this is the
case when copying onto other Slides.

So - I have considered using your secret tag approach to save tags for
parent_slide_id and shape_auto_name. Then I can test these against their
actual values, and if they match then this is my shape (probably).

I am also looking at PlaceHolders - as it looks like these are set when
the slide is created and cannot be altered afterwards. So - if I can
stick my chart into a placeholder then I should be able to uniquely
identify it using a matching set of secret tags.

But I'm not entirely clear if placeholders behave as I expect them to.
The MS documentation seems clear - but is frequently contradicted in
examples and other manuals I have found. Maybe these are just loose uses
of the term placeholder.

The MS VBAPP10.chm file clearly states that:

"You can delete individual placeholders by using the Delete method, and
you can restore deleted placeholders by using the AddPlaceholder method,
but you cannot add any more placeholders to a slide than it had when it
was created."
 
I think the ID property is only for Powerpoint 2002+ and I need this to
work on Powerpoint 2000.

Nuts. You're right.
But I'm not entirely clear if placeholders behave as I expect them to.
The MS documentation seems clear - but is frequently contradicted in
examples and other manuals I have found. Maybe these are just loose uses
of the term placeholder.

The MS VBAPP10.chm file clearly states that:

"You can delete individual placeholders by using the Delete method, and
you can restore deleted placeholders by using the AddPlaceholder method,
but you cannot add any more placeholders to a slide than it had when it
was created."

That's correct. MS defines the placeholders (number and type) per layout. You
can remove or restore the predefined placeholders but not create your own.

Does that make it clearer?

--
Steve Rindsberg, PPT MVP
PPT FAQ: www.pptfaq.com
PPTools: www.pptools.com
================================================
Featured Presenter, PowerPoint Live 2004
October 10-13, San Diego, CA www.PowerPointLive.com
================================================
 
Back
Top