Hot News:
   

Mit Unterstützung durch:

  Foren auf CAD.de
  AutoCAD VBA
  Makro über Icon beenden und neues Makro starten

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

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 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


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

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 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

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.
良い精神



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

Beiträge: 22809
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 17. Mrz. 2026 12: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 Nur für otm 10 Unities + Antwort hilfreich

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


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

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 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 otm 10 Unities + Antwort hilfreich

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


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

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 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 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 >>)

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

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

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

(c)2026 CAD.de | Impressum | Datenschutz