Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1380to1384
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

X,Y Koordinaten einer angeklickten Linie

X,Y Koordinaten einer angeklickten Linie
05.09.2014 18:11:19
Camille
Hallo liebes Forum,
Ich suche seit einigen Tagen eine Möglichkeit ein eigentlich simples Problem zu lösen:
Ich habe durch ein VBA-Modul verschiedene Linien in eine leeres Tabellenblatt gezeichnet. Jetzt möchte ich eine dieser Linien per Mausklick auswählen und die Koordinatenpunkte X1, Y1, X2, Y2 erhalten.
Dabei sind:
X1 und Y1 die X- und Y-Koordinate des Anfangspunktes der Linie
X2 und Y2 die X- und Y-Koordinate des Endspunktes der Linie
Ich habe mir immerhin schon den Namen meiner, per Mausklick ausgewählten, Linie über:
Dim LinienName As String
LinienName = Selection.ShapeRange.Name

ausgeben lassen. Als Wert ergibt sich z.B. "Straight Connector 2310".
Jetzt hatte ich gehofft über
Dim X1 As Integer
X1 = ActiveSheet.Shapes(LinienName).Nodes(1).Points(1, 1)

mir die Koordinaten ausgeben zu lassen. Das klappt so einfach aber nicht.
Dann habe ich es mit dieser Methode probiert:
Dim Koor as Variant
Dim X1 As Integer, Y1 as Integer
Koor = ActiveSheet.Shapes(LinienName).Nodes.Item(1).Points
X1 = Koor(1, 1)
Y1 = Koor(1, 2)

Doch das klappt auch nicht.
Hat jemand eine Idee wie ich weiter machen kann? Mir gehen die Ideen aus und mit der normalen Hilfe von Microsoft komme ich leider auch nicht weiter. Ich bin für jeden Denkansatz und Vorschlag dankbar!
Grüße
Camille

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: X,Y Koordinaten einer angeklickten Linie
07.09.2014 17:15:43
Adis
Hallo
Es gibt das Forum Archiv, aus Neugier habe ich mal reingeschaut. (suche XY Koordinaten)
Es gibt einige Beitraege zu diesem Thema. Anbei der Link einer alten Beispiel Datei.
Hier wird ein Objekt bewegt, ein Trapez. Die Koordinaten werden per Makro gelistet.
https://www.herber.de/bbs/user/8473.xls
Gruss Adis

AW: X,Y Koordinaten einer angeklickten Linie
08.09.2014 13:40:09
fcs
Hallo Camille,
ich hab mit im VBA-Editor mal alle Eigenschaften eines Linienobjektes angesehen.
Ich hab nichts gefunden, mit dem man die Koordinaten von Start- und Endpunkt einer Linie ermitteln kann.
Über die Eigenschaften Top, Left, Height und Width kann man zwar die Koordinaten der 4 Eckpunkte des einhülendne Rechtecks bestimmen, aber es gibt keine Informationen (auch keine indirekten) an welchem der 4 Punkte Start- bzw. Endpukt der Linie sind.
Nodes-Werte wie bei anderen Objekten gibt es keine.
Gruß
Franz

Anzeige
AW: X,Y Koordinaten einer angeklickten Linie
08.09.2014 20:10:19
Camille
Hallo Franz,
Würde das zur Fehlermeldung "Der Index in der angegebenen Sammlung ist außerhalb des zulässigen Bereichs." passen?
@Adis: mit dem Excel-tool habe ich versucht, aber ich schaffe es nicht es auf eine einfach Linie zu übertragen.
Obige Fehlermeldung kommt nämlich, wenn ich folgenden Code versuche:
Dim PointsArray(1 To 2, 1 To 2)
LinienName = Selection.ShapeRange.Name
Set sh = ActiveSheet.Shapes(LinienName)
With sh.Nodes
For i = 1 To 2
PointsArray(1, i) = .Item(1).Points
Next i
End With

