im Original geht es auch um VBA, das Modul läuft nicht, weil
VBA ‚Line‘ nicht versteht. Ich bin gerade dabei das über die
API zu umgehen. Mache ich es mir zu schwer? Gibt’s in VBA doch
einen ‚Line‘-Befehl, den ich noch nicht gefunden habe? (.PSet
würde auch gehen, habe ich aber auch nicht gefunden.) Wie
‚malt‘ man mit VBA per Programm eine Linie (in ein Image oder
auf die Form)? Das kann doch nicht sein, daß ich das wirklich
so machen muß, wie ich es gerade angefangen habe?
Hallo Rainer,
ich würde keine Linie nehmen sondern gleich ein Rechteck, anbei die beiden Codes.
Dummerweise läuft der untere nicht glatt weil es unten dazu kommt daß es 2 Rechtecke mit Namen „Weiß“ gibt, das mag der Editor nicht so, anscheinend doch nihct multi-fähig 
Manuell kann man sehr wohl kopieren und einfügen, dann benennt er das neue Rechtck „Rectangle X“.
Zur Not muss ich den Programmaufbau umschreiben.
Die meisten Voreinstellungen des Rechtecks wie z.B Transparency kann man rauswerfen.
Sub tt()
Dim meinDokument
Set meinDokument = Worksheets(1)
'BeginX, Beginy, EndX, EndY
With meinDokument.Shapes.AddLine(10, 10, 250, 250).Line
.DashStyle = msoLineDashDotDot
.ForeColor.RGB = RGB(50, 0, 128)
End With
End Sub
Sub ttt()
Dim R, Buchstabe, B
Buchstabe = "010011010100110101001101"
For Each R In ActiveSheet.Shapes
If R.Name = "Schwarz" Or R.Name = "Weiß" Or R.Name Like "Rectangle\*" Then R.Delete
Next R ' left,top,widht,height
ActiveSheet.Shapes.AddShape(msoShapeRectangle, 500, 200, 10, 100).Name = "Schwarz"
ActiveSheet.Shapes("Schwarz").Select
With Selection
.ShapeRange.Fill.Visible = msoTrue
.ShapeRange.Fill.Solid
.ShapeRange.Fill.ForeColor.SchemeColor = 8
.ShapeRange.Fill.Transparency = 0#
.ShapeRange.Line.Weight = 0.75
.ShapeRange.Line.DashStyle = msoLineSolid
.ShapeRange.Line.Style = msoLineSingle
.ShapeRange.Line.Transparency = 0#
.ShapeRange.Line.Visible = msoTrue
.ShapeRange.Line.ForeColor.SchemeColor = 64
.ShapeRange.Line.BackColor.RGB = RGB(255, 255, 255)
.Visible = False
End With
ActiveSheet.Shapes.AddShape(msoShapeRectangle, 510, 200, 10, 100).Name = "Weiß"
ActiveSheet.Shapes("Weiß").Select
With Selection
.ShapeRange.Fill.Visible = msoTrue
.ShapeRange.Fill.Solid
.ShapeRange.Fill.ForeColor.SchemeColor = 9
.ShapeRange.Fill.Transparency = 0#
.ShapeRange.Line.Weight = 0.75
.ShapeRange.Line.DashStyle = msoLineSolid
.ShapeRange.Line.Style = msoLineSingle
.ShapeRange.Line.Transparency = 0#
.ShapeRange.Line.Visible = msoTrue
.ShapeRange.Line.ForeColor.SchemeColor = 64
.ShapeRange.Line.BackColor.RGB = RGB(255, 255, 255)
.ShapeRange.Line.Visible = msoFalse
.Visible = False
End With
With ActiveSheet
For B = 1 To Len(Buchstabe)
If Mid(Buchstabe, B, 1) = "0" Then
.Shapes("Weiß").Copy
Else
.Shapes("Schwarz").Copy
End If
MsgBox .Shapes.Count
.Paste
MsgBox .Shapes.Count
MsgBox .Shapes.Item(.Shapes.Count).Name
MsgBox .Shapes.Item(.Shapes.Count - 1).Name
'.Shapes.Item(.Shapes.Count).Select
'With Selection
With .Shapes.Item(.Shapes.Count)
.ShapeRange.Left = B \* 10
.ShapeRange.Top = 150
.ShapeRange.widht = 10
.ShapeRange.Height = 100
End With
Next B
End With
Range("A1").Select
End Sub
Gruß
Reinhard