könnt ihr mir bitte bei folgendem Problem helfen?
Ich habe diverse Punkte per VBA zu Linienzügen konvertiert.
So ungefähr lautet mein Code:
Function FreieForm
Dim k As Variant
With ActiveSheet.Shapes.BuildFreeform(msoEditingAuto, pL(1, 1), pL(1, 2))
For k = 2 To aP
.AddNodes msoSegmentLine, msoEditingAuto, pL(k, 1), pL(k, 2)
Next k
.ConvertToShape.Name = "HalloFormName"
End With
'Wobei pL ein Array mit (k,1)=x und (k,2)=y Werten und aP die Anzahl der Punkte ist.
End Function
Darunter sind sowohl Linienzüge, als auch geschlossene Flächen.Wenn ich später auf dem Tabellenblatt die FreeForm (also eine Art Polylinie) in einzelne Linien auflösen möchte, geht mir bei nachfolgender Funktion die Info einer Fläche verloren.
Mit Shapes.Nodes.Count liste ich zwar alle Punkte auf, erhalte aber als letzten Punkt nicht den Punktwert vom Ersten Punkt.
Sub ListNodesCoords_alle() 'alle Polilinien einlesen
Dim r As Long
r = 0
Dim ptsArr, i As Long, x As Double, y As Double, nc As Long
Dim ff As Shape
nf = Tabelle1.Shapes.Count
For k = 1 To nf
Set ff = Tabelle1.Shapes(k)
nc = ff.Nodes.Count
For i = 1 To nc
If i = 1 Then r = r + 1
With ff.Nodes
ptsArr = .Item(i).Points
x = ptsArr(1, 1)
y = ptsArr(1, 2)
Cells(r, 1) = x
Cells(r, 2) = y
r = r + 1
End With
Next i
Next k
End Sub
Wie finde ich heraus, ob es ein Linienzug, oder eine geschlossene Fläche ist?Es würde mir reichen, wenn über eine Abfrage der Attribute dies erkennbar wäre.
Dann würde ich bei einer Fläche einfach als letzten Punkt den allerersten Punktwert hinzufügen.
Vielen Dank für eure Hilfe!
StonY