Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  Excel steuern

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:  Excel steuern (1942 mal gelesen)
CADuceus
Mitglied
LWL-Netzplaner GIS


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

Beiträge: 358
Registriert: 20.01.2005

erstellt am: 09. Mrz. 2012 11:10    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 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 Explicit

Public 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.
良い精神



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

Beiträge: 21533
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 09. Mrz. 2012 11:27    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 CADuceus 10 Unities + Antwort hilfreich

Schau doch mal, die Applikation(Excel) sollte ein Methode "RUN" anbieten mit dem du
das Makro starten kannst, dieses wird automatisch "in der aktuellen Tabelle" ausgeführt.


in Lisp/ActiveX sollte es also so aufgerufen werden:
(vlax-invoke-method excel 'Run "MeinMakro")

------------------
CAD.de System-Angaben  -  CAD on demand  -  User:FAQ(Acad)

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

runkelruebe
Ehrenmitglied V.I.P. h.c.
Straßen- / Tiefbau



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

Beiträge: 8075
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 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 CADuceus 10 Unities + Antwort hilfreich

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


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

Beiträge: 358
Registriert: 20.01.2005

erstellt am: 09. Mrz. 2012 12:45    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

@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



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

Beiträge: 8075
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 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 CADuceus 10 Unities + Antwort hilfreich


2012-03-09--VBA-Verweise.PNG

 
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


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

Beiträge: 358
Registriert: 20.01.2005

erstellt am: 09. Mrz. 2012 15: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

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



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

Beiträge: 8075
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 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 CADuceus 10 Unities + Antwort hilfreich

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


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

Beiträge: 358
Registriert: 20.01.2005

erstellt am: 13. Mrz. 2012 13:27    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

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

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