Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  AutoCAD VBA
  Makroaufruf mit Parameterübergabe

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 Autodesk Produkte
  
PNY präsentiert die neue NVIDIA RTX A400 und die A1000 Grafikkarte, eine Pressemitteilung
Autor Thema:  Makroaufruf mit Parameterübergabe (3591 mal gelesen)
Goofy007
Mitglied
Vermessungstechniker


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

Beiträge: 578
Registriert: 06.11.2004

Map3D 2018 und Civil3D 2018

erstellt am: 28. Mai. 2005 15:28    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 Forum,

Ich habe leider noch nicht viel Erfahrung mit VBA, und kann weder in meinen Bücher noch per Suche im Forum die Antwort auf folgende Fragen finden:

1. Wie kann ich über einen AutoCad-Button ein VBA-Makro aufrufen, und diesem Parameter mitgeben?
(Die in VBA üblichen Parameterübergaben scheinen nicht zu funktionieren.)

2. Wenn ich versuche nach der Ausführung des Makros die dvb-Datei mittels vbaentf wieder zu entladen, so funktioniert das nicht, weil das Makro den im Aufruf nachfolgenden Text als Eingabe für meinen ersten getpoint verwendet. Wie kann ich das verhindern.

Das Ziel meiner Fragen wäre die Möglichkeit über ein Menümacro eine VBA-Datei zu laden, anschließend ein Makro auszuführen, wobei ich optional Parameter an das Makro übergeben möchte, und dann die VBA-Datei wieder zu entladen.

Ist das möglich?
Bzw. wenn nicht, wie würde ein möglicher Lösungsansatz dafür aussehen?

mfg didi

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

Mike_mair
Mitglied
CAD&CAE Administrator


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

Beiträge: 53
Registriert: 09.07.2004

erstellt am: 09. Jun. 2005 17: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 Nur für Goofy007 10 Unities + Antwort hilfreich

Also von einem Butten einen Makro aufrufen ist eigentlich überhautp kein Problem du musst dazu ja nur in der Menüdatei definieren:

zB:
ID_MeineFun [_Button("Dies ist meine Funtion", Bild_Klein.bmp, Bild_Groß.bmp)]^c^c^p-vbarun Modul.MeineFun

Das Problem ist, irgendwelche Prameter direkt zu übergeben, das geht zwar irgenwie, aber das ist eigentlich nit grad super.

Ich habe es so gelöst:

Ich schreibe mir eine kleines Lisp Programm in dem ich die Prameter in die Registry speicher.

zB.:

(defun c:MeineFun()
(vl-registry-write "HKEY_CURRENT_USER\\Software\\VB and VBA Program Settings\\MeinProg" "PrameterI" "EinstellungI)
(vl-vbarun Modul.MeineFun"))

... und im VBA rufe ich diese Informationen dann wieder über die registry ab

Public Sub MeineFun()
   
    Dim Einstellung As String
   
    'Einstellungen aus der Registrierung abrufen
    Einstellung = GetSetting("MeinProg", "PrameterI", "EinstellungI", "Standardeinstellung")
   
    'Weiter Funktion
    MsgBox Einstellung
   
End Sub

---------------

Wenn du jedoch nit zu viel Einstellungen hast, dann kannst du auch die Uservariablen von Autocad benutzen.

USERS1 bis USERS5 --> für Stringvariablen (werden nicht gespeichert)
USERI1 bis USERI5 --> für Ganzzahlen (werden in Zeichnung gespeichert)
USERR1 bis USERR5 --> für Realzahlen (werden in Zeichnung gespeichert)

zB.:

(defun c:MeineFun()
(setvar "USERS1" "Meine Einstellung")
(vl-vbarun Modul.MeineFun"))

... und im VBA rufe ich diese Informationen dann wieder über die registry ab

Public Sub MeineFun()
   
    Dim Einstellung As String
   
    'Einstellungen aus der Registrierung abrufen
    Einstellung = ThisDrawing.GetVariable("USERS1")

    'Weiter Funktion
    MsgBox Einstellung
   
End Sub

--------------------------

Ich würde jedoch nicht immer das VBA Projekt laden und danach wieder entladen. Da es nicht stört würde ich es gleich am Anfang laden. Dann brauchst du dann nur deine VBA Funktion ausführen.

Ich lasse in meiner Firma 5 VBA Projekt laden und davon ist eines schon 5Mb groß. Das merkt man aber nur einmal beim starten vom AutoCAD... sprich wenn es nit abstürz 1x am Tag *sfg*

lg mike

------------------
Michael Mair

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

Goofy007
Mitglied
Vermessungstechniker


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

Beiträge: 578
Registriert: 06.11.2004

Map3D 2018 und Civil3D 2018

erstellt am: 09. Jun. 2005 20:29    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 Michael!

Danke für die Antwort, ich hatte schon Angst, gar keine mehr zu bekommen.

Ich bin mir nicht sicher, ob ich das richtig verstanden habe.
Korrigier mich bitte wenn ich mich irre.

Du schreibst ein Lisp, welches dir Werte in der Registry ablegt, und diese Werte werden dann vom VBA Modul ausgelesen.

Um diese Methode zum Aufruf inkl. Parameterübergabe zu verwenden, muss ich nun vom Menümacro erst das Lisp-Programm ausführen lassen, und das das VBA-Makro starten.


Eigentlich hatte ich ja gehofft, das es einen einfacheren Weg gibt, aber das Leben ist ja kein Wunschkonzert ...

jedenfalls mal
Herzlichen Dank!

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

Mike_mair
Mitglied
CAD&CAE Administrator


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

Beiträge: 53
Registriert: 09.07.2004

erstellt am: 10. Jun. 2005 07:32    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 Goofy007 10 Unities + Antwort hilfreich

Ich habe das mit dem Übergeben mal Probiert, aber genau wissen tu ich es auch nicht mehr. Da schreibt man im VBA Code ein Anweisung die auf eine Eingabe von AutoCAD wartet. Somit würde dann deine Anweisung davor den Macro aufrufen und dann die Werte "eingeben".

Ist meiner meinung nach aber keine gute lösung. Du wirst sie bei der AutoCAD Hilfe im FAQFrequently asked questions (Häufig gestellte Fragen) (Englisch)... jedenfalls ist es im 2002 da gestanden.

-----------------

Wenn du dir aber das mit der Registry ersparen willst dann würde ich dir wirklich empfehlen die Systemvariablen
USERS1 - USERS5
USERI1 - USERI5
USERR1 - USERR5
Auf die kannst du im AutoCAD, Lisp und VBA einfach drauf zugreifen, und es ist die einfachste Möglichkeit um deine benutzerdefinierte Einstellungen in der Zeichnung zu speichern (ACHTUNG: Nur die Werte für USERI1 - USERI5/USERR1 - USERR5 werden in der Zeichnung gespeichert; USERS1 - USERS5 werden nur temporär gespeichert)

------------------

dann noch viel spass beim programmieren...

lg mike

------------------
Michael Mair

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

Goofy007
Mitglied
Vermessungstechniker


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

Beiträge: 578
Registriert: 06.11.2004

Map3D 2018 und Civil3D 2018

erstellt am: 10. Jun. 2005 09:28    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 Michael,

Das mit dem Übergeben im Macro hab ich probiert, aber ich geb dir recht, das ist keine gute Lösung.

Also nochmals Danke
mfg Didi

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)2025 CAD.de | Impressum | Datenschutz