habe fogendes Problem, welches ich per VBA lösen muss:
Das Problem besteht darin, eine Line in einem bestimmten in
Winkel in ein Koordinatensystem zu zeichnen. Bisher habe ich
folgenden Code geschrieben:
Sub Winkel_Zeichnen()
Set myDocument = Worksheets(1)
ActiveSheet.ChartObjects.Add(10, 10, 400, 400).Name = "Winkel"
With myDocument.Shapes.AddLine(20, 330, 400, 330).Line
.DashStyle = msoLineDash
.ForeColor.RGB = RGB(255, 0, 0)
End With
With myDocument.Shapes.AddLine(100, 20, 100, 400).Line
.DashStyle = msoLineDash
.ForeColor.RGB = RGB(255, 0, 0)
End With
ActiveSheet.Shapes.AddLine(100, 330, 100, 30).Select
End Sub
Zunächst erstelle ein ChartObjekt und zeichne dort zwei Linien ein,
die ein Koordinatensystem andeuten sollen. Nun möchte ich eine Linie
in einem bestimmten Winkel zeichnen. Ich habe mir gedacht zu-
nächst eine Linie zu zeichnen <ActiveSheet.Shapes.AddLine(100, 330, 100,
30).Select >
und dann diese Linie zu drehen. Finde aber keinen Ansatz wie man
das machen kann.
Hat jemand eine Idee. Bin für jeden Hinweis dankbar.
Martin Beering
Sinus und Cosinus lassen grüßen ;-)
Leg den Ursprund Deines Koordinatensystems in 2 Variablen, dann gehts viel
leichter.
ux =100
uy= 100 (z.B.)
Die Länge Deiner Linie sei in der Variablen länge
Der Winkel sei in Grad in der Variablen winkel
Zum Winkel umrechnen müssen wir Pi definieren:
Pi = 3.14159265358979
With myDocument.Shapes.AddLine(ux, uy, länge * Cos(Pi / 180 * winkel) +
ux, -länge * Cos(Pi / 180 * winkel) + uy)
End with
Grüße ERIK
"Martin Beering" <m...@beering.com> schrieb im Newsbeitrag
news:a43fbk$g8t$04$1...@news.t-online.com...
Hallo Martin,
versuchs mal damit:
>Hallo NG'ler,
>
>habe fogendes Problem, welches ich per VBA lösen muss:
>
>Das Problem besteht darin, eine Line in einem bestimmten in
>Winkel in ein Koordinatensystem zu zeichnen. Bisher habe ich
>folgenden Code geschrieben:
>
>Sub Winkel_Zeichnen()
>
> Set myDocument = Worksheets(1)
> ActiveSheet.ChartObjects.Add(10, 10, 400, 400).Name = "Winkel"
>
> With myDocument.Shapes.AddLine(20, 330, 400, 330).Line
> .DashStyle = msoLineDash
> .ForeColor.RGB = RGB(255, 0, 0)
> End With
> With myDocument.Shapes.AddLine(100, 20, 100, 400).Line
> .DashStyle = msoLineDash
> .ForeColor.RGB = RGB(255, 0, 0)
> End With
>
> ActiveSheet.Shapes.AddLine(100, 330, 100, 30).Select
Selection.ShapeRange.IncrementRotation 60
oder auch
Selection.ShapeRange.IncrementRotation -30
>
>End Sub
Ein Tip:
Wenn dir ein Befehl nicht bekannt ist, nimm ein Makro der gewünschten
Aktion auf und paß es dann entsprechend an.
Das hab ich auch so gemacht.
Tschau Norbert
> With myDocument.Shapes.AddLine(ux, uy, länge * Cos(Pi / 180 * winkel) +
> ux, -länge * Cos(Pi / 180 * winkel) + uy) > End With
Meine erste Formel hat leider einen kleinen Flüchtigkeitfehler. Korrekt ist:
ux = 100
uy = 100
länge = 100
winkel = 30 ' (z.B.)
Pi = 3.14159265358979
With ActiveSheet.Shapes.AddLine(ux, uy, länge * Cos(Pi / 180 * winkel) +
ux, -länge * Sin(Pi / 180 * winkel) + uy)
linienname = .Name
End With
> Ich bins nochmal, weis Du vielleicht auch, wie man eine
> gezeichnete Linie auswählt und wieder löscht.
S.o. - hier merken wir uns den Namen des Objektes in der Variablen
linienname
So kann man die Linie löschen mit:
ActiveSheet.Shapes(linienname).Delete
Grüße ERIK