Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Settings
wght = 3# 'Linienstärke in Punkt
DS = msoLineSquareDot 'linienart
'möglich sind:
' msoLineDash 'gestrichelt
' msoLineDashDot 'strichpunkt
' msoLineDashDotDot 'strichpunktpunkt
' msoLineRoundDot 'runde punkte
' msoLineSolid 'durchgehende Linie
' msoLineSquareDot 'eckige Punkte
FC = 40 'Farbe der Linie
' 64=schwarz
' 1=weiss
' 2=rot
' 3=grün
' 4=blau
' ..=...
EAL = msoArrowheadLong 'Pfeilkopflänge
'möglich sind:
' msoArrowheadShort 'kurz
' msoArrowheadLengthMedium 'mittel
' msoArrowheadLong 'lang
EAW = msoArrowheadWide 'Pfeilkopfbreite
'möglich sind:
' msoArrowheadNarrow 'dünn
' msoArrowheadWidthMedium 'mittel
' msoArrowheadWide 'dick
EAS = msoArrowheadStealth 'Pfeilkopfstil
'möglich sind:
' msoArrowheadNone 'keiner
' msoArrowheadOval 'oval
' msoArrowheadDiamond 'diamantform
' msoArrowheadOpen 'offener Kopf
' msoArrowheadStealth 'hinten spitz
' msoArrowheadTriangle 'dreieckig
startx = 4
endx = 11
starty = 20
endy = 30
'______________________________________________________________________________________
On Error GoTo errHandler1 'Fehler abfangen
If Not Application.Intersect(Target, Range(Cells(starty, startx), Cells(endy, endx))) Is Nothing Then
'derzeitig bekannt:
' # Spalten/Zeilenweise Markierung
' # wenn Pfeile bereits gelöscht
'alte löschen
ActiveSheet.Shapes("crossx").Delete
ActiveSheet.Shapes("crossy").Delete
errHandler1:
'entweder weiter die Fehler behandeln und ausgeben oder einfach nix weiter machen :)
On Error GoTo errHandler2 'Fehler abfangen
'aktive Zelle merken
xx = ActiveCell.Column
yy = ActiveCell.Row
For i = 1 To startx - 1
x1 = x1 + Cells(1, i).Width
Next i
For i = 1 To starty - 1
y1 = y1 + Cells(i, 1).Height
Next i
For i = startx To Cells(yy, xx).Column - 1
x = x + Cells(1, i).Width
Next i
For i = starty To Cells(yy, xx).Row - 1
y = y + Cells(i, 1).Height
Next i
'Zeichnen - waagerecht
ActiveSheet.Shapes.AddLine(x1, y1 + y + Cells(yy, xx).Height / 2, x1 + x, y1 + y + Cells(yy, xx).Height / 2).Select
With Selection.ShapeRange.Line
.Weight = wght
.DashStyle = DS
.ForeColor.SchemeColor = FC
.BackColor.RGB = RGB(BCr, BCg, BCb)
.BeginArrowheadStyle = msoArrowheadNone
.EndArrowheadLength = EAL
.EndArrowheadWidth = EAW
.EndArrowheadStyle = EAS
End With
Selection.Name = "crossx"
'zeichnen - senkrecht
ActiveSheet.Shapes.AddLine(x1 + x + Cells(yy, xx).Width / 2, y1, x1 + x + Cells(yy, xx).Width / 2, y1 + y).Select
With Selection.ShapeRange.Line
.Weight = wght
.DashStyle = DS
.ForeColor.SchemeColor = FC
.BackColor.RGB = RGB(BCr, BCg, BCb)
.BeginArrowheadStyle = msoArrowheadNone
.EndArrowheadLength = EAL
.EndArrowheadWidth = EAW
.EndArrowheadStyle = EAS
End With
Selection.Name = "crossy"
'alte Markierung wiederherstellen
Cells(yy, xx).Select
errHandler2:
'entweder weiter die Fehler behandeln und ausgeben oder einfach nix weiter machen :)
End If
End Sub