Left of an object on a chart sheet
The chart area on a chart sheet is sized to the inside margins of the
sheet's page set-up. It's probably possible to calaculate your shape's
screen coordinates but quite a lot of work. Another way is to add and size
a chartobject over the shape. This has a 'window' so pretty straightforward
to get its window coordinates which should be within a pixel or two of the
shape (assuming it doesn't have a thick border). Something like this -
Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
(ByVal hwnd1 As Long, ByVal hwnd2 As Long, _
ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function GetWindowRect Lib "user32" _
(ByVal HWND As Long, lpRect As RECT) As Long
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Sub GetShapeScreenCoords()
Dim shp As Shape, chtObj As ChartObject
Dim hwnd1&, hwnd2&, hwnd3&
Dim shpRect As RECT
On Error Resume Next
Set shp = ActiveSheet.Shapes(1)
On Error GoTo 0
If shp Is Nothing Then
MsgBox "no shape on sheet"
Exit Sub
End If
hwnd1 = FindWindow("XLMAIN", Application.Caption)
hwnd2 = FindWindowEx(hwnd1, 0&, "XLDESK", vbNullString)
With shp
Set chtObj = ActiveSheet.ChartObjects.Add( _
.Left, .Top, .Width, .Height)
End With
chtObj.Activate
hwnd3 = FindWindowEx(hwnd2, 0&, "EXCELE", vbNullString)
Call GetWindowRect(hwnd3, shpRect)
chtObj.Delete
With shpRect
' the shape's pixel coordinates
Debug.Print "x1 " & .Left, "y1 " & .Top
Debug.Print "x2 " & .Right, "y2 " & .Bottom
End With
End Sub
Of course I'm assuming it's some shape's coordinates you're after as you
asked in your OP.
Regards,
Peter T
"MrT" wrote in message
...
What, exactly, is it that you are trying to do? Why do you need the
screencoordinates?
I know the mouse coordinates which are based on the screen, and want to
draw
a shaphe under the mouse cursor, not the chart position/coordinates. So I
need to know either the mouse position relative to the chartarea or to
know
the screen coordinates of the chartarea (or of anything on the chart).
Regards,
MrT
|