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

 Beiträge: 15 Registriert: 07.04.2004 AutoCad 2000 Windows XP
|
erstellt am: 09. Mai. 2005 16:51 <-- editieren / zitieren --> Unities abgeben:         
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
  
 Beiträge: 604 Registriert: 06.06.2002 AutoCAD Map 3D 2005 Win XP pro
|
erstellt am: 09. Mai. 2005 18:25 <-- editieren / zitieren --> Unities abgeben:          Nur für VBA-Piet
|
VBA-Piet Mitglied Bauingenieur

 Beiträge: 15 Registriert: 07.04.2004 AutoCad 2000 Windows XP
|
erstellt am: 10. Mai. 2005 09:50 <-- editieren / zitieren --> Unities abgeben:         
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
  
 Beiträge: 604 Registriert: 06.06.2002 AutoCAD Map 3D 2005 Win XP pro
|
erstellt am: 10. Mai. 2005 10:07 <-- editieren / zitieren --> Unities abgeben:          Nur für VBA-Piet
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

 Beiträge: 15 Registriert: 07.04.2004 AutoCad 2000 Windows XP
|
erstellt am: 11. Mai. 2005 13:34 <-- editieren / zitieren --> Unities abgeben:         
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
  
 Beiträge: 604 Registriert: 06.06.2002 AutoCAD Map 3D 2005 Win XP pro
|
erstellt am: 11. Mai. 2005 14:09 <-- editieren / zitieren --> Unities abgeben:          Nur für VBA-Piet
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

 Beiträge: 15 Registriert: 07.04.2004 AutoCad 2000 Windows XP
|
erstellt am: 12. Mai. 2005 13:19 <-- editieren / zitieren --> Unities abgeben:         
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
  
 Beiträge: 604 Registriert: 06.06.2002 AutoCAD Map 3D 2005 Win XP pro
|
erstellt am: 12. Mai. 2005 15:25 <-- editieren / zitieren --> Unities abgeben:          Nur für VBA-Piet
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

 Beiträge: 15 Registriert: 07.04.2004 AutoCad 2000 Windows XP
|
erstellt am: 12. Mai. 2005 21:50 <-- editieren / zitieren --> Unities abgeben:         
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 >>)
 |