Schließen mehrerer Excel-Instanzen
#11
Hallo snb,

muss ich testen, ob VB-Skript das kann... Aber löst das mein Problem??? Ist doch nur eine geänderte Schreibweise gegenüber
objExcel....
objExcel....
objExcel....

Oder?

Gruß,
Lutz
Top
#12
Hallo Lutz,

das war geplauder der Großen, wissenden.

Unsereins ist froh, wenn man so etwas auf die ette bekommt:

Microsoft Excel Objekt Tabelle1
Option Explicit 
Sub schliessen()
'alle Workbooks sollen geschlossen werden - nur nicht diese
'Dimensionierung
Dim wbk As Workbook
Application.ScreenUpdating = False 'Bildschirm wird nicht aktualisiert
    'Der Code
    For Each wbk In Application.Workbooks 'Schleifen Anfang
        If wbk.Name <> ThisWorkbook.Name Then 'Anfang: Alle Workbooks ausser dieser
            wbk.Close saveChanges:=False 'Workbooks schliessen ohne Speichern
            'oder, das müsst ihr entscheiden
            'wbk.Close saveChanges:=True 'Workbooks schliessen mit Speichern
        End If 'Ende
    Next 'Schleifen Ende
Application.ScreenUpdating = False 'Bildschirm wird wieder aktualisiert
End Sub

Gruß
Marcus

Wissen ist Macht - es ist aber nicht schlimm nicht alles zu wissen.
Man muss nicht alles wissen - man muss nur wissen wo es steht, oder wo man Hilfe bekommt.
Top
#13
Du kreierst dein eigenes Problem: createobject("Excel.Application") erstellt eine Neue Excel Instanz; und das ist überflüssig.

Teste mal bitte.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Top
#14
Hallo snb,

getestet: Fehler in der With workbooks-Zeile.
Nochmal zur Erklärung, dieser Code ist VB-Skript, NICHT VBA!!!
Mit diesem Code wird Excel überhaupt erst gestartet, die Datei geöffnet und anschließend das Makro gestartet:
Code:
set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
set workbook = objExcel.Workbooks.Open("\\denbppfs002\lutz.fricke$\Makros\Neues_Produktionsreporting\Makros\Neu Makro OpenProcessOrders Rev.12.xlsm")
objExcel.run "A_Ablauf.A_Ablauf"
Nachdem mein Makro durchgelaufen ist kommt der Ablauf wieder in dieses Skript zurück und schließt die Datei und Excel:
Code:
objExcel.DisplayAlerts = False
objExcel.Workbooks.Close()
objExcel.Quit()
objExcel.DisplayAlerts = True
Dieser Ablauf funktioniert auch solange keine Exporte in Excel durchgeführt werden (sondern z.B. speichern als .txt).
Sobald der Export in Excel erfolgt, poppt eine weitere Instanz auf...

Leider hat SAP das Problem, das beim Exportieren von Tabellen mit vielen Spalten mehrzeilige Tabellen erzeugt werden (sprich im SAP eine Zeile mit 50 Spalten, im Text-File 2 Zeilen mit je 25 Spalten). Außerdem ist die Übergabe von Überschriften, Zahlen etc. nicht immer eindeutig.
Daher der Excel-Export...

Gruß,
Lutz
Top
#15
Hallo zusammen,

habe jetzt mein Problem gelöst.
Der Ablauf ist wie gepostet, allerdings prüfe ich vor dem Schließen der exportierten Dateien, ob es die letzte in der Instanz ist.
Sind noch mehr Dateien in der Instanz geöffnet, schließe ich die Datei, ist es die letzte, beende ich die Instanz.

Anbei der Code:
Code:
If WkbOpenOrders.Parent.Workbooks.Count > 1 Then
    WkbOpenOrders.Close savechanges:=False
Else
    WkbOpenOrders.Parent.Quit
End If

Hat in den ersten Probeläufen die richtigen Ergebnisse gezeigt (.Parent.Workbooks.Count hat immer die erwartetetn Werte gezeigt) und nach dem Schließen der letzten Datei war keine leere Instanz zu sehen.

Vielen Dank für Eure Hilfe,
Lutz
Top
#16
Hallo Lutz,

ich habe das selbe Thema mit SAP scripting / Excel und habe dies so gelöst:

Code:
Public Sub Esperar(Optional ByVal archivo As String)
On Error Resume Next
Set Wshell = CreateObject("WScript.Shell")
Do
Err.Clear
Set xclapp = GetObject(, "Excel.Application")
If Err.Number = 0 Then Exit Do
DoEvents '---> This do the trick in VB7
'msgbox "Wait for Excel session"

wscript.Sleep 2000
Loop

Do
Err.Clear
Set xclwbk = xclapp.Workbooks.Item(archivo)
If Err.Number = 0 Then Exit Do
DoEvents
'msgbox "Wait for SAP workbook"
wscript.Sleep 2000
Loop

On Error GoTo 0
Set xclsheet = xclwbk.Worksheets(1)

xclapp.Visible = False
xclapp.DisplayAlerts = False

xclapp.ActiveWorkbook.Close

Set xclwbk = Nothing
Set xclsheet = Nothing
End Sub

Diese Lösung funktioniert bei mir bis jetzt tadellos...

Lg,

Chrisi
Top
#17
Hallo Chrissi,

was machst Du da genau?

Ich erkenne, dass Du das Excel-Objekt in ein Variable schreibst, dann die Datei in eine Variable und am Ende das Blatt. Dann schließt Du das Excel-Object.
Was macht das DoEvents genau?

Bei mir sind letztlich zwei Excel-Objekte offen, wie bekomme ich beide geschlossen?

Machst Du viel mit SAP und Excel? Bin immer auf der Suche nach Leuten, die sich da auskennen. Ist komischerweise eine echte Nische, obwohl die Kombi echt der Hammer ist.

Gruß,
Lutz
Top
#18
Hallo,

ich habe den Code aus dem Netz, da ich es selbst nicht geschafft habe, das Excel welches sich beim Export aus SAP selbstständig öffnet wieder automatisch zu schließen oder dies zu unterbinden.
Der Code funktioniert und muss nur direkt nach dem Export gerufen werden. Probier es einfach mal...

Ja Du hast recht - SAP und Excel / VBA in Kombi ist echt cool - habe schon einiges gemacht...

Lg
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste