Microsoft Excel

Herbers Excel/VBA-Archiv

Linien miteinander verknüpfen


Betrifft: Linien miteinander verknüpfen von: Mr. Visit
Geschrieben am: 11.08.2016 10:24:38

Hallo zusammen,

Situation:
Ich möchte zwei Linien mit einer definierten Länge zu einem Polygon zusammenfügen.
Zuerst soll Linie 1 erzeugt werden. Diese wird anschließend gedreht.
Das gleiche wird mit Linie 2 gemacht.
Nun soll der Endpunkt von Linie 1 mit .Width + .Left und .Height + .Top ermittelt werden.
Linie 2 soll nun über .Left und . Top an den Endpunkt von Linie 1 verschoben werden.

Problem:
Linie 1 wird bei der Erzeugung mit den Informationen zum Start- und Endpunkt abgelegt. Diese werden allerdings nach einer Drehung beibehalten, sodass sich der so entstandene neue Endpunkt an anderer Stelle befindet.

Code:


Sub Test()

        Dim staright_line As Shape
        Dim staright_line1 As Shape
        Dim X1, X2, Y1, Y2
        
        
     Set staright_line = ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 123, 89. _
5714173228, _
        160, 120)

        staright_line.Rotation = 50
        
        With staright_line
            X2 = .Width + .Left
            Y2 = .Height + .Top
        End With
        

    Set staright_line1 = ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 123, 89. _
5714173228, _
        160, 120)

        staright_line1.Rotation = 50

    With staright_line1
            X1 = X2
            Y1 = Y2
        End With

End Sub
Ziel:
Ich suche nun nach einer Möglichkeit die Informationen einer Linie nach einer Drehung zu aktualisieren. Eine Neuberechnung der Positionen ist zwar möglich, aber an der Stelle, sollte es eine Möglichkeit geben die Werte zu aktualisieren, völlig überflüssig.

Hat einer von Euch eine Lösung?

Viele Grüße

Mr. Visit

  

Betrifft: AW: Linien miteinander verknüpfen von: Rudi Maintaire
Geschrieben am: 11.08.2016 10:41:49

Hallo,
warum drehst du die Linien und fügst sie nicht direkt richtig ein?

Gruß
Rudi


  

Betrifft: AW: Linien miteinander verknüpfen von: Mr. Visit
Geschrieben am: 11.08.2016 10:50:55

Hallo,

Zusatz:
Die Linien des Polygonzugs werden vorher in einer Tabelle mit Länge und Winkel angegeben.
So definiere ich erst die Linie in ihrer Länge und führe dann die Drehung aus.
Würde ich die Linie direkt in gedrehter Position erstellen bin ich wieder am rechnen.

Gruß,

Mr. Visit


  

Betrifft: AW: Linien miteinander verknüpfen von: Rudi Maintaire
Geschrieben am: 11.08.2016 10:57:41

Hallo,
mit Länge und Winkel angegeben
dann musst du ohnehin rechnen, denn du hast beim Einfügen keine Möglichkeit Länge und Winkel anzugeben.

Gruß
Rudi


  

Betrifft: AW: Linien miteinander verknüpfen von: Mr. Visit
Geschrieben am: 11.08.2016 11:10:24

Hallo,

beim Einfügen keine Möglichkeit Länge und Winkel anzugeben.
Die Länge kann ich definieren:

'Straight line
Set staright_line = ws.Shapes.AddConnector(msoConnectorStraight, lx_start, _
       ly_start, lx_start + lline_length, ly_start)
Dann möchte ich die Linie drehen und die neuen Eckpunkte für den Beginn der nächsten Linie bestimmen.
Das machen ich dann mit .Top etc. Dafür ich die aktualisierten Werte der Linie.


  

Betrifft: AW: Linien miteinander verknüpfen von: Mr. Visit
Geschrieben am: 11.08.2016 12:46:10

@ Rudi

Du hattest Recht. Ich habe das jetzt berechnet. Ist einfach und sieht auch vom Code O.K. aus.

Sub Test()

        Dim staright_line As Shape
        Dim staright_line1 As Shape
        Dim x1, x2, y1, y2, l, Angle
         
        ' Define Angle and length
        l = 100
        Angle = 50
        
        ' Define start of the line
        x1 = 400
        y1 = 400
        
        ' Calculate end of the line
        x2 = x1 + l * Cos(Angle)
        y2 = y1 + l * Sin(Angle)
        
        ' Draw line
        Set staright_line = ActiveSheet.Shapes.AddConnector(msoConnectorStraight, x1, y1, x2,  _
y2)
        
        
        x1 = x2
        y1 = y2
        x2 = x1 + l * Cos(Angle)
        y2 = y1 + l * Sin(Angle)

        Set staright_line1 = ActiveSheet.Shapes.AddConnector(msoConnectorStraight, x1, y1, x2,  _
y2)


End Sub
Danke!


  

Betrifft: Vorsicht!!! von: Rudi Maintaire
Geschrieben am: 11.08.2016 12:48:49

Hallo,
sin/ cos brauchen Winkel im Bogenmaß
Ergo: Angle = 50 * Worksheetfunction.Pi()/180

Gruß
Rudi


  

Betrifft: AW: Vorsicht!!! von: Mr. Visit
Geschrieben am: 11.08.2016 12:57:40

Stimmt!


  

Betrifft: keine Chance von: Rudi Maintaire
Geschrieben am: 11.08.2016 12:42:00

Hallo,
die Eigenschaften Width und Height ändern sich durch die Drehung nicht.
Du musst also rechnen.
Aber dafür ist Excel schließlich da.

Gruß
Rudi


Beiträge aus den Excel-Beispielen zum Thema "Linien miteinander verknüpfen"