Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  AutoCAD VBA
  Problem mit Excelverknüpfung

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 wird von NVIDIA zum Händler des Jahres gewählt - zum dritten Mal in Folge, eine Pressemitteilung
Autor Thema:  Problem mit Excelverknüpfung (3057 mal gelesen)
VBA-Piet
Mitglied
Bauingenieur


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

Beiträge: 15
Registriert: 07.04.2004

AutoCad 2000
Windows XP

erstellt am: 09. Mai. 2005 16:51    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 Experten,

ich stehe vor einem mir unerklärlichen Problem. Und zwar möchte ich aus Excel mit dem Befehl set AcadApp=GetObject ( ,"AutoCAD.Application") ein AutoCad(2000)-Objekt erstellen. Das funktioniert auf meinem Rechner auch ganz wunderbar, nur auf anderen Rechnern erscheint die Fehlermeldung "Objekterstellung durch ActiveX-Komponente nicht möglich", auch wenn AutoCad geöffnet ist. In der Hilfe zum Fehler stand was von einem Lizenzschlüssel in der Systemregistrierung, der gefunden werden müsse.

Hat hiermit jemand Erfahrung?

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

BloodyMess
Mitglied
Applicationingenieur


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

Beiträge: 604
Registriert: 06.06.2002

AutoCAD Map 3D 2005
Win XP pro

erstellt am: 09. Mai. 2005 18:25    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 VBA-Piet 10 Unities + Antwort hilfreich

Hallo,

evtl. hilft Dir dieser Beitrag weiter ... http://ww3.cad.de/foren/ubb/Forum259/HTML/000593.shtml

Gruss TP

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

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

VBA-Piet
Mitglied
Bauingenieur


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

Beiträge: 15
Registriert: 07.04.2004

AutoCad 2000
Windows XP

erstellt am: 10. Mai. 2005 09:50    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 BloodyMess,

danke für den link. Ich möchte mit meiner Excel-Tabelle jedoch auf verschiedene Versionen von Autocad zugreifen können, deshalb habe ich mich für eine späte Bindung entschieden und gar keinen Verweis auf die AutoCad-Objektbibliothek gesetzt sondern AcadApp zunächst als "Object" deklariert und mit AcadApp=GetObject ( ,"AutoCAD.Application") den Bezug zu AutoCad hergestellt. Das klappt auf meinem Rechner auch problemlos, nur beim Versuch das Programm auf fremden Rechnern zu starten kam in einigen Fällen besagte Fehlermeldung.
Und um die Sache noch etwas zu verkomplizieren: Auch bei einem Rechner, bei dem es bisher immer geklappt hatte, kam auf einmal die Fehlermeldung, nachdem das VBA-Programm einer Excel-Tabelle gestartet wurde, welches wiederum auf einem anderen Rechner funktioniert hatte (ich hoffe, das ist einigermaßen verständlich geschildert). Wenn der Fehler einmal aufgetreten ist, funktioniert auf dem betreffenden Rechner der Befeht GetObject ( ,"AutoCAD.Application") überhaupt nicht mehr, auch nicht in bisher "fehlerfreien" Tabellen.
Es hängt vielleicht wirklich mit der Systemregistrierung zusammen, damit kenne ich mich leider überhaupt nicht aus, weis vielleicht jemand, wie AutoCad dort zu finden ist?

Gruß Piet

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

BloodyMess
Mitglied
Applicationingenieur


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

Beiträge: 604
Registriert: 06.06.2002

AutoCAD Map 3D 2005
Win XP pro

erstellt am: 10. Mai. 2005 10:07    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 VBA-Piet 10 Unities + Antwort hilfreich

Hallo Piet,

meist ist es nur eine Zahl, die Du an "AutoCAD.Application.XX" anfügen musst. Klick Dich mal durch die Registrierung ... zu HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\RXX.X ... wobei XX.X für die unterschiedlichen AutoCAD Versionen steht. Dort gibt es einen Wert "CurVer" .. In diesem steht sowas wie dein "AutoCAD.Application", nur mit einer Zahl hintendran. Mit diesem Wert versuchst deinen Aufruf nochmal zu machen, dann sollte es klappen. Welche Version von Acad benutzt Du?

Gruss TP

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

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

VBA-Piet
Mitglied
Bauingenieur


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

Beiträge: 15
Registriert: 07.04.2004

AutoCad 2000
Windows XP

erstellt am: 11. Mai. 2005 13:34    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 BloodyMess,

erstmal vielen Dank für die schnelle Antwort.
Ich habe jetzt eine Weile getüftelt und werde jetzt die Routine aus deinem empfohlenen Link einbauen, die die Version von AutoCad ermittelt, als 14 für Acad 14, 15 für Acad 2000 usw. Damit klappts dann hoffentlich auch auf anderen Rechnern, ich werde das Ergebnis hier vermelden. Ich selber nutze Acad 2000.
In der Registrierung habe ich den CurVer-Wert gefunden, er ist bei mir ACAD-1001:407. Ein Aufruf mit:
Set AcadApp = GetObject(, "AutoCAD.Application.1001:407") bzw. nur 1001 oder 407 erzeugt jedoch die bekannte Fehlermeldung. Habe ich da vielleicht etwas falsch verstanden?

Gruß

Piet


Zitat:
Original erstellt von BloodyMess:
Hallo Piet,

meist ist es nur eine Zahl, die Du an "AutoCAD.Application.XX" anfügen musst. Klick Dich mal durch die Registrierung ... zu HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\RXX.X ... wobei XX.X für die unterschiedlichen AutoCAD Versionen steht. Dort gibt es einen Wert "CurVer" .. In diesem steht sowas wie dein "AutoCAD.Application", nur mit einer Zahl hintendran. Mit diesem Wert versuchst deinen Aufruf nochmal zu machen, dann sollte es klappen. Welche Version von Acad benutzt Du?

Gruss TP


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

BloodyMess
Mitglied
Applicationingenieur


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

Beiträge: 604
Registriert: 06.06.2002

AutoCAD Map 3D 2005
Win XP pro

erstellt am: 11. Mai. 2005 14:09    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 VBA-Piet 10 Unities + Antwort hilfreich

Hallo Piet,

war wohl der falsche Schlüssel. So ganz ohne ein Acad vor sich zu haben ist´s dann doch schwieriger.

Code:
Set AcadApp = GetObject(, "AutoCAD.Application.1001:407")
... funktioniert mitz Sicherheit nicht !!!

eher sowas ...

Code:
Set AcadApp = GetObject(, "AutoCAD.Application.15")

AutoCadVersionen
----------------
2002 --> AutoCAD.Application.15
2004 --> AutoCAD.Application.16

Probier mal den Registerzweig ... HKCR -> AutoCAD.Application -> CurVer .. dasteht es auch nochmal drinnen, wie du das Objekt anlegen/bekommen kannst.

Gruss TP

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

[Diese Nachricht wurde von BloodyMess am 11. Mai. 2005 editiert.]

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

VBA-Piet
Mitglied
Bauingenieur


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

Beiträge: 15
Registriert: 07.04.2004

AutoCad 2000
Windows XP

erstellt am: 12. Mai. 2005 13:19    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

Verflixt, ich habs gerade auf dem fremden Rechner ausprobiert und es klappt nicht so richtig!
Und zwar sind auf diesem Rechner sowohl Acad 14 als auch Acad 2000 installiert, eine Verbindung kommt aber nur mit Acad 14 zustande, obwohl ich eine Fallunterscheidung eingebaut habe:

Public Function AutoCADVersion()
On Error Resume Next
Err.Clear
Set AcadApp = GetObject(, "AutoCad.Application.14")
If Err.Number = 0 Then
    AutoCADVersion = "14"
    Exit Function
End If
Err.Clear
Set AcadApp = GetObject(, "AutoCad.Application.15")
If Err.Number = 0 Then
    AutoCADVersion = "2000"
    Exit Function
End If
End Function

Auch wenn Acad2000 läuft, wird es nicht erkannt, sondern der Fehler 429 "Objekterstellung durch ActivX-Komponente nicht möglich" tritt auf.
Seltsamerweise hat eine Verknüpfung mit AutoCad2000 auf diesem Rechner vorher funktioniert, bevor ein Excel-Makro aus einer Tabelle gestartet wurde, die auf einem anderen Rechner ebenfalls nur unter AutoCad14 funktionierte. Anscheinend wird die AutoCad14-Verknüpfung irgendwo "eingebrannt" und läßt sich nicht mehr so ohne weiteres lösen.
Ich hab mal noch ein wenig gegoogelt, tatsächlich scheint eine Acad14- Version hier Schwierigkeiten zu bereiten, es gibt einen Hinweis unter http://www.cadvault.com/forums/showthread.php?t=1928
Ich verbeiß mich mal etwas darin und vermelde das Ergebnis.

Grüße

Piet

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

BloodyMess
Mitglied
Applicationingenieur


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

Beiträge: 604
Registriert: 06.06.2002

AutoCAD Map 3D 2005
Win XP pro

erstellt am: 12. Mai. 2005 15:25    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 VBA-Piet 10 Unities + Antwort hilfreich

Soweit ich mich entsinnen kann, konnte man das 2000er immer mit " AutoCAD.Application" bekommen. Also ohne irgendeinen Zusatz. Nur in den höheren Versionen, war dieser von Nöten.

Schreib Dir doch bitte eine Funktion, welches auf dem jeweiligen Rechner die Registry ausliest, danach die Version bestimmt und dann den Aufruf macht

Aus der Hilfe:
Die GetObject Methode wird häufig verwendet um einen Verweis auf ein vorhandenes Object zu legen. Sie können damit jedoch auch ein neues Object anlegen.

Legst Du also dein VerweisObject so an wie Du, dann ist es so, als ob Du CreateObject aufrufst !!!!!
Du legst also ein neues Object an und versuchst nicht das gerade gestartete AutoCADObject zu bekommen.

Somit kannst Du auch mal mit dem Code, des Links, aus meinem ersten Beitrag rumspielen.

Viel Spass und Gruss TP

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

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

VBA-Piet
Mitglied
Bauingenieur


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

Beiträge: 15
Registriert: 07.04.2004

AutoCad 2000
Windows XP

erstellt am: 12. Mai. 2005 21:50    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 Bloody Mess,

Dein erster link enthielt wohl tatsächlich schon die Lösung:

Dim acApp As AutoCAD.AcadApplication
Set acApp = New AutoCAD.AcadApplication

ich hab es bloß nicht kapiert. Ich habe zwischenzeitlich in der Autodesk knowledge base gestöbert und darin einen ähnlichen Tipp gefunden, nämlich

Set acadApp = AcadApplication.

Damit funktioniert's!

Eigentlich wollte ich überhaupt keine Verweise auf AutoCad setzen, da mein Code als ActiveX control aufgerufen wird (Kopierschutz) und mit allen Acad-Versionen ab R14 laufen soll und nicht nur mit der refezenzierten Version. Jetzt habe ich den Verweis auf die AutoCad2000 Objektbibliothek gesetzt, welcher jedoch nur bei genannter Befehlszeile benötigt wird.
Diese Zeile steht am Ende der Funktion AutoCADVersion(), die vorher erst wie beschrieben mit Set ACADServer = GetObject(, "AutoCad.Application.XX") versucht das AutoCad-Objekt zu definieren. Dadurch funktioniert das Programm auch mit anderen Acad-Versionen.
Hier die komlette Funktion:

Public Function AutoCADVersion()
On Error Resume Next

Err.Clear
Set acadApp = GetObject(, "AutoCad.Application.14")
If Err.Number = 0 Then
    AutoCADVersion = "14"
    Exit Function
End If
Err.Clear
Set acadApp = GetObject(, "AutoCad.Application.15")
If Err.Number = 0 Then
    AutoCADVersion = "2000"
    Exit Function
End If
Err.Clear
Set acadApp = GetObject(, "AutoCad.Application.16")
If Err.Number = 0 Then
    AutoCADVersion = "2004"
    Exit Function
End If
Err.Clear
Set acadApp = GetObject(, "AutoCad.Application.16.1")
If Err.Number = 0 Then
    AutoCADVersion = "2005"
    Exit Function
End If
Err.Clear
Set acadApp = GetObject(, "AutoCad.Application")
If Err.Number = 0 Then
    Exit Function
End If

Err.Clear
Set acadApp = AcadApplication
If Err.Number = 0 Then
    Exit Function
End If

End Function

Ist vielleicht nicht besonders elegant, die Sache mit der Fehlerabfangung, aber vom Zugriff auf die Registry habe ich NOCH weniger Ahnung als vom Zugriff auf AutoCad.

Auf jeden Fall nochmal vielen Dank für die Hilfe!

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