| |  | 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: ExcelApp oeffnen/zugreifen (2126 mal gelesen)
|
JoKurt87 Mitglied Student E-Technik

 Beiträge: 37 Registriert: 08.11.2013 AutoCAD-Anfaenger Autodesk AutoCAD 2014 mit VBA Modul
|
erstellt am: 04. Dez. 2013 14:37 <-- editieren / zitieren --> Unities abgeben:         
Hallo liebe Experten, Ich habe in meinem Programm einen Teil der mir ueberpruefen soll ob, Excel schon geoeffnet ist. Wenn ja, soll es mir eine bestimmte Tabelle laden, aus der ich dann Daten auslese. Wenn Excel noch nicht geoeffnet ist, soll es Excel erst oeffnen und dann die Tabelle laden. Folgenden Code habe ich hierzu verwendet: Code: On Error Resume Next Err.Clear Set excelApp = GetObject(, "Excel.Application") If Err <> 0 Then Err.Clear Set excelApp = CreateObject("Excel.Application") If Err <> 0 Then MsgBox "Could not start Excel! Make sure it is already installed on your system.", vbExclamation End End If End If Set excelWbk = Workbooks.Open(FileName:="Pfad:\was_auch_immer.xlsx") 'quit program if Excel file cannot be found in right location If Err <> 0 Then MsgBox "Could not find the "was_auch_immer"!" & vbCr & "Please make sure that it is already saved in the right location.", vbExclamation excelApp.Quit End End If Set excelSht = excelApp.Worksheets(1)
Solange Excel vor dem Ausfuehren des Codes geschlossen ist, funktioniert die ganze Sache einwandfrei. Wenn aber Excel schon geoeffnet ist und ich mein Programm laufen lasse, bringt es mir einen Fehler, dass der angegebene Pfad nicht gefunden werden kann, es oeffnet sozusagen das Workbook nicht. Dann bricht mein Programm ab und schliesst auch Excel. Schaue ich dann aber in den Task Manager, sehe ich, dass Excel noch als Prozess ausgefuehrt wird. Was mache ich falsch und wie kann ich es loesen? Ich hoffe ihr koennt mir weiterhelfen. MfG & vDiV JoKurt87 ------------------ shit's getting real: (sqrt(-shit))^2 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 04. Dez. 2013 17:57 <-- editieren / zitieren --> Unities abgeben:          Nur für JoKurt87
Hallo, wo kommt denn das Objekt WORKBOOKS her?
Zitat: Set excelWbk = Workbooks.Open(FileName:="Pfad:\was_auch_immer.xlsx")
Müsste es nicht excelapp.workbooks sein? Und sollte nicht erst mal geschaut werden ob die Datei schon geöffnet ist (Workbooks Auflistung durchlaufen)? Wilfried Stelberg ------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JoKurt87 Mitglied Student E-Technik

 Beiträge: 37 Registriert: 08.11.2013 AutoCAD-Anfaenger Autodesk AutoCAD 2014 mit VBA Modul
|
erstellt am: 04. Dez. 2013 18:09 <-- editieren / zitieren --> Unities abgeben:         
Zitat: Müsste es nicht excelapp.workbooks sein?
Sry, ich hatte die dims vergessen zu posten: Code: Dim excelApp As Excel.Application Dim excelWbk As Workbook Dim excelSht As Worksheet
Ist es wichtig, dass es "workbooks" heisst und nicht wie bei mir "workbook"? Zitat: Und sollte nicht erst mal geschaut werden ob die Datei schon geöffnet ist (Workbooks Auflistung durchlaufen)?
Das kann man noch hinzufuegen, allerdings loest das nicht mein Problem, denn selbst wenn die Datei nicht offen ist, sondern nur eine neue, bringt es mir den oben beschriebenen Fehler. ------------------ shit's getting real: (sqrt(-shit))^2 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 05. Dez. 2013 14:36 <-- editieren / zitieren --> Unities abgeben:          Nur für JoKurt87
Hallo, was ich meinte ist, du benutzt ein Objekt WORKBOOKS ohne das es vorher zugewiesen wurde. Wenn du mal deine "Fehlerbehandlung" ON ERROR RESUME NEXT abschaltest und deinen Code Zeilenweise abarbeitest wirst du sehen das hier der Fehler ist. Wilfried Stelberg
------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JoKurt87 Mitglied Student E-Technik

 Beiträge: 37 Registriert: 08.11.2013 AutoCAD-Anfaenger Autodesk AutoCAD 2014 mit VBA Modul
|
erstellt am: 05. Dez. 2013 16:06 <-- editieren / zitieren --> Unities abgeben:         
Ich habe jetzt folgende Zeile: Code: Set excelWbk = Workbooks.Open(FileName:="Pfad:\was_auch_immer.xlsx")
geaendert zu: Code: Set excelWbk = excelApp.Workbooks.Open(FileName:="Pfad:\was_auch_immer.xlsx")
Jetzt funktioniert es ohne weiteres, danke dafuer!  Allerdings verstehe ich nicht, wieso das ganze funktioniert hat, solange Excel geschlossen war. Dann war das Objekt "Workbooks" ja schliesslich auch nicht zugewiesen.  ------------------ shit's getting real: (sqrt(-shit))^2 [Diese Nachricht wurde von JoKurt87 am 05. Dez. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Moderator Architekt
   
 Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 11. Dez. 2013 23:17 <-- editieren / zitieren --> Unities abgeben:          Nur für JoKurt87
Zitat: Original erstellt von JoKurt87:
Allerdings verstehe ich nicht, wieso das ganze funktioniert hat, solange Excel geschlossen war. Dann war das Objekt "Workbooks" ja schliesslich auch nicht zugewiesen. 
Hallo, schwer zu sagen, ich sag mal so, die fehlende Referenz auf Workbooks.open führt eigentlich immer zu einem Fehler, ist nur die Frage inwieweit Du ihn mitbekommen hast;-) Hast du nach dem Durchlauf der Sub im 'CreateObject-Modus' also mit geschlossenem Excel, mal im Nachgang im Taskmanager die Instanzen überprüft? Oder andre Idee, setz mal ExcelApp.visible = 1 und geh' mal das Ganze im Einzelschritt (F8) durch, da gibts ganz sicher irgendwo nen Fehler, weil das fehlende 'ExcelApp' vor dem exceleigenen Open-Kommando fehlt. Auch wenn es erstmal den Anschein hat, auf diese&jene Art funktioniert es aber doch, warum? Solche 'unsauberen' Zeilen können ganz schön heimtückisch werden, deswegen immer brav die App davorschreiben, mit der man kommunizieren will.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JoKurt87 Mitglied Student E-Technik

 Beiträge: 37 Registriert: 08.11.2013 AutoCAD-Anfaenger Autodesk AutoCAD 2014 mit VBA Modul
|
erstellt am: 13. Dez. 2013 15:57 <-- editieren / zitieren --> Unities abgeben:         
Zitat: Hast du nach dem Durchlauf der Sub im 'CreateObject-Modus' also mit geschlossenem Excel, mal im Nachgang im Taskmanager die Instanzen überprüft?
Ja, auf die Idee war ich auch schon gekommen, aber da war nix, alles ganz normal. Genau das hat ja dazu gefuehrt, dass ich den Fehler nicht bemerkt habe. Solche Fehler zu finden ist schwer, wenn sie nur sporadisch und uneinsichtig auftreten. Ausserdem ist er mir nicht aufgefallen, weil ich von VBA eigentlich null Ahnung habe und schon stolz bin, dass mein komplettes Programm das macht, was es soll.  Danke nochmal! ------------------ shit's getting real: (sqrt(-shit))^2 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JoKurt87 Mitglied Student E-Technik

 Beiträge: 37 Registriert: 08.11.2013 AutoCAD-Anfaenger Autodesk AutoCAD 2014 mit VBA Modul
|
erstellt am: 03. Jan. 2014 13:41 <-- editieren / zitieren --> Unities abgeben:         
Ich habe noch eine bln-Variable eingefuegt, um das Schliessen von Excel zu veraendern, damit schon geoeffnete Exceldateien nicht mit geschlossen werden. Hier der komplette Code: Code: On Error Resume Next Err.Clear Set excelApp = GetObject(, "Excel.Application") blnNewApp = False If Err <> 0 Then blnNewApp = True Err.Clear Set excelApp = CreateObject("Excel.Application") If Err <> 0 Then MsgBox "Could not start Excel! Make sure it is already installed on your system.", vbExclamation End End If End If Set excelWbk = excelApp.Workbooks.Open(FileName:="Pfad:\was_auch_immer.xlsx") 'quit program if Excel file cannot be found in right location If Err <> 0 Then MsgBox "Could not find "was_auch_immer"!" & vbCr & "Please make sure that it is already saved in the right location.", vbExclamation If blnNewApp = True Then excelApp.Quit Else excelWbk.Close End If End End If Set excelSht = excelApp.Worksheets(1)
Wer dies benutzen kann, soll gluecklich damit werden.  MfG JoKurt87 ------------------ shit's getting real: (sqrt(-shit))^2 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |