I have a problem with determining if a shape is selected.

A

AndyT

I've formatted a worksheet to represent an office plan. I have shapes and
grouped shapes to represent assetts
What I want is to click on a shape, returning the name of the shape selected.
I would use this name to get associated information from a database
spreadsheet.
There isn't any property 'Selected' or 'Activated' associated with the Shape
object.
Anyone know how to do this? Any response would be much appreciated.
Using Excel2002 (10.2614.2625)
O/S XP
 
G

Gary''s Student

Dim s As Shape
Set s = ActiveSheet.Shapes(Application.Caller)

In the macro assigned to the Shape, this is the Shape clicked. For example:


Sub shpname()
Dim s As Shape
Set s = ActiveSheet.Shapes(Application.Caller)
MsgBox (s.Name)
End Sub
 
A

AndyT

This works in all but one respect. The name returned is the underlying
'autoshape###' format name & not the 'Desk ##' format name that I named the
group. The way the name box works is what I'm looking for, when I click on a
shape or group of shapes, the name I've given to the objects appears.
Thanks for your help
AndyT
 
A

AndyT

To test, I have assigned macros to 3 shapes, when I click on one of these
shapes I'm not able to select it, naturally, it runs the macro.
If I select one of the shapes that have not been assigned to the macro, it
becomes selected (obviously). If I then click an assigned shape it returns
the name of the unassigned shape and not the one clicked.
When I have assigned macros to all the shapes I will not be able to select
and if no shape is selected when I click an assigned shape I get an
'Application-defined or object-defined error'.
On the bright side, I can use this code a different way. Namely, by
assigning the code to a command button, clicking and selecting any of the
shapes then the command button this would return the name as needed.
Nevertheless, I would prefer the way I thought of origially if it can be
achieved.
Thanks for your help
AndyT
 
N

Nick Hebb

AndyT,

Here is a function I developed to test the Selection. It's non-
production as of now, so I haven't fully tested it.

==================================================
Public Function IsSelectionAShape() As Boolean

Dim isShape As Boolean
Dim sType As String

sType = TypeName(Application.Selection)

' eliminate the obvious / most frequent case
If sType <> "Range" Then
Select Case sType
' Delete any you don't want to test for
Case "Arc": isShape = True ' autoshape -
special case
Case "Drawing": isShape = True ' freeform or
scribble
Case "DrawingObjects": isShape = True ' grouped shapes
Case "GroupObject": isShape = True ' diagram - org
chart, target, radial, etc.
Case "Line": isShape = True ' line or arrow
(non-Connector)
Case "OLEObject": isShape = True ' on sheet VB
control
Case "Oval": isShape = True ' autoshape -
special case
Case "Picture": isShape = True ' picture
Case "Rectangle": isShape = True ' applies to most
shapes
Case "TextBox": isShape = True ' textbox or
visible cell comment
Case "ChartObject": isShape = True ' chart
Case Else: isShape = False
End Select
End If
IsSelectionAShape = isShape

End Function
==================================================


HTH,

Nicholas Hebb
BreezeTree Software
http://www.breezetree.com
 
A

AndyT

This isn't what I was looking for, but I can understand, considering my
original problem statement why you were misled. The code tests 'what type of
object has been selected' instead of 'which object has been selected' and
returning the name of that object by selecting the object itself. I hope this
makes sense to you as I carn't think of a better way of putting it. The code
you have offered will be useful further on in this project, so thanks for
that at least and thanks for responding.
AndyT
 

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