PDA

Vollständige Version anzeigen : Zwei parallele Instanzen von Excel


Cabecao
12.07.2006, 09:35
Moin Kinnings,

ich hätt da gern mal ein Problem:

In einer Datenbank wird ein Report mittels Excel 2002 SP3 generiert. Dabei wird eine Instanz von Excel mit CreateObject("Excel.Application") erzeugt und die Eigenschaft Visible auf False gesetzt, damit der Report im Hintergrund erzeugt werden kann. Das Erstellen des Reports kann u.U. bis zu 5 Minuten dauern.
Soweit so gut.

Jetzt hatte ich den Fall, das ein Benutzer parallel dazu eine bestehende xls-Datei öffnen möchte. Excel scheit dann zu prüfen, ob eine Instanz bereits existiert und versucht dann die Datei mit dieser zu öffnen. Dabei wird Excel leider nur halblebig geöffnet (Es wurd nur ein Anwendungsfenster angezeigt, keine Dateien). Setzt der Reportgeneartor nach ein paar Minuten die Eigenschaft Visible wieder auf True werden beide Dateien komplett angezeigt.

Unser ungeduldiger Benutzer hat aber bereits das halblebige Fenster geschlossen => Rumms!!!! Excel beendet die komplette Instanz => der Reportgenerator wirft eine Fehler (Automation Object Error).

HELP!!!

Gruß
Cabecao

R J
12.07.2006, 12:41
Hi Cabecao,

wenn Du nur einen Bericht erstellen willst, wozu dann die Datei erst öffnen? Die Daten kannst Du auch so auslesen und musst die Instanz somit nicht verstecken.

Ciao, Ralf

Cabecao
12.07.2006, 16:32
Da hättest du schon recht.

Der Nachteil wäre dann, daß der Benutzer wärend des Aufbaus des Reports (also Spaltenüberschriften, Datensätze, Formtierungen, Grafiken etc.) live am Bildschirm verfolgen kann und ebenfalls während der Erstellung des Reports Excel schließen könnte. Und somit wären wir wieder beim "Rumms!!!!".

R J
12.07.2006, 17:00
Hi Cab,

...da hast Du mich wohl falsch verstanden...

Die Exceldatei soll gar nicht erst geöffnet werden! Wird direkt (ohne Bemühung einer Instanz) vom Speicher ausgelesen.
Bsp.: (Noch anzupassen)

Sub DatenausgeschlMappelesen()
Dim strPath As String, strDat As String, strTab As String, rng As Range
Dim intZ As Integer
strPath = "'" & ThisWorkbook.Path & "\" 'Pfad anpassen
strDat = "[Kasse2006.xls]" 'Datei anpassen
strTab = "KB12'!" 'Tabelle anpassen
For intZ = 12 To 20 'Anpassen
Set rng = Range("A" & intZ) 'Anpassen
MsgBox ExecuteExcel4Macro _
(strPath & strDat & strTab & rng.Address(ReferenceStyle:=xlR1C1))
Set rng = Nothing
Next
End Sub

Ciao, Ralf

Cabecao
13.07.2006, 07:59
AHHHH! Nein. Ich bastel nicht an einem Macro in Excel.

OK, ein paar Infos haben vieleicht noch gefehlt.

Der Report wird über eine Datenbank in Lotus Notes per Script gestartet.
Ich bin also nicht in Excel.

Aber hier ein vbs Beispiel, wie´s auch reproduzierbar ist:

Set m_app = CreateObject("Excel.Application")
Set m_app = m_app.Application
m_app.ScreenUpdating = False
m_app.Visible = False
m_app.DisplayAlerts = False
Set m_books = m_app.Workbooks
Set m_book = m_books.Add()
Set m_sheets = m_book.Worksheets
Set m_sheet = m_sheets(1)

Msgbox "Jetzt eine xls Datei öffnen!"

m_app.Visible = True