Autor
|
Thema: Excel von vbs aus starten (1461 mal gelesen)
|
Axel.Strasser Ehrenmitglied V.I.P. h.c. Selbstständig im Bereich PLM/CAx
Beiträge: 4107 Registriert: 12.03.2001 Früher war vieles gut, und das wäre es heute immer noch, wenn man die Finger davon gelassen hätte!
|
erstellt am: 09. Apr. 2009 09:08 <-- editieren / zitieren --> Unities abgeben:
Um Datenauswertungen zu machen habe ich verschiedene vbs Scripts in denen mir eine Exceldatei erzeigt werden. Diese laufen teilweise lange und jetzt habe ich das Problem dass ich während der Laufzeit Excel nicht interaktiv starten kann. Er scheint dann immer auf die gleiche Excel Instanz zuzugreifen. Ich starte Excel im vbs mit: Code:
Set objXL = WScript.CreateObject("Excel.Application") .. ExcelFile = OutDir & "Auswertung.xlsx" ' Excel Datei .. Set objWB = objXL.Workbooks objXL.Visible = False objWB.Add (xlWBATWorksheet) Set objWS = objXL.ActiveWorkBook.ActiveSheet .. .. objXL.ActiveWorkBook.SaveAs ExcelFile objWB.Close
Kann ich da was ändern so dass mir zum einen mein Script läuft, ich aber parallel dazu auch noch interaktiv auf Excel arbeiten kann. Axel ------------------ Inoffizielle deutsche CATIA Hilfeseite Netiquette von cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 09. Apr. 2009 09:25 <-- editieren / zitieren --> Unities abgeben: Nur für Axel.Strasser
|
Axel.Strasser Ehrenmitglied V.I.P. h.c. Selbstständig im Bereich PLM/CAx
Beiträge: 4107 Registriert: 12.03.2001 Früher war vieles gut, und das wäre es heute immer noch, wenn man die Finger davon gelassen hätte!
|
erstellt am: 09. Apr. 2009 11:23 <-- editieren / zitieren --> Unities abgeben:
Ich habe jetzt den Code noch umgeändert und die ganzen "activ" Sachen eliminiert: Code:
ExcelFile = OutDir & "Auswertung.xlsx" Set objXL = WScript.CreateObject("Excel.Application") objXL.Visible = False Set objWB = objXL.Workbooks.Add objWB.SaveAs ExcelFile objWB.Closeset objWB = objXL.WorkBooks.Open(Excelfile) .. set objWS = objWB.WorkSheets(1) With objWS ...
Damit sollte IMHO die Zuordnung zur Datei und zum Blatt eindeutig sein. Das läuft soweit gut, sobald ich aber während der Laufzeit wieder eine andere Excel Datei aufmache bekomme ich wieder den "Unbekannten Laufzeitfehler" mit dem Code 800AC472 Das mit der Instanz kann doch nicht so ganz stimmen, da er im Taskmanager EXCEL mehrere Male drin hat, es wird also eine neue Instanz gestartet. Axel ------------------ Inoffizielle deutsche CATIA Hilfeseite Netiquette von cad.de
[Diese Nachricht wurde von Axel.Strasser am 09. Apr. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 09. Apr. 2009 11:49 <-- editieren / zitieren --> Unities abgeben: Nur für Axel.Strasser
|
Axel.Strasser Ehrenmitglied V.I.P. h.c. Selbstständig im Bereich PLM/CAx
Beiträge: 4107 Registriert: 12.03.2001 Früher war vieles gut, und das wäre es heute immer noch, wenn man die Finger davon gelassen hätte!
|
erstellt am: 09. Apr. 2009 12:00 <-- editieren / zitieren --> Unities abgeben:
|
Axel.Strasser Ehrenmitglied V.I.P. h.c. Selbstständig im Bereich PLM/CAx
Beiträge: 4107 Registriert: 12.03.2001 Früher war vieles gut, und das wäre es heute immer noch, wenn man die Finger davon gelassen hätte!
|
erstellt am: 16. Apr. 2009 09:38 <-- editieren / zitieren --> Unities abgeben:
Also nur für die, die es mal brauchen, ich konnte es über einen Trick lösen: Code:
set objXL_1 = WScript.CreateObject("Excel.Application") Set objXL_2 = WScript.CreateObject("Excel.Application") objXL_1.UserControl = False objXL_1.Interactive = True objXL_1.ScreenUpdating = False objXL_1.Visible = FalseSet objWB = objXL_1.Workbooks.Add Set objWS = objWB.Worksheets.Add ... objWB.SaveAs ExcelFile objWB.Close objXL_1.quit set objXL_1 = Nothing objXL_2.UserControl = True objXL_2.Interactive = True objXL_2.ScreenUpdating = True objXL_2.Visible = True set objWB = objXL_2.WorkBooks.Open(Excelfile) objWB.Activate WScript.quit
Dadurch kann ich während der Laufzeit des vbs andere Excelfiles aufmachen, bearbeiten, speichern. Ganz zum Schluss wird die erzeugte Datei aufgemacht. Komisch ist es auf jeden Fall. die ganzen objXL_1 Settings scheinen auch im vbs auch auf objXL_2 zu wirken und müssen dort deshalb explizit wieder eingeschaltet werden. Naja, auf jeden Fall so funktioniert es bis jetzt. Axel ------------------ Inoffizielle deutsche CATIA Hilfeseite Netiquette von cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |