3k Aufrufe
Gefragt in Tabellenkalkulation von Mitglied (439 Punkte)
Hallo zusammen,

ich habe in Excel 2010 eine Linie (genannt "Linie_1").
Über VBA möchte ich zum einen Start- und Endpunkt dieser Linie auslesen.
Und zum anderen möchte ich der Linie Start- und Endpunkt vorgeben.

Klingt eigentlich ganz einfach, aber ich krieg's nicht hin.

Bitte um Hilfe!
Danke und Gruß
Heiko1985

7 Antworten

0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

ich denke eine grafiche line waere zu großer aufwand,da Excel ja kein grafikprogramm ist,erlaeutere doch einfach mal deine Problemstellung > Vorstellung vielleicht gibt es einen anderen weg zum ziel ^^

gruss nighty
0 Punkte
Beantwortet von
Hallo Heiko

setzen ist einfach. Du musst nur die Koordinaten des Linken und des rechten Punkts angeben.

Set Linie = ActiveSheet.Shapes.AddLine(20, 30, 150, 40)


Auslesen ist noch einfacher. Hier darfst du nicht auf die Knoten zugreifen (Beim Linienobjekt gibt es keine) sondern musst die Linie als Objekt betrachten.

MsgBox "Linker Punkt - von Links" & Linie.Left
MsgBox "Linker Punkt - von oben" & Linie.Top
MsgBox "Rechter Punkt - von Links" & Linie.Left + Linie.Width
MsgBox "Rechter Punkt - von oben" & Linie.Top + Linie.Height


Du kannst auch einer bestehenden Linie neue Top/Left/Width/Height-Eigenschaften zuweisen. Wie die Linie heißt siehst du in Excel links oben am Schnittpunkt der Spalten und Zeilenbeschriftungen.

z.B.
ActiveSheet.Shapes("Gerade Verbindung 11").Top = 0


Den Namen kannst du dort oder per VBA auch überschreiben.
0 Punkte
Beantwortet von Mitglied (439 Punkte)
@ExcelKing
Ja, das klappt sehr gut. Vielen Dank!

Aber ein Problem habe ich noch immer:
Wie kriege ich es hin, wenn die Linie z. B. von oben links nach unten rechts geht, und ich sie so umändern möchte, dass sie danach von unten links nach oben rechts geht?

Könnte ich die Koordinaten der Endpunkte direkt vorgeben, wäre das ja kein Problem. Aber ich kann ja offenbar nur den Punkt oben links und dann Höhe und Breite vorgeben ...
0 Punkte
Beantwortet von
Linie.Flip msoFlipVertical

und dann wieder mit Height...

Gruß Mr. K.
0 Punkte
Beantwortet von
Hallo Heiko,

wenns denn unbedingt Knoten sein sollen, empfehle ich statt einer Linie ein Freihandobjekt mit 2 Knoten.

With ActiveSheet.Shapes.BuildFreeform(msoEditingAuto, 100, 100)
.AddNodes msoSegmentLine, msoEditingAuto, 150, 50
.ConvertToShape.Select
End With

pa1 = Shapes(1).Nodes(1).Points
pa2 = Shapes(1).Nodes(2).Points

kn1_links = pa1(1, 1)
kn1_oben = pa1(1, 2)
kn2_links = pa2(1, 1)
kn2_oben = pa2(1, 2)
0 Punkte
Beantwortet von
Du kannst beim Erstellen natürlich mit Addnodes beliebig weitere Knoten hinzufügen.

Gruß Mr. K
0 Punkte
Beantwortet von Mitglied (439 Punkte)
Super, vielen Dank nochmals!

Leider komme ich in den nächsten Tagen nicht dazu, das ganze auszuprobieren. Aber es liest sich auf jeden Fall sehr gut. :)
...