AW: Shapes (Kreise + Pfeile) automatisch anordnen
12.10.2017 17:14:56
Sophie
Unten mein Code in abgespeckter Form. Ich hoffe, dass es noch Sinn ergibt, da ich es etwas anonymisiert und verkürzt habe. Es sind zwei Subs. Mit dem ersten erstelle ich die Kreise. Mit dem zweiten die Pfeile. Ist das so ausreichend? Von seltsamen Dimensionierungen oder komischen Umsetzungsarten bitte ich abzusehen... Ich habe versucht mir das in den letzten Tagen irgendwie anzueignen.
Sub Kreise_erstellen()
Dim c As Worksheet
Dim LastRowC As Long
Dim i As Integer
Dim Kreis As Shape
Dim x As Integer
Dim y As Integer
Dim Beispieltext As String
Dim s As Integer
x = 50
y = 50
s = 1
Set c = ThisWorkbook.Worksheets("Zwischenablage")
LastRowC = c.Range("A1").CurrentRegion.Rows.Count
'Neues Sheet mit dem Namen "Kreise" anlegen
Sheets.Add After:=ActiveWorkbook.Sheets(ActiveWorkbook.Sheets.Count)
ActiveSheet.Name = "Kreise"
Dim d As Worksheet
Set d = ThisWorkbook.Worksheets("Kreise")
'Zeichnet die benötigten Kreise mit Beispieltext
For i = 2 To LastRowC
If c.Cells(i, 1).Value "" Then
Set Kreis = ActiveSheet.Shapes.AddShape(msoShapeOval, x, y, 100, 100)
Kreis.Select
With Selection.ShapeRange.Fill
.Visible = msoTrue
.ForeColor.ObjectThemeColor = msoThemeColorAccent4
.ForeColor.TintAndShade = 0
.ForeColor.Brightness = 0.6000000238
.Transparency = 0
.Solid
End With
With Selection.ShapeRange.Line
.Visible = msoTrue
.ForeColor.ObjectThemeColor = msoThemeColorText1
.ForeColor.TintAndShade = 0
.ForeColor.Brightness = 0
.Transparency = 0
End With
Beispieltext = Worksheets("Zwischenablage").Cells(i, 1).Value
With Selection.ShapeRange.TextEffect
.FontName = "Arial"
.FontSize = 7
.Text = Beispieltext
End With
With Selection.ShapeRange.TextFrame2.TextRange.Font.Fill
.Visible = msoTrue
.ForeColor.RGB = RGB(0, 0, 0)
.Transparency = 0
.Solid
End With
ActiveSheet.Shapes(s).Name = Beispieltext
End If
x = x + 150
s = s + 1
Next i
End Sub
Sub Pfeile()
'Pfeile zwischen den Kreisen einzeichnen
Dim c As Worksheet
Dim d As Worksheet
Dim LastRowC As Long
Dim LastColC As Long
Dim Beispieltext As String
Dim Beispieltext2 As String
Dim row As Integer
Dim col As Integer
Set c = ThisWorkbook.Worksheets("Zwischenablage")
Set d = ThisWorkbook.Worksheets("Kreise")
LastRowC = c.Range("A1").CurrentRegion.Rows.Count
LastColC = c.UsedRange.Columns.Count
For row = 2 To LastRowC
Beispieltext = Worksheets("Zwischenablage").Cells(row, 1).Value
For col = 2 To LastColC
If c.Cells(row, col) "" Then
Beispieltext2 = Worksheets("Zwischenablage").Cells(row, col).Value
ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 15, 10, 20, 10).Select
Selection.ShapeRange.Line.EndArrowheadStyle = msoArrowheadTriangle
Selection.ShapeRange.ConnectorFormat.BeginConnect ActiveSheet.Shapes(Beispieltext), _
7
Selection.ShapeRange.ConnectorFormat.EndConnect ActiveSheet.Shapes(Beispieltext2), _
3
End If
Next col
Next row
End Sub