Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
836to840
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
836to840
836to840
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Pfeilfarbe abhängig von Richtung ändern

Pfeilfarbe abhängig von Richtung ändern
16.01.2007 09:01:44
Dieter
Liebe Forumsmitglieder
dies ist meine 1. Anfrage im Forum, nachdem ich im Archiv keine Lösung für mein Problem gefunden habe, was vielleicht aber auch nur an ungeeigneten Suchbegriffen liegen mag?
Mein Problem:
Ich habe 2 Rechtecke (in verschiedenen Spalten) durch eine Verbindung (gerader Pfeil) verknüpft.
Die Rechtecke sind von Zellposition und -größe abhängig.
Wenn durch Einfügen oder Löschen von Zellen die Rechtecke verschoben werden ist es mir gelungen, einen Makro zu schreiben, der die Verbindung wieder herstellt.
Der sieht so aus:

Sub NeuVerbinden()
' Makro1 Makro
' Makro am 27.10.2006 von dfedra aufgezeichnet
y = ActiveSheet.Shapes.Count                   ' Anzahl der Autoformen
For x = 1 To y
If ActiveSheet.Shapes(x).AutoShapeType = -2 Then         ' wenn Pfeil
' für den Fall gelöschter Verbindungen überspringen
If Err <> 0 Then
MsgBox ("Fehler Nr " & Err)
On Error Resume Next
End If
' Pfeil neu verbinden und rot färben
ActiveSheet.Shapes(x).Select
Selection.ShapeRange.Line.ForeColor.SchemeColor = 10
Selection.ShapeRange.RerouteConnections
End If
Next x
End Sub

Was ich nun brauche ist eine Erweiterung, so dass die Pfeilfarbe rot wird, wenn die Verbindung durch das Verschieben nach oben zeigt, und blau, wenn die Verbindung nach unten zeigt....
Eine Beispieldatei (pfeilproblem.xls) habe ich hochgeladen.
https://www.herber.de/bbs/user/39693.xls
Danke für eure Mithilfe!
dieter

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Pfeilfarbe abhängig von Richtung ändern
16.01.2007 11:02:00
Ptonka
Hallo Dieter,
ich habe etwas ähnliches mal gemacht. Das folgende Makro muss jedoch manuell gestartet werden. Probier es mal aus. Du musst nur die Namen der Autoformen ggf. anpassen.
Evtl. könnte man es auch per "onchange"-Anweisung automatisch ablaufen lassen. Aber ich denke, es ist erst mal ein Anfang mit dem Makro.
Hier ist es:

Sub Pfeilfarbe_ändern()
'Hier werden Höhe des Rechtecks und der Abstand nach oben bestimmt
ActiveSheet.Shapes("Rectangle 5").Select
WertHöhe = Selection.ShapeRange.Height
WertTop = Selection.ShapeRange.Top
'MittelpunktR5 ist eine Variabele, die die beiden "Mitten" der Rechtecke vergleicht
MittelpunktR5 = (WertTop * 2 + WertHöhe) / 2
'Hier dasselebe wie oben, nur für das andere Rechteck
ActiveSheet.Shapes("Rectangle 2").Select
WertHöhe = Selection.ShapeRange.Height
WertTop = Selection.ShapeRange.Top
MittelpunktR2 = (WertTop * 2 + WertHöhe) / 2
'Hier werden die beiden Mittelwerte verglichen und je nach Vergleich wird dem Pfeil
'die Farbe zugeteilt. Steht das rechte Rechteck unterhalb des linken, zeigt der Pfeil
'nach unten und wird grün. Sind beide gleich wird der Pfeil schwarz und steht das
'rechte Rechteck oberhalb des linken, wird der Pfeil rot.
Select Case MittelpunktR5
Case Is > MittelpunktR2
ActiveSheet.Shapes("AutoShape 7").Select
Selection.ShapeRange.Line.ForeColor.SchemeColor = 10
Case Is = MittelpunktR2
ActiveSheet.Shapes("AutoShape 7").Select
Selection.ShapeRange.Line.ForeColor.SchemeColor = 64
Case Is < MittelpunktR2
ActiveSheet.Shapes("AutoShape 7").Select
Selection.ShapeRange.Line.ForeColor.SchemeColor = 11
End Select
End Sub

Gruß,
Ptonka
P.S. Feedback ist für alle interessant!!!
Anzeige
AW: Pfeilfarbe abhängig von Rechteckmittelpunkt
16.01.2007 11:42:30
Dieter
Hallo Ptonka
Deine Idee, den Mittelpunkt der verbundenen Rechtecke zu vergleichen, erfordert in meinem Makro, dass ich "Gruppen" erkenne, d.h. welche Rechtecke werden durch welche Pfeile verbunden. In meiner Orginaldatei habe ich ca. 200 Rechtecke, die durch ca. 120 verschiedene Pfeile verbunden sind (einige doppelt)...Ich habe keine Idee, wie ich diese Gruppen erkennen soll?
Deine Idee hilft mir aber, meine Frage konkreter und einfacher zu stellen:
Kann ich statt der Mittelwerte der Rechtecke nicht einfach den Anfang- und Endpunkt eines Pfeils vergleichen?
D.h.: Mit welchem VBA Code kann ich den Start- und Endpunkt einer Verbindung abfragen?
Vielen Dank erst einmal für deine schnelle Antwort - man fühlt sich nicht so allein in dieser Excelwelt :-)
dieter
Anzeige
Lösung
17.01.2007 11:47:44
Dieter
hallo Ptonka,
Dein Hinweis auf die Mittelpunkte der verbundenen Rechtecke hat mir letztlich eine Lösung beschehrt, also nochmals vielen Dank für deine Idee!
Das Makro sieht jetzt so aus:

Sub NeuVerbinden()
' Makro1 Makro
' Makro am 17.01.2007 von dfedra aufgezeichnet
' Schleife für alle vorhandenen Autoformen
For x = 1 To ActiveSheet.Shapes.Count
Set form = ActiveSheet.Shapes(x)
With form
' Fehler nicht ganz klar, z.B. bei gelöschten Verbindungen?
' oder Pfeilen, die keine Verbindung darstellen?
' auf jeden Fall ignorieren...
If Err <> 0 Then
MsgBox ("Fehler Nr " & Err)
On Error Resume Next
End If
' Für alle Verbindungen
If .Connector Then
' kürzeste Verbindung neu herstellen
.RerouteConnections
' Start- und Endform der Verbindung finden
Set anfang = .ConnectorFormat.BeginConnectedShape
Set ende = .ConnectorFormat.EndConnectedShape
' Mittelpunkte der Start- und Endform bestimmen
zanfang = anfang.Top + anfang.Height / 2
zende = ende.Top + ende.Height / 2
' Pfeilfarbe in Abhängigkeit von der Orientierung setzen
If zanfang < zende Then
' Pfeil zeight nach unten = blau
.Line.ForeColor.SchemeColor = 12
Else
' Pfeil ist waagerecht oder nach oben gerichtet = rot
.Line.ForeColor.SchemeColor = 10
End If
End If
End With
Next x
End Sub

Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige