Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  TurboCAD
  VBA-Schleifen?

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Turbocad
Autor Thema:  VBA-Schleifen? (2591 mal gelesen)
defekt
Mitglied
fashion design


Sehen Sie sich das Profil von defekt an!   Senden Sie eine Private Message an defekt  Schreiben Sie einen Gästebucheintrag für defekt

Beiträge: 50
Registriert: 03.05.2004

erstellt am: 03. Jun. 2005 23:49    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo!
Weiß jemand von euch, wie man eine Schleife in VBA macht?
Ich hab es hier versucht, aus irgendeinem Grund funktioniert sie aber nicht.
Es ist eine Abwandlung des Rechteck-Macros aus dem Forum, das einwandfrei funktioniert hat- an dieser Stelle vielen Dank an denjenigen, von dem es stammt!


Option Explicit

Dim xOrigin
Dim yOrigin
Dim zOrigin

xOrigin = 0
yOrigin = 0
zOrigin = 0

Dim gxLayer
Dim gxURec
Dim gxPlayList
Dim gxSelList


On Error Resume Next
Set gxPlayList = ActiveDrawing.GraphicSets("PlayList")
if (Err.Number <> 0) then
Set gxPlayList = ActiveDrawing.GraphicSets.Add("PlayList", false)
else
gxPlayList.Clear
End If
On Error GoTo 0
On Error Resume Next
Set gxSelList = ActiveDrawing.GraphicSets("SelectionList")
if (Err.Number <> 0) then
Set gxSelList = ActiveDrawing.GraphicSets.Add("SelectionList", false)
else
gxSelList.Clear
End If
On Error GoTo 0

Properties("$SNAPMODE") = "-2147479488"
Properties("$SNAPMODE") = "-2147479551"
Dim gxChild
Set gxURec = ActiveDrawing.AddUndoRecord("Script Play Add Graphic Entity")
Set gxChild = gxPlayList.Add(11,,false,"normal lines")                                     


'bis hierher unverändert
'Es soll die Kurve einer mathematischen Gleichung dargestellt werden, die Gleichung lautert x=y²
'Die Kurve ist nicht rund, sondern die Richtung ändert sich bei jedem neuen Wert, den y annimmt
'Der Einfachheit halber hier mal ein fixer Wert für y, der bei jedem Schleifendurchlauf um 1 höher wird
'****************************************************************************************************************************
dim y     
y = 1     
dim x     

'****************************************************************************************************************************
Do Until y = 10
x = y*y
With gxChild.Vertices
.Clear
Dim gxVrt
Set gxVrt = .Add(xOrigin + x, yOrigin + y, zOrigin + 0.0000000000000000, true, true, true, true, true, false)

End With

y = y + 1

Loop

Set gxChild = gxPlayList(0)
ActiveDrawing.Graphics.AddGraphic gxChild
gxURec.AddGraphic gxChild
gxChild.Draw
gxURec.Close

gxPlayList.Delete
Set gxPlayList = Nothing
gxSelList.Delete
Set gxSelList = Nothing

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

defekt
Mitglied
fashion design


Sehen Sie sich das Profil von defekt an!   Senden Sie eine Private Message an defekt  Schreiben Sie einen Gästebucheintrag für defekt

Beiträge: 50
Registriert: 03.05.2004

erstellt am: 04. Jun. 2005 16:41    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

oK also wirklich rausgefunden, wieso es nicht funktioniert, hab ich nicht, aber es funktioniert, wenn man anstatt des Rechteck-Makros ein Makro "aufzeichnet" also recordet, und dieses dann abändert.
Dieses hier ist auch insofern anders, als statt "Linien" Bezierkurven gezeichnet werden, und das Ergebnis dann eine richtige Kurve (Parabel) ist und kein aus Teillinien zusammengestückeltes Etwas.
Das Ergebnis sieht dann so aus und funktioniert (zumindest bei mir):

Option Explicit

Dim gxLayer
Dim gxURec
Dim gxPlayList

On Error Resume Next
Set gxPlayList = ActiveDrawing.GraphicSets("PlayList")
if (Err.Number <> 0) then
Set gxPlayList = ActiveDrawing.GraphicSets.Add("PlayList", false)
else
gxPlayList.Clear
End If
On Error GoTo 0

Start "Insert|Curve|Bezier"
On Error Resume Next
ActiveDrawing.Styles("Normal Curves").Activate
if Err.Number <> 0 then
MsgBox Err.Description,,"Playback error"
End If

Dim min
min = InputBox("Ende der Parabel im Minusbereich:", "Dateneingabe")
Dim x
x= -min
Dim max
max = InputBox("Ende der Parabel im Plusbereich:", "Dateneingabe")
MsgBox(max)
Dim y

Do Until x=max+1

     
y = x*x/10      'Parabel: x²=10y

Click x, y, 0.000000000000000, 1

x = x+1

Loop

On Error GoTo 0

DoLocalMenu 101, 0, 2.9952293581086886, 8.9858416410855622, 0.0000000000000000
gxPlayList.Delete
Set gxPlayList = Nothing

Einfach in TC rechts den MakroRecorder-Reiter anklicken, dort hineinkopieren und auf die Schaltfläche "Play Script" (wie das in der deutschen Version heisst, kann ich leider nicht sagen) klicken, und ausprobieren.
Beim Ablauf des Makros werden zwei Werte abgefragt. Dies dient nur dazu, damit das Makro nicht ewig weiterläuft und eine endlose Kurve herauskommt, sondern die Schleife auch mal ein Ende hat. Es ist egal, was man da eingibt, irgendwas zwischen 10 und 20 oder was auch immer. Wenn man beide Male denselben Wert eingibt, sind die Parabelschenkel gleich lang. Es reicht beide Male ein positiver Wert.
Die erzeugte Kurve ist eine Parabel. Wer möchte, kann die Parabelgleichung (hier: y=x*x/10) abändern und ausprobieren, was dann für Parabeln rauskommen.
Es würde mich interessieren, ob es in der deutschen Version 10 bzw. 10.1 auch funktioniert, würde mich diesbezüglich über Rückmeldungen freuen!
Wenn es funktioniert, könnte ich für Makro-Anfänger ein Tutorial machen, wie man solch ein Makro macht (also ein aufgezeichnetes abändert).

Viele Grüße
Andrea

[Diese Nachricht wurde von defekt am 04. Jun. 2005 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

defekt
Mitglied
fashion design


Sehen Sie sich das Profil von defekt an!   Senden Sie eine Private Message an defekt  Schreiben Sie einen Gästebucheintrag für defekt

Beiträge: 50
Registriert: 03.05.2004

erstellt am: 10. Jun. 2005 19:05    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Funktioniert die Routine bei euch nicht oder hatte noch niemand Zeit bzw. Lust, sie auszuprobieren?

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

H. Scheurich
Mitglied



Sehen Sie sich das Profil von H. Scheurich an!   Senden Sie eine Private Message an H. Scheurich  Schreiben Sie einen Gästebucheintrag für H. Scheurich

Beiträge: 161
Registriert: 21.06.2002

erstellt am: 10. Jun. 2005 21:40    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für defekt 10 Unities + Antwort hilfreich

Hallo Andrea,

ich habe dein Script mal so probiert wie du es
beschrieben hast. Die Wiedergabe bleibt bei
folgender Zeile stehen:

Start "Insert|Curve|Bezier"

Du arbeitest mit der englischen Version. Getestet habe ich
es mit der deutschen V10.1 pro. Für die deutsche Version
muß das Script angepast werden.
Ansonsten ist deine Idee mit dem Tutorial gut. Auf der Strecke
gibt es immer noch viel zu tun.
Konntest du deine Programmierprobleme aus deiner TC-Startzeit
lösen?

Gruss,

H. Scheurich.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

defekt
Mitglied
fashion design


Sehen Sie sich das Profil von defekt an!   Senden Sie eine Private Message an defekt  Schreiben Sie einen Gästebucheintrag für defekt

Beiträge: 50
Registriert: 03.05.2004

erstellt am: 10. Jun. 2005 21:55    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo!
Oje, also funktioniert es nicht.
Leider habe ich die deutsche Version nicht, nur die V6, in dieser gabs aber noch kein VBA oder MacroRecorder.
Jetzt müsste mal jemand, der die deutsche V10 hat, eine neues Formular/neue Datei aufmachen, dann auf den Startbutton des Makrorecorders klicken, mit der Maus im Werkzeugmenü Bezierkurven anklicken und schauen, was da im Recorder kommt. Dann könnte man die Zeile, wo es hängenbleibt, ersetzen.
Vielleicht kann das ja mal wer machen? Wenn sich das Skript dann nur in dieser einen Zeile unterscheidet, dann braucht man diese ja nur auszutauschen.

Schwierig wirds, wenn der Recordercode der 10erVersion ganz anders aussieht, das wär dann blöd, denn dafür kann ich dann keine Tutorials schreiben, die hab ich ja nicht. Und ausser mir arbeitet kaum wer mit einer englischen Version nehme ich mal an.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

defekt
Mitglied
fashion design


Sehen Sie sich das Profil von defekt an!   Senden Sie eine Private Message an defekt  Schreiben Sie einen Gästebucheintrag für defekt

Beiträge: 50
Registriert: 03.05.2004

erstellt am: 10. Jun. 2005 22:05    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

@ H. Scheurich
Ja die Anfangsprobleme... das war schwierig. Damals hatte ich glaube ich noch eine Probeversion, jetzt wo ich die 9er gekauft habe, bin ich wesentlich entspannter. Ich bin noch am Einarbeiten und versuche mir möglichst viel Wissen anzulesen. Mit VBA komme ich noch nicht klar, die Entwicklungsumgebung ist sehr komplex. Aber ich finde den Makrorecorder super, und damit probiere ich viel herum, ersetze Punkteingaben durch Variable, jetzt wo ich MsgBox und InputBox kenne, geht alles schon ein bisschen leichter.
An dem, was ich mir vorgestellt habe, bin ich noch lange nicht dran, aber ich lerne dazu. Ich finds auf alle Fälle toll, hier Fragen stellen zu können und lese natürlich viel mit, auch wenn mir manches noch zu hoch ist.
Ich finde es halt sehr schade, dass das Programmieren in TC im Handbuch nur periphär behandelt wird, es könnte schon aufschlussreicher sein. Klar gibts keine Bücher wie "VBA lernen mit MSWord" für TurboCAD, aber man hätte da schon sehr viel mehr schreiben können. So muss man sich alles zusammensuchen und viel herumexperimentieren, was eben sehr mühsam ist. Grade als Anfänger ist das besonders schwer, wenn man vorher noch nie was mit VBA gemacht hat. Und ich glaube auch nicht, dass es sehr viel bringen würde, gezielt Word-VBA zu lernen, weil die beiden Anwendungen grundsätzlich ganz verschieden sind.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

H. Scheurich
Mitglied



Sehen Sie sich das Profil von H. Scheurich an!   Senden Sie eine Private Message an H. Scheurich  Schreiben Sie einen Gästebucheintrag für H. Scheurich

Beiträge: 161
Registriert: 21.06.2002

erstellt am: 10. Jun. 2005 22:06    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für defekt 10 Unities + Antwort hilfreich

Hallo Andrea,

genau so ist es.
Habe das mal gemacht und bis auf eine Fehlermeldung

MsgBox Err.Description,,"Playback error"
(ähnliche Ursache wie erster Fehler)

läuft dein Script.

Also, dann mal los. Schreib mal Tutorials.
Die Übersetzung in die deutscher Version können wir gemeinsam machen.
Es werden sich bestimmt noch mehr Leute finden die mit helfen.

Gruss,
H. Scheurich.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz