landstreicher
Goto Top

Excel automatisch starten und am Ende schliessen

Hallo,

ich habe in einer Exceldatei einige Makros die beim starten der Datei automatisch ausgeführt werden sollen. .. soweit so gut ...

Problem 1:
nun habe ich mal folgdendes in "DieseArbeitsmappe" geschrieben

Private Sub Workbook_Activate()
Application.Run "Auswertung_PO3.xls!auswertung"  
End Sub

leider hat dies eine Endlosschleife zur folge.

Problem 2: da dieses Excelfile auch automatisch am Wochenende laufen soll, wo niemand vor der Kiste hockt, wünsche ich mir natürlich, das sich dieses auch wieder nach erfolgreichem Lauf automatisch beendet.

leider erscheint hier immer die normale Frage bei "Änderungen" "Sollen die Änderungen gespeichert werden?" ja;nein;abbrechen

die Änderungen sollen natürlich nicht gespeichert werden. Gibt es hier nun die Möglichkeit das er automatisch auf "nein" klickt ?

danke schon mal vorab.

Content-Key: 94229

Url: https://administrator.de/contentid/94229

Printed on: April 19, 2024 at 23:04 o'clock

Member: bastla
bastla Aug 12, 2008 at 11:47:41 (UTC)
Goto Top
Hallo Landstreicher!

Dein Problem 1 ist etwas knapp geschildert (bzw aus dem Zusammenhang gerissen) - vielleicht holst Du etwas weiter aus.

Zu P2:
Da es in dem Makro vermutlich irgendwo ein "Workbook.Close" geben dürfte, könntest Du dieses auf "Workbook.Close SaveChanges:=False
" abändern.

Andere Möglichkeit: Ein "ThisWorkbook.Saved=True" (am Ende des Makros) gaukelt Excel vor, dass alle Änderungen bereits gespeichert wären und sollte damit auch die Speicherabfrage verhindern.

Grüße
bastla
Member: miniversum
miniversum Aug 12, 2008 at 12:10:24 (UTC)
Goto Top
Zu P1:
Wenn ichs richtig verstehe dann ändere einfach das
Workbook_Activate
in
Workbook_Open
Member: Landstreicher
Landstreicher Aug 12, 2008 at 12:41:37 (UTC)
Goto Top
Hallo Bastla,

gäbe es da nicht das Problem, das ich absoluter Neuling bin und von tuten und bla*** keine ahnung habe

ich könnte dir das ganze mal zukommen lassen, wenn es dir hilft und mir natürlich face-wink
Ich weiss nicht mal wo ich das "Workbook.Close SaveChanges:=False" einordnen muss ???

zu P1)
schon behoben face-wink

nachtrag zu P2)
also es soll schon so sein das sich diese Excelldatei nach erfolgreichem lauf automatisch beendet.
da fehlt mir komplett die Bfehelskette. zusätzlich gibts halt noch das problem mit dem Workbook.Close
Member: Landstreicher
Landstreicher Aug 12, 2008 at 12:44:03 (UTC)
Goto Top
wahhhhhhhhhh - sin face-smile

genau das wars ... man war das einfach face-wink

bliebe noch P2

Dank dir.
Member: bastla
bastla Aug 12, 2008 at 12:52:38 (UTC)
Goto Top
Hallo Landstreicher!

Ich weiss nicht mal wo ich das "Workbook.Close SaveChanges:=False" einordnen muss ???
Das wäre nur ein Ersatz für eine bereits vorhandene "Close"-Zeile (muss nicht exakt "Workbook.Close" lauten) - die müsste sich ja eigentlich finden lassen.

Ansonsten wäre es aber trotzdem erforderlich, dass Du Dir selbst (und dann uns) den Ablauf der / die Zusammenhänge zwischen den einzelnen Makros klar machst - und ohne auch nur ein Stück Code gesehen zu haben, ist's etwas schwierig, Anpassungen vorzunehmen. face-wink

Grüße
bastla
Member: Landstreicher
Landstreicher Aug 12, 2008 at 12:57:11 (UTC)
Goto Top
simsalabin der code face-wink

Public workdir, savedir, perffile, defaultfile, myworkbook, protocol, _
       datestamp, filebegin, defaulthost, db_server, _
       overview, htmlsavedir As String
Public debug_level As Integer
' App Server Array  
Public app_server(1 To 50, 1 To 4) As Variant


Sub auswertung()
On Error GoTo fehler

' Bildschrimausgabe ausknipsen  
Application.ScreenUpdating = False

' Deklarationen und Variablen  
' ---------------------------------------------------  
Dim zaehler As Integer

workdir = get_param("workdir")  
savedir = get_param("savedir")  
htmlsavedir = get_param("htmlsavedir")  
' Checken der Verzeichnisse  
On Error GoTo dir_error
ChDir savedir
ChDir htmlsavedir
ChDir workdir
On Error GoTo 0
protocol = get_param("protocol_file")  
protocol = workdir & protocol
debug_level = get_param("debug_level")  
filebegin = get_param("filebegin")  
db_server = get_param("db_server")  
overview = get_param("overview")  
app_diagrams = get_param("app_diagrams")  
'Merke eigenes Workbook  
myworkbook = ActiveWorkbook.name

' Verhinderung des Abbruchs (Schutzverletzung)  
' Öffnen und Schließen der Benutzerdefinierten Charts  
On Error Resume Next
Workbooks.Open filename:=workdir & "XL8GALRY.XLS", ReadOnly:=True  
If Not Err.Number = 1004 Then
ActiveWorkbook.Close SaveChanges:=False
End If
On Error GoTo 0

'On Error GoTo fehler  
' Datum für verschiedene Plattformen  
datum = Date - 1
If Len(datum) = 10 Then
   datestamp = Right(datum, 4) & Mid(datum, 4, 2) & Left(datum, 2)
ElseIf Len(datum) = 8 Then
   datestamp = "20" & Right(datum, 2) & Mid(datum, 4, 2) & Left(datum, 2)  
Else
   datestamp = ""  
End If

' App Server Array  
' 1. Dimension: verschiedene App Server (max. 50!)  
' 2. Dimension: 1 App_server wie in SM51 (HOST_SID_SYSNR)  
'               2 HOST  
'               3 SID  
'               4 SYSNR  
Dim sheetname As String
sheetname = ActiveSheet.name
ActiveWorkbook.Sheets("Configuration").Activate  
zaehler = 1
For i = 10 To 1000
   If Cells(i, 1).Value = "app_server" Then  
      app_server(zaehler, 1) = Cells(i, 2).Value
      ' aufdröseln  
      pos1 = InStr(1, app_server(zaehler, 1), "_", vbTextCompare)  
      pos2 = InStr(pos1 + 1, app_server(zaehler, 1), "_", vbTextCompare)  
      app_server(zaehler, 2) = Left(app_server(zaehler, 1), pos1 - 1)
      app_server(zaehler, 3) = Mid(app_server(zaehler, 1), pos1 + 1, 3)
      app_server(zaehler, 4) = Right(app_server(zaehler, 1), Len(app_server(zaehler, 1)) - pos2)
      'MsgBox (app_server(zaehler, 1) & vbCr & _  
              app_server(zaehler, 2) & vbCr & _
              app_server(zaehler, 3) & vbCr & _
              app_server(zaehler, 4) & vbCr)
      zaehler = zaehler + 1
   End If
Next i
ActiveWorkbook.Sheets(sheetname).Activate
    ' Anzeige der App-Server  
    ' i = 1  
    ' While Not app_server(i, 1) = ""  
    '    MsgBox (app_server(i, 1))  
    '    i = i + 1  
    ' Wend  
' ENDE App Server Array  

' Auswertungsdatum festlegen  
datestamp2 = Date - 1
datestamp = Format(datestamp2, "YYYYMMDD")  
If datestamp = "" Then 'Abbruch  
   Exit Sub
End If
            


' ---------------------------------------------------  
' M A I N  
' ---------------------------------------------------  
' hier geht's mit der Schleife los  
proto ("Start Loop")  
i = 1
While Not app_server(i, 1) = ""  
    ' Arbeits Vars  
    datasheet = app_server(i, 1)
    perffile = filebegin & "." & app_server(i, 1) & "." & datestamp  
    
    proto ("new_sheet")  
    new_sheet (datasheet)
    proto ("open_perf_file")  
    okcode = open_perf_file(workdir & perffile)
    If okcode = "OK" Then  
        proto ("clear_perf_file")  
        clear_perf_file (perffile)
        Workbooks(myworkbook).Activate
        proto ("move_table_to_auswertung")  
        move_table_to_auswertung (perffile)
        Application.DisplayAlerts = False
        Workbooks(perffile).Close
        Application.DisplayAlerts = True
        proto ("create_header")  
        create_header (datasheet)
        If app_diagrams = "y" Or app_diagrams = "j" Then  
           proto ("create_diagram")  
           create_diagramm (datasheet)
        End If
    End If
    i = i + 1
Wend
proto ("Zusammenfassung erstellen")  
create_overview (overview)
create_overview_diagramm (overview)
proto ("export_dia_to_internet")  
Call export_dia_to_internet((myworkbook), (overview))
proto ("move_worksheet")  
move_worksheets

'Aktiviere eigenes Workbook  
'Workbooks(myworkbook).Activate  
proto ("ENDE")  

' Bildschrimausgabe anknipsen  
Application.ScreenUpdating = True

Exit Sub
fehler:
MsgBox ("Fehler " & Err & " aufgetreten!!!")  
proto ("Fehler " & Err & " aufgetreten!!!")  
Exit Sub

dir_error:
'MsgBox ("Fehler " & Err & " aufgetreten!!!")  
Mldg = Chr(13) & Err.Description & vbCr _
        & "Bitte prüfen Sie die Konfiguration der Verzeichnisse!"  
MsgBox Mldg, , "Fehler # " & Str(Err.Number) & " wurde ausgelöst"  
Exit Sub


End Sub

Sub ftp_to_webserver()
Application.ScreenUpdating = False
Dim exportwb, exportsh, files As String

exportwb = ActiveWorkbook.name
exportsh = ActiveSheet.name
wbz = 0
For i = 1 To Workbooks.Count
    If Left(Workbooks(i).name, 10) = "Auswertung" Then  
       myworkbook = Workbooks(i).name
       wbz = wbz + 1
    End If
Next i
If wbz <> 1 Then
   MsgBox ("FEHLER: Die Exceldatei, die die Makros enthält, ist nicht oder mehrfach geöffnet !!!" & vbCr _  
         & "(Hinweis: die Datei MUSS mit >Auswertung< beginnen) ")  
   Exit Sub
End If


Workbooks(myworkbook).Activate

webserver_ip = get_param("webserver_ip")  
webserver_account = get_param("webserver_account")  
webserver_passwd = get_param("webserver_passwd")  
webserver_dir = get_param("webserver_dir")  
htmlsavedir = get_param("htmlsavedir")  
htmllocaldir = Left(htmlsavedir, Len(htmlsavedir) - 1)



       
    
Call export_dia_to_internet((exportwb), (exportsh))
Workbooks(myworkbook).Activate


htfile = htmlsavedir & Left(exportwb, (Len(exportwb) - 4)) & ".html"  
files = Left(exportwb, (Len(exportwb) - 4)) & "*"  

extra_text = add_text_to_html(extra_text)
If extra_text <> "" Then  
   Call edit_html_page(extra_text, htfile)
End If

Call ftp(webserver_ip, files, htmllocaldir, webserver_dir, webserver_account, webserver_passwd, rc)
If rc Then
   MsgBox ("FTP Übertragung erfolgreich beendet!")  
Else
   MsgBox ("Fehler beim FTP!")  
End If

Application.ScreenUpdating = True

End Sub
Member: bastla
bastla Aug 12, 2008 at 13:27:44 (UTC)
Goto Top
Hallo Landstreicher!

Einmal abgesehen davon, dass das noch nicht die volle Wahrheit (bzw der vollständige Code) war - wird beim jetzigen Stand überhaupt schon versucht, Excel automatisch zu beenden, und scheitert dies nur noch an der Speicherabfrage (BTW: auf welche Datei bezieht sich diese Abfrage überhaupt?)?

Wenn ja, versuche es mit folgender (neuer) Zeile 149:
Workbooks(myworkbook).Saved = True
und schau mal, ob Du ein "Application.Quit" im restlichen Code findest.

Grüße
bastla
Member: Landstreicher
Landstreicher Aug 12, 2008 at 13:57:38 (UTC)
Goto Top
Hi,

du hast natürlich recht, das ist nur die halbe Miete. (hatte ganz vergessen das es noch ein Funktionen-Modul gibt.

nein es wird noch nirgends versucht excel nach dem Lauf der Auswertung automatisch schliessen zu lasssen
Wie gesagt, ich kenne mich mit VBA null aus und hangel mich gerade mehr oder weniger da durch, weil mir diese ständige "tippse hier das, da das und dort das an" Sache auf den Senkel geht face-wink


willst du den Rest des codes auch noch haben ? kleine Warnung .. das sind einige Zeilen face-wink

PS: wenn du eine Lösung hast sag mir doch bitte gleich wo ich wie was an welcher stelle eintragen soll.

Gruß Landstreicher
Member: bastla
bastla Aug 12, 2008 at 14:05:26 (UTC)
Goto Top
Hallo Landstreicher!

Na gut, dann eben drauf los: Ergänze das "Sub Workbook_Open()" (das ehemalige "Sub Workbook_Activate()") so:
Private Sub Workbook_Open()
Application.Run "Auswertung_PO3.xls!auswertung"  
ThisWorkbook.Saved = True
Application.Quit
End Sub
Grüße
bastla
Member: Landstreicher
Landstreicher Aug 12, 2008 at 14:31:17 (UTC)
Goto Top
ähhh ... drauf los fand ich gut und hat gewirkt face-wink

dank dir bastla