| |
VB.NET - FortgeschritteneRe: Excel schliessen | | | Autor: schillerfrau | Datum: 25.02.07 18:41 |
| Hallo zusammen,
ich habe auch ein Problem mit Excel schließen. Daher fand ich auf dieser Seite eure Lösung und probierte es aus. Leider bekam ich bei procs(i).MainModule.BaseAddress.ToInt32 eine Fehlermeldung. Der Trick mit Dim h As Integer = Me._excelAppl.Hinstance hat nicht geholfen. Liegt wohl an meinem Excel dass älter ist. Von daher hab ich im Netz einen Code gefunden, den ich euch nicht vorenthalten möchte:
'Prozessliste, bevor ich einen Excel-Prozess starte
process1 = Process.GetProcesses()
oExcel = CreateObject("Excel.Application")
'Prozessliste, nachdem ich einen Excel-Prozess gestartet hab
process2 = Process.GetProcesses() process1 & process2 speichere ich in einer globalen Variablen, damit ich von überall darauf Zugriff hab. Zusätzlich definiere/initialisiere ich eine Variable namens procId:
Dim process1() As Process
Dim process2() As Process
Dim procId As Integer = 0 Wenn jetzt in meinem Try..Catch-Block ein Fehler passiert, wird der Catch- bzw. Finally-Teil bei mir mit folgendem Code ausgeführt:
Try
...
Catch
Finally
Dim bMonProcessXL As Boolean
For j As Integer = 0 To process2.GetUpperBound(0)
If process2(j).ProcessName = "EXCEL" Then
bMonProcessXL = True
For i As Integer = 0 To process1.GetUpperBound(0)
If process1(i).ProcessName = "EXCEL" Then
If process2(j).Id = process1(i).Id Then
bMonProcessXL = False
Exit For
End If
End If
Next i
If bMonProcessXL = True Then
'Jetzt, wo ich die genaue ID habe, kann ich sie töten.
' excellAppl.Hinstance
'funktioniert nicht mit Excel 2000, während diese
' Methode immer geht!
procId = process2(j).Id
Process.GetProcessById(procId).Kill()
Exit For
End If
End If
Next j
End
End Try Auch wenn dieser Beitrag älter ist, vielleicht ist es dem einen oder anderen ja zunutze
Habt nen schönen Abend,
lgk | |
Re: Excel schliessen | | | Autor: immerSuchender | Datum: 31.03.06 08:54 |
| Hallo Maywood,
das habe ich schon früher versucht. Hat nicht funktioniert.
'---------------------------------------------'
ich weiss, dass ich nichts weiss
immerSuchender | |
Re: Excel schliessen | | | Autor: Maywood | Datum: 31.03.06 11:30 |
| Dann versuchs mal diesen Code:
Dim app As New Excel.Application
Dim pfad As String = "C:\tmp\foobar.xls"
Dim book As Excel.Workbook = Nothing
'// load
With app
book = .Workbooks.Open(pfad)
.Visible = True
System.Threading.Thread.Sleep(3000)
End With
'// kill
book.Close()
app.Quit()
Marshal.ReleaseComObject(app)
Marshal.ReleaseComObject(book)
book = Nothing
app = Nothing
GC.Collect()
GC.WaitForPendingFinalizers()
GC.Collect()
GC.WaitForPendingFinalizers() (klappt bei mir mit O2k3 / VS2k3 einwandfrei) | |
Re: Excel schliessen | | | Autor: immerSuchender | Datum: 31.03.06 11:37 |
| Danke, werde ich versuchen. Aber ich glaube, dass so was ähnliches ich schon mal ausprobiert habe. Wie gesagt, ich hatte das Problem schon vor einiger Zeit und damals habe ich mehrere Lösungen ausprobiert bis ich dann auf bei meiner heutigen stehengeblieben bin.
Trotzdem danke
'---------------------------------------------'
ich weiss, dass ich nichts weiss
immerSuchender | |
Re: Excel schliessen | | | Autor: Maywood | Datum: 31.03.06 13:34 |
| hhm, okay, das ist eigenartig. Falls das wirklich nicht funktioniert, dann musst du eben deine Routine benutzen.
Falls ja, dann würde ich das in etwa so machen:
Public Sub CloseExcel(ByVal app As Excel.Application)
Dim h As Integer = app.Hinstance
Dim procs() As Process = Process.GetProcessesByName("EXCEL")
Dim p As Process = Nothing
Debug.WriteLine("INFO: Current Hinstance: " + h.ToString())
app.Quit()
For a As Integer = procs.Length - 1 To 0 Step -1
p = procs(a)
Try
Debug.WriteLine("INFO: " + h.ToString + " ::: " + _
p.MainModule.BaseAddress.ToInt32.ToString)
If p.MainModule.BaseAddress.ToInt32 = h Then
Debug.WriteLine("INFO: Close " + _
p.MainModule.BaseAddress.ToInt32.ToString + "..")
If Not p.CloseMainWindow Then
p.Kill()
End If
End If
Catch ex As System.ComponentModel.Win32Exception
Debug.WriteLine(ex.ToString)
End Try
Next
app = Nothing
End Sub | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
Neu! sevCommand 4.0
Professionelle Schaltflächen im modernen Design!
Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|