| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | | | Request a special discount on NVIDIA RTX 5000 Ada Generation GPU !, eine Pressemitteilung
|
Autor
|
Thema: Excel steuern (1946 mal gelesen)
|
CADuceus Mitglied LWL-Netzplaner GIS
Beiträge: 359 Registriert: 20.01.2005
|
erstellt am: 09. Mrz. 2012 11:10 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen Ich möchte ein Excel-Makro starten, habe aber noch nie mit dem VAB-Editor in AutoCAD gearbeitet. Hab's auch schon erfolglos im AutoCAD-Forum gepostet. Dann bin ich auf diesen Artikel gestossen und habe das ausprobiert: Zitat: Original erstellt von a.n.: Hi,wenn Du schon ein VBA in AutoCAD hast, wieso machst Du nicht auch in diesem die weitere Abhandlung der XLS-Daten? Wird jedenfalls leichter zu debuggen sein. However, ein Ansatz: a) im AutoCAD:
Code: Public Sub StartXlsMacro() Dim tXlsApp As Excel.Application On Error Resume Next Set tXlsApp = GetObject(, "Excel.Application") If tXlsApp Is Nothing Then Call MsgBox("Excel ist nicht gestartet, Abbruch") Else 'ok, Excel ist gestartet Call tXlsApp.ActiveSheet.XX 'XX ist der MacroName in XLS If Err.Number <> 0 Then Call MsgBox("Makroaufruf returnierte Fehler, Abbruch") End If End If If (Not (tXlsApp Is Nothing)) Then Set tXlsApp = Nothing End Sub
b) im XLS:
Code: Option ExplicitPublic Sub XX() MsgBox ("This was MsgBox from Excel") End Sub
[...]
Starte ich Methode a) kommt die Meldung "Benutzerdefinierter Typ nicht definiert". Was mach ich falsch? Und was meint alfred mit "wieso machst Du nicht auch in diesem die weitere Abhandlung der XLS-Daten?" Kann ich das Excel-Makro etwa im AutoCAD ausführen? Wenn ja, wie? Ich bin wirklich ein Noob. Stellt Gegenfragen also bitte auch so, dass ICH sie verstehe. ------------------ Du kannst in anderen nur entzünden, was in Dir selber brennt! Wollte noch ein File anhängen, aber habe die Kiste schon heruntergefahren. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Ehrenmitglied V.I.P. h.c. 良い精神
Beiträge: 22275 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 09. Mrz. 2012 11:27 <-- editieren / zitieren --> Unities abgeben: Nur für CADuceus
|
runkelruebe Ehrenmitglied V.I.P. h.c. Straßen- / Tiefbau
Beiträge: 8086 Registriert: 09.03.2006 sw: Win7-x64 Office 365 ProPlus C3D (& LT ) ET; DACH; Extensions ------------------- hw: FX3800 i5 CPU 670 8GB RAM
|
erstellt am: 09. Mrz. 2012 11:38 <-- editieren / zitieren --> Unities abgeben: Nur für CADuceus
>> Was mach ich falsch?Zu a) gehört zwingend auch b). Hast Du b)? Wenn nein, hast Du DAS schon falsch gemacht. Was sonst noch, kann ich so nicht sagen, interessant wäre dabei noch, WO Dir das angemeckert wird, im Normalfall wird im VBA-Editor dabei eine Zeile markiert. >> Kann ich das Excel-Makro etwa im AutoCAD ausführen? Wenn ja, wie? Genau darum geht es in alfreds posting ;-) Ich habe im RuA-thread durchaus versucht Dir zu helfen, aber Du hast nicht verstanden, worauf ich hinauswollte. Du schreibst zu allgemein, VBA benötigt aber genauere Angaben, was man wo wie tun möchte, es denkt nicht mit, bzw. nicht so, wie Du das möchtest. Leseempfehlung für die Vorhaltung von dateiübergreifenden Makros: Persönliche Makroarbeitsmappe - personl.xls ------------------ Gruß, runkelruebe Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADuceus Mitglied LWL-Netzplaner GIS
Beiträge: 359 Registriert: 20.01.2005
|
erstellt am: 09. Mrz. 2012 12:45 <-- editieren / zitieren --> Unities abgeben:
@runkelruebe Ja. Habe a) & b) mal unverändert ins AutoCAD und Excel übernommen. Und ja, während der Fehlermeldung "Fehler beim Kompilieren:..." wird tXlsApp As Excel.Application blau markiert, nach wegklicken der Meldung wird die erste Zeile gelb und mit Pfeil markiert.
Zitat: Original erstellt von runkelruebe: [...] Ich habe im RuA-thread durchaus versucht Dir zu helfen, [...] Du schreibst zu allgemein, VBA benötigt aber genauere Angaben, [...]
Und ich danke Dir, dass Du es immer noch versuchst, aber auch ICH brauche genauere Angaben, damit ich es eben verstehe. Also: Welche Angaben fehlen dem VBA denn noch? (Das Makro soll einfach im aktuell geöffneten Tabellenblatt ausgeführt werden.) ------------------ Du kannst in anderen nur entzünden, was in Dir selber brennt! Wollte noch ein File anhängen, aber habe die Kiste schon heruntergefahren. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
runkelruebe Ehrenmitglied V.I.P. h.c. Straßen- / Tiefbau
Beiträge: 8086 Registriert: 09.03.2006 sw: Win7-x64 Office 365 ProPlus C3D (& LT ) ET; DACH; Extensions ------------------- hw: FX3800 i5 CPU 670 8GB RAM
|
erstellt am: 09. Mrz. 2012 13:00 <-- editieren / zitieren --> Unities abgeben: Nur für CADuceus
Derzeit fehlt Dir offensichtlich noch der Verweis auf die Office Object Library Im VBA-Editor: Menü Extras > Verweise > Liste durchscrollen bis Du einen Eintrag wie im Screenshot findest > Haken rein Das Excel-Makro muss (so wie es derzeit geschrieben ist) im Bereich des sheets stehen, dann läuft der code von a.n. durch. [rredit] >> Also: Welche Angaben fehlen dem VBA denn noch? (Das Makro soll einfach im aktuell geöffneten Tabellenblatt ausgeführt werden.) VBA muß wissen, WO es den code suchen soll, den es ausführen soll. Dann muß es wissen, WO der code ausgeführt werden soll. Persönliche Empfehlung: Diese ActiveSheet-Sachen klingen verlockend und einfach, aber meine Erfahrung zeigt mir, dass ich mir nicht immer 100% sicher sein kann, welches denn nun das aktive Sheet ist (es sei denn, ich setze es vorher selbst aktiv, aber dann kann ich auch gleich mit Variablen arbeiten und das sheet hart ansprechen). Ich vermeide also ActiveSheet wo es eben geht. ------------------ Gruß, runkelruebe Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... [Diese Nachricht wurde von runkelruebe am 09. Mrz. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADuceus Mitglied LWL-Netzplaner GIS
Beiträge: 359 Registriert: 20.01.2005
|
erstellt am: 09. Mrz. 2012 15:36 <-- editieren / zitieren --> Unities abgeben:
So ein fieses Häkchen... Es klappt jetzt. Vielen Dank! Jetzt aber noch ein wichtiger Punkt: Mein Excel-Makro befindet nun in der Standard-Datei "PERSONL.XLS". Wie kann ich darauf verweisen (gearbeitet wird weiterhin am aktiven sheet)? Code: Call tXlsApp.ActiveSheet.PERSONL.XLS.Mein_Makro
bewirkt nämlich, dass das Makro in der PERSONL.XLS ausgeführt wird anstelle im aktuellen sheet oder Excel und AutoCAD bleiben hängen, weil die gesuchte Datei ausgeblendet ist.------------------ Du kannst in anderen nur entzünden, was in Dir selber brennt! Wollte noch ein File anhängen, aber habe die Kiste schon heruntergefahren. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
runkelruebe Ehrenmitglied V.I.P. h.c. Straßen- / Tiefbau
Beiträge: 8086 Registriert: 09.03.2006 sw: Win7-x64 Office 365 ProPlus C3D (& LT ) ET; DACH; Extensions ------------------- hw: FX3800 i5 CPU 670 8GB RAM
|
erstellt am: 12. Mrz. 2012 08:12 <-- editieren / zitieren --> Unities abgeben: Nur für CADuceus
Moin, das meinte ich mit dem 100%-sicher-sein bei Active*irgendwas* ;-) Ungetestet: Im link oben steht etwas davon, dass die PERSONL.xls(m) mitgezählt wird. Wenn Du garantieren kannst, dass Du neben der personl. nur noch Deine OLE-Mappe geöffnet hast, dann versuch, diese OLE-Mappe aktiv zu setzen, bevor Du Dich mit Active... darauf beziehst. Etwas in der Richtung Workbooks(2).Activate. ------------------ Gruß, runkelruebe Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADuceus Mitglied LWL-Netzplaner GIS
Beiträge: 359 Registriert: 20.01.2005
|
erstellt am: 13. Mrz. 2012 13:27 <-- editieren / zitieren --> Unities abgeben:
So. Hab die richtige Ausdrucksweise gefunden, damit das richtige Makro gefunden wird, ohne mit dem aktivieren von Blätter herumzuspielen:
Code: Public Sub StartXlsMacro() Dim tXlsApp As Excel.Application On Error Resume Next Set tXlsApp = GetObject(, "Excel.Application") If tXlsApp Is Nothing Then Call MsgBox("Excel ist nicht gestartet, Abbruch") Else 'ok, Excel ist gestartet tXlsApp.Application.Run "PERSONL.XLS!Mein_Makro" ' "Mein_Makro" ist der Makroname If Err.Number <> 0 Then Call MsgBox("Makrofehler, Abbruch") End If End If If (Not (tXlsApp Is Nothing)) Then Set tXlsApp = Nothing End Sub
Vielen Dank für die Hilfestellung! ------------------ Du kannst in anderen nur entzünden, was in Dir selber brennt! Wollte noch ein File anhängen, aber habe die Kiste schon heruntergefahren. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|