Hallo Norbert,
nowa schrieb:Für was wird denn die Konstante H ( H = 29.7 / 2 ) definiert und taucht dann nicht mehr auf ?
Das ist einfach Schlamperei. Die Variable wurde verwendet um die Kurve vertikal mittig zu positionieren.
Das habe ich dann aber in die Excel-Formel verlegt und dann vergessen es im VBA-Code zu löschen.
Es wird aber noch schlimmer:
Erst wird in der Do-Loop-Schleife die Variable „Letzter“ belegt und danach mit „Letzter = 20“ wieder überschrieben.
Es ist also egal wie viele Zeilen die Wertetabelle hat, das Makro nutzt nur die ersten 20.
Das Makro habe ich nur schnell hingepfuscht um zu zeigen dass es geht.
Diese Do-Loop-Schleife ist auch keine gute Lösung. Wenn etwas schief geht, laufen die Dinger gerne einmal (ergebnislos) bis zum nächsten Stromausfall.
In der Tabelle einen benannten Bereich anzulegen und diesen im Makro zu verwenden wäre die bessere Lösung:
Code:
Sub bspl()
Dim CDraw As Object
Dim Werte As Range
Dim Letzter As Integer
Dim Version As String
Version = "17"
Set Werte = Range("Werte")
Letzter = Werte.Rows.Count
Set CDraw = GetObject("", "CorelDraw.Application." & Version)
With CDraw
.ActiveDocument.Unit = 4
Set bs = .ActiveDocument.CreateBSpline(Letzter, False)
For i = 1 To Letzter
bs.ControlPoints(i).SetProperties _
Werte(i, 1).Value, Werte(i, 2).Value, i = 1 Or i = Letzter
Next i
.ActiveLayer.CreateBSpline bs
End With
Set CDraw = Nothing
End Sub
Die Formel für den Namen „Werte“ könnte so aussehen:
=INDIREKT("A2:B"&ANZAHL2(Tabelle1!$B:$B))
nowa schrieb:...Aber für mich ist das überhaupt ein Rätsel, wie Excel die Daten in das Corel beamt...
Der „Beamer“ ist die COM-Schnitstelle. Das ist aber nicht der Anschluss mit dem wir früher unser Modem oder die Maus mit dem Rechner verbunden haben.
COM steht für „Component Object Model“. Die Zeile
Set CDraw = GetObject("", "CorelDraw.Application." & Version) setzt eine Objektvariable die CorelDraw repräsentiert.
Damit kann Excel dann auf Objekte, Eigenschaften und Methoden von CorelDraw zugreifen.
Gruß und Frohes Fest
Koter