| | |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | | |  | Inventor Schulung mit IHK-Zertifizierung , ein Kurs (bis zu 100% förderbar mit Bildungsgutschein)
|
|
Autor
|
Thema: Makro über Icon beenden und neues Makro starten (76 mal gelesen)
|
otm Mitglied Bauingenieur
 
 Beiträge: 195 Registriert: 26.08.2009 MS Win 11 AutoCAD Civil 3D 2026 VBA Enabler 2019 MS Access Database Engine X64 MSO 365 (64bit)
|
erstellt am: 17. Mrz. 2026 12:44 <-- editieren / zitieren --> Unities abgeben:         
Liebes Forum, wie kann man in AutoCAD ein laufendes VBA Makro, das auf eine Usereingabe wartet, über einen Icon in der Werkzeugleiste beenden und ein neues Makro starten? Die Usereingabe ("Block auswählen) ist so programmiert, dass Fehler, wie z.B. "Drücken der Taste ESC" in der Eingabe abgefangen werden. Das Problem ist, wenn bei laufendem Makro ein neues Makro über einen Icon in der Werkzeugleiste (^c^c-vbarun NeuesMakro gestartet werden soll, reagiert die Fehlerabfangroutine und das laufende Programm wird nicht beendet, sondern läuft weiter. Wie kann man das lösen? ------------------ Grüße aus München Christian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Ehrenmitglied V.I.P. h.c. 良い精神

 Beiträge: 22809 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 17. Mrz. 2026 12:55 <-- editieren / zitieren --> Unities abgeben:          Nur für otm
Drücken der ESC-Taste ist kein Fehler, sondern ein Befehl an das Programm den aktuellen Vorgang abzubrechen. Wer auch immer also "Drücken der Taste ESC" in der Eingabe abgefangen werden" programmiert hat, hat einen Fehler gemacht (es wurde gegen die gängige Syntax des Programm programmiert). Korrigiert den Fehler und die Frage wäre nicht aufgetaucht. Da dies auf der Hand liegt, du aber nicht angesprochen hast: Warum? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fred_tomke Mitglied Applikationsingenieur
 
 Beiträge: 157 Registriert: 14.06.2004 Map 2015 x64 Win7 x64 12 GB RAM ADN OpenDCL
|
erstellt am: 17. Mrz. 2026 12:59 <-- editieren / zitieren --> Unities abgeben:          Nur für otm
Hallo, das geht so nicht, wenn Du im laufenden Makro über die Fehlerbehandlung ESC abfängst und nicht ordnungsgemäß beenden kannst. Du könntest über die USERI...-Systemvariablen einen Flag setzen, der dem laufenden Makro das Signal gibt: Hey, bei ESC brich nicht ab, außer es ist der Flag gesetzt. Das bedeutet aber, Du musst auch den anderen Code anpassen. VG, Fred ------------------ Fred Tomke Dipl.-Ing. (FH) Landespflege Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
otm Mitglied Bauingenieur
 
 Beiträge: 195 Registriert: 26.08.2009 MS Win 11 AutoCAD Civil 3D 2026 VBA Enabler 2019 MS Access Database Engine X64 MSO 365 (64bit)
|
erstellt am: 18. Mrz. 2026 09:58 <-- editieren / zitieren --> Unities abgeben:         
Hallo zusammen, ich habe das so programmiert. Weil ich nicht weiß, wie man auf das Ereignis drücken der Taste ESC, wenn eine Usereingabe gefordert ist, abfangen soll. Der User soll einen Block anklicken. Er hat die Möglichkeit an dieser Stelle Verschiedene Eingaben zu tätigen. Strg+LM, Shift+LM, nur RM und eben auch auf ESC. Bei Esc wird die Eingabe in der Zeichnung beendet und das Programm springt zu eine Eingabeformular zurück. Wenn ich Eure Antworten richtig verstehe, sollte ich auf die Tastatureingabe ESC gar nicht reagieren. Richtig? Unten mal der gekürzte Code. Code:
.... On Error Resume Next ThisDrawing.Utility.GetEntity objH1, basePt1, "EINEN Block auswählen: " iKeyCode = GetAsyncKeyState(&H1B) ' abfragen, ob ESC noch gedrückt ist iMouseCode = GetAsyncKeyState(&H2) ' abfragen, ob rechte MouseTaste gedrückt ist iStrgCode = GetAsyncKeyState(&H11) ' abfragen, ob Strg gedrückt gehalten wird ... If Err <> 0 Then MsgBox Err.Number & vbCrLf & Err.Description Err.Clear If CBool(iShiftCode And &H8000) And CBool(iKeyCode And &H1B) Then 'MsgBox "Shift+[ESC]" ... ElseIf CBool(iKeyCode And &H1B) Then 'Abbruch mit Taste "Esc" 'MsgBox "[ESC]" 'Programm beenden GoTo Exit_Sub ElseIf CBool(iMouseCode And &H1) Then 'rechte Moustaste wurde gedrückt 'MsgBox "RM" ... GoTo Exit_Sub Else 'Bei Blockeingabe ins Leere geklickt If CBool(iStrgCode And &H8000) Then 'MsgBox "[Strg] + LM, Ins Leere geklickt" ... ElseIf CBool(iShiftCode And &H8000) Then 'MsgBox "[Shift] + LM, Ins Leere geklickt" ... Else 'MsgBox "LM, Ins Leere geklickt" ... End If End If Else … Endif
Wenn das Makro auf die Eingabe eines Blocks wartet und ich ein neues Makro über die Werkzeugleiste starte entsteht ein Fehler. Deshalb die Frage: Wie breche ich eine Usereingabe durch anklicken eines Icons in der Werkzeugleiste ab? ------------------ Grüße aus München Christian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |