Ich habe die Lösung:
Ich baue in meiner Mappe ein weiteres Modul ein.
In diesem Modul deklariere ich eine globale (Public) Variable:
Option Explicit
Public Status As Boolean ' False = Aufruf nich vom VB-Script'
' True = Aufruf vom VB-Script'
Private Sub setStatus()
Status = True
End Sub
Dann baue ich eine Abfrage in BeforeClose() bzw. BeforeSave() ein:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Status Then Exit Sub
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If Status Then Exit Sub
End Sub
Und diese ganze Sache starte ich aus meinem VBScript heraus:
Dim ExcelApp, ExcelWB
Set ExcelApp= createobject("Excel.Application")
Set ExcelWB = ExcelApp.Workbooks.Open("C:\Mappe.xls")
ExcelApp.Run "Mappe.xls!modul1.setStatus"
Das Ganze bewirkt, dass die Variable "Status" als FALSE gesetzt wurde.
Öffne ich nun die Mappe händisch, so bleibt Status = FALSE. Öffne ich aber aus meinem Script heraus, so wird die Funktion setStatus ausgeführt, wo Status nun auf TRUE gesetzt wird.
Und wenn das ist, dann werden die beiden Sub's (Workbook_BeforeClose & Workbook_BeforeSave) verlassen, noch bevor sie ausgeführt werden.
Ich danke dir trotzdem unknown für die vielen zahlreichen Tipps, gerade das übergeben eines Objektes an JS zurück.
Weiß du auch, wie man z.B. 2 Objekte gleichzeitig übergibt?
LG Romero