Benachrichtigung bei Fehler in Makro
#1
Hallo zusammen,

ich hoffe ihr könnt mir wieder einmal bei einem Problem weiterhelfen.
Ich habe ein Makro das in der Nacht via "Geplante Tasks" auf einem Server 2003 läuft.
Das Makro öffnet, aktualisiert und speichert immer einige Dateien.

Meistens macht es das auch tadellos, aber hin und wieder bleibt das Makro irgendwo hängen.

Meistens sind irgendwelche bereits geöffneten Dateien schuld die von den Benutzern am Vortag nicht geschlossen wurden oder sowas...

Ich könnte nun natürlich einfach ein

Code:
On Error Resume Next

einbauen und drauf hoffen, dass es am nächsten Tag wieder alles passt.
Super wäre allerdings wenn ich irgendeine Benachrichtigung erhalten würde, dass das Makro nicht korrekt durchgelaufen ist (Mail?).

Meistens schaue ich nicht täglich auf den Server und daher kann es sein, dass mir das dann einige Tage entgeht...

Vielleicht hat ja jemand eine gute Idee für mich.

Danke und lg

Olli
Top
#2
Hallo Olli,

(14.05.2014, 12:21)friedensbringer schrieb: Super wäre allerdings wenn ich irgendeine Benachrichtigung erhalten würde, dass das Makro nicht korrekt durchgelaufen ist (Mail?).

die Schwierigkeit ist, wenn das Makro hängt und auf das Schließen einer Datei wartet, kann es ja nicht gleichzeitig ein Mail verschicken.
Top
#3
Hi Olli,

weshalb prüfst du nicht mit dem Makro vorab, ob nur die benötigten Arbeitsmappen geöffnet sind? Falls noch andere offen sind, dann diese schließen.


Dateiupload bitte im Forum! So geht es: Klick mich!
" height=35" align="left" alt="Grußformel">Dateiupload bitte im Forum! So geht es: Klick mich!
" height=35" align="middle" alt="Beverly's Excel - Inn">
Top
#4
Hallo Ralf, hallo Karin,

danke für die Infos. Gibt es denn via VBA eine Möglichkeit die geöffneten Excel Dateien zu schließen wenn diese auf einem anderen PC geöffnet sind?
Wie erwähnt läuft das Skript ja auf einem Server und die Dateien sind meistens bei irgendjemandem der vergessen hat die Datei zu schließen auf einem Client im Netzwerk geöffnet...

Eine anderen Alternative wäre eventuell wie von Karin vorgeschlagen vorab zu prüfen ob die Datei geöffnet ist und wenn dies der Fall sein sollte dann das Makro nur für diese Datei "auszusetzen" aber alle anderen Dateien zu aktualisieren...

Vielleicht hat hier ja jemand noch eine Idee bzw. Code für mich, untenstehend einmal der entsprechende Teil aus meinem Makro...

Code:
For loi = 2 To loletzte
        
        ez = Timer 'Timer für Makrodauer starten
        
        dateiname = Cells(loi, 2).Value 'Dateiname auslesen
        
        Cells(loi, 2).FormulaR1C1 = dateiname 'Dateiname nochmals als Formel in Zeile schreiben
        
        Cells(loi, 3).Value = Mid(dateiname, Len(dateiname) - InStr(StrReverse(dateiname), ".") + 2) 'Dateiendung auslesen

        If Sheets("01-Quellfiles").Cells(loi, 2).Value <> "" And Sheets("01-Quellfiles").Cells(loi, 3).Value <> "bat" Then

            'Dateiname auswählen

            reihenfolge = Cells(loi, 1).Value
            dateiname = Cells(loi, 2).Value
        
        '   Pfad muss angegeben werden, damit die Datei geöffnet werden kann
            Workbooks.Open Filename:=dateiname
            ActiveWorkbook.RefreshAll
            SendKeys "^%{F5}", True                  'STRG+ALT+F5 drücken
            Calculate
            Application.Calculation = xlCalculationAutomatic
            ActiveWorkbook.Save
            
'            ActiveWindow.Close

            Windows("Skripte.xlsm").Activate

            'Haken setzen wenn Datei geöffnet / neu berechnet und gespeichert wurde
            Range("D" & loi).Select
            ActiveCell.FormulaR1C1 = "þ"
            
        End If
        
        Sheets("01-Quellfiles").Range("E" & loi).Value = Round((Timer - ez) / 60, 2) '& " Minuten"
    
    Next loi

Vielen Dank und lg

Olli
Top
#5
Hi Olli,

ich hatte bei meinem Vorschlag nicht bedacht, dass man m.W. keine Arbeitsmappe schließen kann, die auf einem anderen Rechner geöffnet ist (ich lasse mich aber gene eines besseren belehren). Deshalb bleibt nur diese Variante: im Code prüfen, ob die durchlaufene Datei die "gewünschte" ist, andernfalls diese Datei nicht bearbeiten.


Dateiupload bitte im Forum! So geht es: Klick mich!
" height=35" align="left" alt="Grußformel">Dateiupload bitte im Forum! So geht es: Klick mich!
" height=35" align="middle" alt="Beverly's Excel - Inn">
Top
#6
Hi,

mit
On Error Resume Next
sollte mit Bedacht umgegangen werden. Wenn die Ursachen dafür bekannt sind eben diese behandeln.

Ich nutze aber on error resume next manchmal in Verbindung mit

on error resume next
'Codeteile
if err.number <> 0 then 'oder eine spezielle Nummer abfragen
'dann mache was auch immer z.B Mail verschicken ;)
end if
on error goto 0
''code geht weiter
lg Chris
Feedback nicht vergessen.
[Bild: v.gif]
3a2920576572206973742064656e20646120736f206e65756769657269672e
Top
#7
Hi Olli,

nach diesem Prinzip:

Code:
Dim wkbMappe As Workbook
   Dim blnOffen As Boolean
   For loI = 2 To loletzte
      ez = Timer 'Timer für Makrodauer starten
      dateiname = Cells(loI, 2).Value 'Dateiname auslesen
      For Each wkbMappe In Workbooks
         If wkbMappe.Name = dateiname Then
            blnOffen = True
            Exit For
         End If
      Next wkbMappe
      If blnOffen = False Then
      
         '...hier deinen auszuführenden Code
      
      End If
      blnOffen = False
   Next loI


Dateiupload bitte im Forum! So geht es: Klick mich!
" height=35" align="left" alt="Grußformel">Dateiupload bitte im Forum! So geht es: Klick mich!
" height=35" align="middle" alt="Beverly's Excel - Inn">
Top
#8
Hallo Chris, hallo Karin,

vielen Dank - werde ich einmal entsprechend ausprobieren... :)

lg und schönes Wochenende

Olli
Top
#9
Hallo Olli,

ob eine Datei von jemandem geöffnet ist, kannst Du so prüfen:

http://www.xltips.de/ftxt/vba-pur/File/FileOpened.html

Schließen kannst Du sie leider nur, wie Karin schon schreibt, bei Dir und nicht anderswo bzw. bei einem anderen Nutzer Wink.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#10
Hallo zusammen,

noch eine Frage - ich habe in derselben Datei ein Makro, das mir Dateien von verschiedenen Orten an einen bestimmten Platz kopiert.
Meistens funktioniert das einwandfrei, aber manchmal erhalte ich da eine Meldung:

Laufzeitfehler '70':
Zugriff verweigert

Kann mir hier noch jemand helfen wie ich den Code umbauen müsste, damit die entsprechende Datei einfach ausgelassen wird und kein Haken in Spalte D gesetzt wird sondern diese leer bleibt:

Code:
FileCopy strOldPath, strNewPath 'Hier tritt teilweise der Fehler auf
        
'Haken setzen wenn Datei geöffnet / neu berechnet und gespeichert wurde
Range("D" & loi).Select
ActiveCell.FormulaR1C1 = "þ"

Vielen Dank und lg

Olli
Top


Gehe zu:


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