Leider ist das Problem also noch nicht gelöst...
Danke für euere Antworten bisher!

Anzeige
AW: X,Y Koordinaten einer angeklickten Linie
08.09.2014 20:49:21
Mullit
Hallo,
VerticalFlip und HorizontalFlip machen die Musik:
Option Explicit

Public Sub test()
Dim sngX1Begin As Single, sngY1Begin As Single, _
  sngX2End As Single, sngY2End As Single
  If TypeOf Selection Is Line Then
    With ActiveSheet.Shapes(Selection.Name)
         sngX1Begin = .Left
         sngX2End = .Left + .Width
         If .VerticalFlip = msoTrue And .HorizontalFlip = msoFalse Or _
           .VerticalFlip = msoFalse And .HorizontalFlip = msoTrue Then
           sngY1Begin = .Top + .Height
           sngY2End = .Top
         Else
           sngY1Begin = .Top
           sngY2End = .Top + .Height
         End If
         MsgBox .Name & vbCr & vbCr & "x1:  " & sngX1Begin & vbCr & _
            "y1:  " & sngY1Begin & vbCr & "x2:  " & sngX2End & vbCr & "y2:  " & sngY2End
    End With
  Else
    MsgBox "Bitte eine Linie auswählen!", vbExclamation
  End If
End Sub


VBA/HTML - CodeConverter für Office-Foren
AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
Projektbetreuung durch mumpel



Code erstellt und getestet in Office 12

Gruß,

Anzeige
AW: X,Y Koordinaten einer angeklickten Linie
09.09.2014 10:23:20
fcs
Hallo Camille, hallo Mullit,
VerticalFlip und HorizontalFlip machen die Musik, aber sie war von Mullit noch nicht ganz zu Ende gespielt.
Mullits Makro berechnet die Koordinaten der beiden Endpunkte, unterscheidet aber noch nicht zwischen Start- und Endpunkt. Mit den folgenden Anpassungen werden auch diese berücksichtigt. X1/Y1 ist dann der Startpunkt, X2/Y2 der Endpunkt.
Public Sub test()
Dim sngX1Begin As Single, sngY1Begin As Single, _
sngX2End As Single, sngY2End As Single
If TypeOf Selection Is Line Then
With ActiveSheet.Shapes(Selection.Name)
sngX1Begin = .Left
sngX2End = .Left + .Width
If .HorizontalFlip = msoFalse Then
sngX1Begin = .Left
sngX2End = .Left + .Width
If .VerticalFlip = msoFalse Then
sngY1Begin = .Top
sngY2End = .Top + .Height
Else
sngY1Begin = .Top + .Height
sngY2End = .Top
End If
Else
sngX1Begin = .Left + .Width
sngX2End = .Left
If .VerticalFlip = msoFalse Then
sngY1Begin = .Top
sngY2End = .Top + .Height
Else
sngY1Begin = .Top + .Height
sngY2End = .Top
End If
End If
MsgBox .Name & vbCr & vbCr & "x1:  " & sngX1Begin & vbCr & _
"y1:  " & sngY1Begin & vbCr & "x2:  " & sngX2End & vbCr & "y2:  " & sngY2End
End With
Else
MsgBox "Bitte eine Linie auswählen!", vbExclamation
End If
End Sub

Anzeige
AW: X,Y Koordinaten einer angeklickten Linie
09.09.2014 18:11:41
Camille
Hallo Mullit, hallo fcs!
Danke danke Danke! Es ist genau DAS was ich gebraucht habe. Und der Code ist auch noch komplett dabei!! Ich bin begeistert und kann euch nicht genug danken.
Der Code klappt auch wunderbar in der 2010er Version.
Gruß
Camille

AW: X,Y Koordinaten einer angeklickten Linie
09.09.2014 19:33:27
Mullit
Hallo,
@Camille:
top::
@Franz:
Was willst Du mir da erzählen?
Du mußt wohl Dein Klavier mal nachstimmen....
Dein Programm ist falsch!
sngX1Begin
sngY1Begin
sind bei mir immer die Anfangskoordinaten.
sngX2End
sngY2End
sind bei mir immer die Endkoordinaten.
Beides wird in der Msgbox korrekt ausgegeben.
Dein Programm gibt falsche Werte aus, wenn man die Linien dreht:
In X1 steht dann bei Dir der grössere Wert und bei einer aufsteigenden Linie in Y1 der kleinere Wert, bei einer abfallenden Linie in Y1 der grössere Wert: Das ist natürlich genau verkehrt herum...
Du darfst dem X1 Wert nicht .Left + .Width und im doppelten True-Fall für HorizontalFlip und VerticalFlip dem Y1-Wert nicht .Top + .Height zuweisen!!
s.a.:
Public Sub test()
Dim sngX1Begin As Single, sngY1Begin As Single, _
sngX2End As Single, sngY2End As Single
If TypeOf Selection Is Line Then
With ActiveSheet.Shapes(Selection.Name)
sngX1Begin = .Left
sngX2End = .Left + .Width
If .HorizontalFlip = msoFalse Then
sngX1Begin = .Left
sngX2End = .Left + .Width
If .VerticalFlip = msoFalse Then
sngY1Begin = .Top
sngY2End = .Top + .Height
Else
sngY1Begin = .Top + .Height
sngY2End = .Top
End If
Else
sngX1Begin = .Left + .Width
sngX2End = .Left
If .VerticalFlip = msoFalse Then
sngY1Begin = .Top
sngY2End = .Top + .Height
Else
sngY1Begin = .Top + .Height
sngY2End = .Top
End If
End If
MsgBox .Name & vbCr & vbCr & "x1:  " & sngX1Begin & vbCr & _
"y1:  " & sngY1Begin & vbCr & "x2:  " & sngX2End & vbCr & " _
y2:  " & sngY2End
End With
Else
MsgBox "Bitte eine Linie auswählen!", vbExclamation
End If
End Sub

Gruß,

Anzeige
AW: X,Y Koordinaten einer angeklickten Linie
10.09.2014 00:43:30
Mullit
Hallo Franz,
da muß ich mich korrigieren:
Du bezogst Dich mit Deinem Prog auf den 'StartZeichnungspunkt'.
Von der Ansicht her ist Dein Programm korrekt: top::
Ich nahm an, Camille wollte die koordinatensystembezogenen XY-Daten haben....
Da könnte ich natürlich falsch liegen...
Gruß, Mullit

AW: X,Y Koordinaten einer angeklickten Linie
10.09.2014 00:53:44
fcs
Hallo Mullit,
@Franz:
Was willst Du mir da erzählen?
Du mußt wohl Dein Klavier mal nachstimmen....
Dein Programm ist falsch!

Ich denke nach mehrfachem Probieren besteht bei deiner und meiner Version noch Bedarf zum Nachstimmen.
In nachfolgender Grafik hab ich mal verschiedene Linien gestestet. Bei Linie 1 bis 5 hab ich die Linien jeweils vom Startpunkt zum Endpunkt gezeichnet ohne weitere Aktionen wie Drehen oder Kippen.
Bei der 6. Linie hab ich Linie 1 kopiert, verschoben und um 180° gedreht.
Userbild
Während meine Version nach meinem Verständnis bei den Linien 1 bis 5 Start- und Endpunkt jeweils korrekt ermittelt, funktioniert sie bei der gedrehten Linie nicht mehr. Deine Makroversion liefert bei einigen Richtungen der Linie nach meinem Verständnis nicht die korrekten Start- und End-Koordinaten.
Ich hab jetzt keine Lust auch noch eine Korrektur für den Drehwinkel der Linien einzubauen, nur weil man bei Microsoft nicht in der Lage ist, die Objektdaten komplett im VBA-Objekt abzubilden.
Gruß
Franz
Anzeige

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige