Autor
|
Thema: Excel Prozess killen (1254 mal gelesen)
|
Jimbooh Mitglied Student
Beiträge: 17 Registriert: 28.06.2007
|
erstellt am: 19. Jul. 2007 10:54 <-- editieren / zitieren --> Unities abgeben:
HAllo, ich habe hier ein großes Problem, was vermehrt im INet zu finden ist. Habe ein Applikation, welche aus MCPS(Messwerterfassungssoftware) werte ausliest und in eine Tablle schreibt. Das wird dann anschliessend ausgedruckt. Eigentlich sollte, sich dann Excel wieder beenden. aber ich bekomme es einfach nicht hin...unten dran ist mal der Quelltexct.. '*********** Anpassen an die Anwendung *************** VorlagePfad = "D:\Programme\MCPS6_2\Scripts\" VorlageFile = "Vorlage für automatisches Drucken.xls" '***************************************************** Dim objXL Dim VFile Dim str Dim Farbe VFile = VorlagePfad + VorlageFile '***************************************************** ExcelAktiv If PrepareWorkBook(VFile) Then stg = MCPS.GetOnlineTime() ShowResults(stg) objXL.Visible = True ArbeitsmappeDrucken() Else MsgBox "Kann Vorlage Datei nicht öffnen: " & VorlageFile End If '******** main program End ******************************* Sub ArbeitsmappeDrucken() objXL.ActiveWorkBook.PrintOut End Sub '******************************************************** Sub ExcelAktiv On error resume next Set objXL = GetObject(,"Excel.Application") if Err.Number = 429 then Set objXL = CreateObject("Excel.Application") Err.Number = 0 end if objXL.Visible = True End Sub '******************************************************** Function PrepareWorkBook(datafile) T1 = FALSE If objXL.WorkBooks.count > 0 Then for each file in objXL.WorkBooks If ucase(file.FullName) = ucase(datafile) Then T1 = TRUE objXL.WorkBooks(file.Name).Activate End If next Else 'Wenn Arbeitsmappe nicht vorhanden, dann laden T1 = LoadNewFile(datafile) End If PrepareWorkBook = T1 End Function '******************************************************** Function LoadNewFile(datafile) T1 = FALSE On error resume next objXL.WorkBooks.Open datafile If objXL.WorkBooks.count > 0 Then T1 = TRUE End If LoadNewFile = T1 End Function '******************************************************** Function Data(Chn) If MCPS.GetOnlineSavedDataStatus(Chn) = 0 Then Data = MCPS.GetOnlineSavedData(Chn) Else Data = "***" End If End Function '******************************************************** Sub ShowResults(datetime) objXL.Cells(1,43).Value = Date objXL.Cells(2,43).Value = Time objXL.Cells(1,22).Value = MCPS.GetProjectInfoLine(3) objXL.Cells(2,22).Value = MCPS.GetProjectInfoLine(2) objXL.Cells(1,1).Value = MCPS.GetProjectInfoLine(7) For i = 1 To MCPS.GetProjectChannelCount If i <= 100 Then objXL.Cells(3+i,3).Value = MCPS.GetChannelName(i) objXL.Cells(3+i,11).Value = MCPS.GetOnlineData(i) objXL.Cells(3+i,5).Value = MCPS.GetChannelTag(i) else If i > 100 Then h = i-100 If h <= 100 Then objXL.Cells(3+h,22).Value = MCPS.GetChannelName(i) objXL.Cells(3+h,30).Value = MCPS.GetOnlineData(i) objXL.Cells(3+h,24).Value = MCPS.GetChannelTag(i) End If If i > 200 Then j = i-200 objXL.Cells(3+j,41).Value = MCPS.GetChannelName(i) objXL.Cells(3+j,49).Value = MCPS.GetOnlineData(i) objXL.Cells(3+j,43).Value = MCPS.GetChannelTag(i) End If End If End If Next
End Sub Sub ExcelSchliessen() objXL.WorkBooks.Close objXLWorkbook.saved = True objXL.Quit objXL.SendKeys("%{F4}") End Sub Könnt ihr mir da helfen?
Dankeschön..
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: 19. Jul. 2007 11:34 <-- editieren / zitieren --> Unities abgeben: Nur für Jimbooh
|
Jimbooh Mitglied Student
Beiträge: 17 Registriert: 28.06.2007
|
erstellt am: 19. Jul. 2007 11:54 <-- editieren / zitieren --> Unities abgeben:
|
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: 19. Jul. 2007 12:04 <-- editieren / zitieren --> Unities abgeben: Nur für Jimbooh
Hm, klar. Wo hast Du denn die Schnipsel her? Bei genauerem Hinsehen (danke an rr ) wirkt das ein wenig nach wildem Copy und Paste aus dem www? WO steht das denn bei Dir? Wenn ich mir das in ein Modul schreibe, gibt's erstmal 'ne ganze Latte an Fehlermeldungen. Ich kann das nicht so recht nachvollziehen. Scheinbar soll in "objXL.Quit" ganz unten ja Excel geschlossen werden. Welchen Wert hat objXL zu diesem Zeitpunkt? Bei mir erstmal keinen. Die Belegung erfolgt in der sub "ExcelAktiv", oder? D.h. die MUSS anfangs erstmal laufen, sonst ist objXL nicht belegt. Alles etwas wirr. Tja... Nimm's nicht persönlich, aber da solltest Du nochmal frisch anfangen. Vielleicht funktioniert es ja, wenn Du den Code um eine Zeile ergänzt? Das erzwingt, daß die Var. objXL auch 'nen Wert enthält. Unschön - aber evtl. möglich. Ungetestet - habe Angst , den Code laufen zu lassen! Code: Sub ExcelSchliessen() Set objXL = GetObject(, "Excel.Application") objXL.Workbooks.Close objXLWorkbook.Saved = True objXL.Quit objXL.SendKeys ("%{F4}") End Sub
------------------ DIN1055.de | Lastannahmen für Anwender Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jimbooh Mitglied Student
Beiträge: 17 Registriert: 28.06.2007
|
erstellt am: 19. Jul. 2007 12:22 <-- editieren / zitieren --> Unities abgeben:
Der quellcode is ni von mir, ich soll lediglich einbauen dass Excel geschlossen wird. Was sich aber als überaus schwierig gestaltet. Viele andere haben ja das gleich Problem. Normalerweise wird das Excelfenster auch ni angezeigt...also objXL.Visibility = False Du hast recht das is im Inet nachgeschlagen...und versucht einfach ein zu bauen. Aber geht einfach ni...auch ni mit der zusätzlichen Zeile von dir... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jimbooh Mitglied Student
Beiträge: 17 Registriert: 28.06.2007
|
erstellt am: 19. Jul. 2007 13:41 <-- editieren / zitieren --> Unities abgeben:
KLann mir jemand sagen was dieser Auszug bewirkt Code:
Sub ExcelAktiv On error resume next Set objXL = GetObject(,"Excel.Application") if Err.Number = 429 then Set objXL = CreateObject("Excel.Application") Err.Number = 0 end if objXL.Visible = TRUE end Sub
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: 19. Jul. 2007 13:44 <-- editieren / zitieren --> Unities abgeben: Nur für Jimbooh
Zitat: Original erstellt von Jimbooh: Viele andere haben ja das gleich Problem.
Und - was tut sich bei den "vielen anderen"? Gibt's da Lösungsvorschläge? Schon mal gegoogelt? Es ist in meinen Augen eigentlich kein "Problem", xls per VBA zu schließen - das geht wirklich über Application.Quit - nur in Deinem konkreten Fall, zusammen mit den vorherigen Codefragmenten, wird nicht das gewünschte Resultat erzielt. Zitat: Normalerweise wird das Excelfenster auch ni angezeigt...also objXL.Visibility = False
Sei doch so nett und werde bitte etwas konkreter - was heißt "normalerweise"? Ist das Teil schon jemals gelaufen? Auf Deinem Rechner? Von wo rufst Du auf - aus xls selbst (danach schließen) oder "von außen"? Ich unterstelle mal wohlwollend, daß die Sache mit der Sichtbarkeit unter -ich sage mal "normalen- Umständen bestens funktioniert. Frage ist, warum es hier - in Deinem konkreten Fall , ich wiederhole mich - (scheinbar) Zicken macht. Hast Du den Code schon mal mit F8 im VBA-Editor gestartet? Was passiert? Und zu Zitat: if Err.Number = 429 then
Kennst Du die F1-Taste? Stell' mal den Cursor hinter "Err.Number" und drücke sie - Du wirst überrascht sein !
------------------ DIN1055.de | Lastannahmen für Anwender Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thomas Harmening Moderator Arbeiter ツ
Beiträge: 2897 Registriert: 06.07.2001 Das Innerste geäussert und aufs Äusserste verinnerlicht
|
erstellt am: 19. Jul. 2007 14:15 <-- editieren / zitieren --> Unities abgeben: Nur für Jimbooh
ich versuche mal den Code zu erklären ;-) Code: Sub Beule Aktiv() mache weiter, egal was passiert fühle ob dein Kopf eine Beule hat trifft Err 429 zu (Kopf hat keine Beule) dann erstelle eine Beule... vergesse das dein Kopf keine Beule hatte Objekt Beule sichtbar end...
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thomas Harmening Moderator Arbeiter ツ
Beiträge: 2897 Registriert: 06.07.2001 Das Innerste geäussert und aufs Äusserste verinnerlicht
|
erstellt am: 20. Jul. 2007 01:17 <-- editieren / zitieren --> Unities abgeben: Nur für Jimbooh
Mappe, Start klappt nicht immer... und drücken der Buttons irgendwie auch nicht Excel mag nimmer ;-) Disclaimer ;-) Diese Mappe beendet Excel zu 50% sofort und ein Drücken der Buttons zu 100%, um alles Narren und Idioten sicher zu machen, dieser Hinweis: Laufende Excelprojekte sollten gesichert und beendet sein! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |