Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Rund um AutoCAD
  AutoCAD - Befehle mittels VBA aufrufen

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
Autor Thema:  AutoCAD - Befehle mittels VBA aufrufen (2275 mal gelesen)
Sagu
Mitglied
Dipl - Ing


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

Beiträge: 31
Registriert: 11.03.2007

erstellt am: 11. Mrz. 2007 15: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

Hallo

Ich möchte mittels eines aus Excel aufgerufenen VBA-Makros Autocad öffnen und diverse Befehle ausführen lassen...
Leider habe ich herzlich wenig Ahnung von Excel/VBA, Acad/VBA und stoße ständig auf Widerstand seitens des Kompilers 

ich habe es mittlerweile geschafft Autocad starten zu lassen, habe auch gelesen, dass "SendCommand" die gesuchte Wunderwaffe sein soll, bekomme diesen Befehl aber leider nicht zum laufen ...

Hier ist mal mein Quellcode:

Sub Export()
    Dim fenster As Double
    Dim ac As Object
        Set ac = CreateObject("Autocad.application")
    ac.Visible = True
   
    ac.ThisDrawing.SendCommand "_circle 12,12 12"
   
End Sub


Hierbei funktioniert ja auch alles super bis zur SendCommand-Zeile:
es erscheint die Fehlermeldung:
Laufzeitfehler '438': Objekt unterstützt diese Eigenschaft oder Methode nicht.

Ich benutze AutoCad 2004 und Excel 2003. Des weiteren habe ich über den VBA-Editor => Extras => Verweise die Bibliotheken
- Autocad 2004- Typenbibliothek
- Autocad Focus Control for VBA Type Library
- Autocad/ObjectDBX Common 16.0- Typenbibliothek
eingebunden...
Was mache ich falsch?!? wieso funktioniert das nicht... ich habe ein bischen rumprobiert und kam zu dem Schluss, dass er die "ThisDrawing"-Klasse nicht kennt bei mir =( dies kann aber auch ein Trugschluss sein.
Danke schon mal fürs reinschauen

MFG Sagu

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

startrek
Mitglied
Architekt


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

Beiträge: 1361
Registriert: 13.02.2003

.

erstellt am: 11. Mrz. 2007 17:26    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 Sagu 10 Unities + Antwort hilfreich

Moinmoin und willkommen!

Für's nächste Mal, zum Acad/VBA gehts hier entlang ;-)

Fensterputzpausenmakro ohne sendcommand 'bähh';-):

Code:

Sub x()
    Dim acadApp As Object
    Dim p#(2)
    Set acadApp = CreateObject("autocad.application")
    acadApp.Visible = -1
    'p=0,0,0 (Ursprung) | Radius = 5
    acadApp.ActiveDocument.ModelSpace.AddCircle p, 5#
    acadApp.ZoomExtents
End Sub

F1 auf sendcommand in der Acad/VBA Hilfe bringt dies:
Code:

Sub Example_SendCommand()
  ' This example sends a command for evaluation to the AutoCAD command line
  ' of a particular drawing
 
  ' Create a Circle in the active drawing and
  ' zoom to display the entire circle
  ThisDrawing.SendCommand "_Circle" & vbCr & "2,2,0" & vbCr & "4" & vbCr
  ThisDrawing.SendCommand "_zoom" & vbCr & "a" & vbCr
 
  ' Refresh view
  ThisDrawing.Regen acAllViewports
 
  MsgBox "A circle command has been sent to the command line of the current drawing."
End Sub

So, weitergehts ...

hth, Nancy

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

Sagu
Mitglied
Dipl - Ing


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

Beiträge: 31
Registriert: 11.03.2007

erstellt am: 11. Mrz. 2007 17: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

Vielen Dank für die schnelle Hilfe.
Das zweite Programm läuft super. Das mit dem SendCommand ist schwierig! Im ersten Sub kommt wieder mal ein "Laufzeitfehler '424' Objekt erforderlich". VBA scheint diesen Befehl nicht zu kennen. SendCommand wäre schon komfortabel .

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

startrek
Mitglied
Architekt


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

Beiträge: 1361
Registriert: 13.02.2003

.

erstellt am: 11. Mrz. 2007 18:14    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 Sagu 10 Unities + Antwort hilfreich

Sendcommand komfortabler??

Na wennde meinst ..., des Menschen Wille ist sein Himmelreich oder so;-)
(Ich meine - wir reden dadrüber sicher später nochmal)

Code:
Sub x()
    Dim acadApp As Object, p#(2)
    Set acadApp = CreateObject("autocad.application")
    With acadApp
        .Visible = -1
        '''.ActiveDocument.ModelSpace.AddCircle p, 5#
        .activedocument.SendCommand "_circle" & Chr(13) & "12,12,12" & Chr(13) & "5" & Chr(13)
        .ZoomExtents
    End With
End Sub

Grüsse, Nancy

[Diese Nachricht wurde von startrek am 11. Mrz. 2007 editiert.]

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

Sagu
Mitglied
Dipl - Ing


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

Beiträge: 31
Registriert: 11.03.2007

erstellt am: 11. Mrz. 2007 18: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

Super,
hat funktioniert. Jetzt bin ich ein glücklicherer Mensch.

Danke

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

startrek
Mitglied
Architekt


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

Beiträge: 1361
Registriert: 13.02.2003

.

erstellt am: 11. Mrz. 2007 19:03    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 Sagu 10 Unities + Antwort hilfreich

Freut' mich :-), aber BitteBitte, etwas muss ich mal noch loswerden:

> Ich möchte mittels eines aus Excel aufgerufenen VBA-Makros
> Autocad öffnen und diverse Befehle ausführen lassen...
> Leider habe ich herzlich wenig Ahnung von Excel/VBA, Acad/VBA

Das erklärt das SendCommand erstmal insofern als komfortabler, da du kaum Syntaxkenntnis brauchst und nur die Commandlinebefehle nachbauen musst, und zack, schon kannste aus Excel 'zeichnen'.

Aber glaub' mir, mit Sendcommand biste auf Dauer wirklich schlecht beraten, was zB. wennde dem Kreis eine andre Farbe/Layer/etc. geben willst? Das würde dann weniger was mit dem Sendcommand-Gemurkse.

Mein Ratschlag wäre:
schau' dich mal im Acad-VBE um, Objektkatalog <F2> und Hilfe <F1>,
die Hilfe ist sehr, sehr gut (auch/gerade) zu den StandardObjekten:
AddCircle, AddLine, AddText, AddPolyline, AddArc ...

Das Erstellen/Zugriff ist viel objektnaher, übersichtlicher und ist ein besserer Schritt in Richtung 'Programmierung' als SendcommandMurks.
Sicher, es gibt Befehle, die gehen (leider) nur mit sendcommand, aber nixdestotrotz muss man sich das besser gar nicht erst angewöhnen,
... mach's lieber gleich richtig, da weiss man was man hat;-)

lg Nancy

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



Entwicklungsingenieur (m/w/d) Medizintechnik
Menschen und Technologien zu verbinden, den Perfect Match für unsere Kunden zu gestalten, immer die richtigen Expert:innen für die jeweilige Herausforderung zu finden - das ist unser Anspruch bei FERCHAU und dafür suchen wir dich: als ambitionierte:n Kolleg:in, der:die wie wir Technologien auf die nächste Stufe bringen möchte. Wir realisieren spannende Projekte für namhafte Kunden in allen Technologiebereichen und für alle Branchen und übernehmen Verantwortung für komplexe Entwicklungsprojekte....
Anzeige ansehenEntwicklung
Sagu
Mitglied
Dipl - Ing


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

Beiträge: 31
Registriert: 11.03.2007

erstellt am: 11. Mrz. 2007 21:36    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

Genau die Syntaxkenntnis von VBA ist mein Problem.
Meine Motivation war ein Berechnungsalgorithmus mit 2500 Kreisen in Excel zu erstellen, der mir eine bestimmte Fläche ermittelt. Dieser Algorithmus ist nicht ganz genau. Diese Ungenauigkeit ist in Grenzsituationen nicht abzuschätzen(, deshalb der Umweg über AutoCAD). Die Daten der Kreise sollten sich normalverteilt verhalten, also hab ich sie über die Funktion NORMINV(ZUFALLSZAHL()) in Excel generiert und über eine Script Datei in AutoCAD importiert. Die Scriptdatei ist wie folgt aufgebaut:

KREIS -5.4,5.4 0.8956
SCHRAFF S -4.5044,5.4
SCHIEBEN -7.2,7.2 -3.6,3.6
-5.4,5.4 0.0158,0.1620 

Der Radius von KREIS und der Endpunkt von SCHIEBEN sind Veränderliche und aus der Excel Datei einzulesen. Nun dachte ich mit Sendcommand wäre dies möglich.
ich hab es mal über die Objekte probiert. Die ACAD - Hilfe ist wirklich nicht schlecht,
aber VBA mag meine Syntax „acadApp.ActiveDocument.ModelSpace.AddCircle (Center, radius)” im diesem Makro nicht:

Sub Kreis()
    Dim acadApp As Object
    Dim Center(0 To 2) As Double
    Dim radius As Double
    Dim x As Double
    Dim y As Double
    Dim r As Double
 
    x = Range("AG8")
    y = Range("AH8")
    r = Range("AI8")
    Center(0) = x:  Center(1) = y: Center(2) = 0
    radius = r
    Set acadApp = CreateObject("autocad.application")
    acadApp.Visible = -1
    acadApp.ActiveDocument.ModelSpace.AddCircle (Center, radius)
   
End Sub

Laut der ACAD Hilfe sollte es so funktionieren. Was mach ich falsch?
Wenn ich das geschafft habe, wollte ich mit einer Schleife rasterweise über die Zeichnung gehen und überprüfen ob eine Füllung (Schraffur Solid) an jedem Rasterpunkt vorhanden ist oder nicht. Bei fehlender Schraffur sollte ich doch einen anderen Rückgabewert als bei einer Schraffur erhalten. Gibt es hier überhaupt eine Möglichkeit? Meiner Meinung nach müsste es ähnlich dem Mauszeiger funktionieren, wenn dieser eine Schraffur markiert.

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