04.05.2015, 11:52 (Dieser Beitrag wurde zuletzt bearbeitet: 04.05.2015, 12:41 von friedensbringer.)
Hallo zusammen,
ich weiß nicht genau wie ich es am besten beschreiben soll, aber ich versuche es trotzdem:
Ich habe eine Excel Datei die ein Makro in einer anderen Excel Datei täglich aufrufen soll. Gestartet wird das ganze in der Nacht über den Windows Aufgabenplaner - das Makro startet auch immer wie gewünscht so weit so gut.
Im eigentlichen Makro wird eine Datei (mit unterschiedlichen Parametern in einer For-Schleife) aktualisiert am Ende gespeichert und dann die gespeicherte Datei mit den aktualisierten Daten an verschiedenen Pfaden abgespeichert.
Wenn ich das Makro lokal durchlaufen lasse, oder auch am Server via RDP dem Makro "zuschaue" während es läuft dann funktioniert alles tadellos. Sobald ich das im Hintergrund mache "hängt" Das Makro irgendwann fest, weil es die Datei nicht mehr schließt und es irgendwann zu einem Speicherproblem kommt. Sprich die Datei ist dann auf einmal 20 x geöffnet oder so.
Leider finde ich den Fehler einfach nicht - vielleicht hat jemand von euch eine Idee woran das liegen könnte?
Vielen Dank und lg
Olli
WIN 10 64-Bit Pro / EXCEL Microsoft Office 365 ProPlus 64-Bit
04.05.2015, 12:15 (Dieser Beitrag wurde zuletzt bearbeitet: 04.05.2015, 12:20 von Käpt'n Blaubär.)
Hallo Olli,
ich denke, es wäre nicht abwegig, einsehen zu können, daß wenn wer ein oder mehrere Makros auf Lauffähigkeit oder Fehler in der Programmierung untersuchen soll, auch den oder die Codes zur Verfügung gestellt bekommt. :05:
Mir persönlich wären die Dateien zum Testen sehr recht. Du bist lange genug Forumuser, um zu wissen, wie man sowas zur Verfügung stellen kann.
Public Sub SlicerItemSetzen(objSlicerCache As SlicerCache, ByVal strNameItem As String)
On Error Resume Next
' Datenschnitt - SlicerItem Setzen
Dim objSlicerItem As SlicerItem
Application.ScreenUpdating = False
With objSlicerCache If .SlicerItems(strNameItem).Selected = False Then .SlicerItems(strNameItem).Selected = True End If For Each objSlicerItem In .VisibleSlicerItems With objSlicerItem If .Name <> strNameItem Then If .Selected = True Then .Selected = False End If End With Next End With
Application.ScreenUpdating = True
End Sub
Public Sub SicherungskopieSpeichern(dateipfad As String, dateiname As String)
Dim wb As Workbook Dim ws As Worksheet
Application.DisplayAlerts = False
Set wb = Workbooks.Add For Each ws In ThisWorkbook.Worksheets If ws.Name <> "MA" And ws.Name <> "Parameter" And ws.Name <> "--" Then ws.Copy After:=wb.Worksheets(wb.Sheets.Count)
End If Next With wb ' Application.DisplayAlerts = False .Sheets(1).Delete .SaveAs Filename:=dateipfad & dateiname, FileFormat:=xlOpenXMLWorkbook ' .Close ' Application.DisplayAlerts = True End With
Private Sub Einblenden_Blattschutz_entfernen() Call Blatt_Einblenden_Alle Call Blatt_Einblenden_VeryHidden Call Blatt_Schutz_aufheben Sheets("Parameter").Select End Sub
Private Sub Ausblenden_Blattschutz_setzen() Call Blatt_Schutz_setzen Call Blatt_Ausblenden Call Blatt_Ausblenden_VeryHidden Sheets("Balanced Scorecard").Select End Sub
Private Sub Blatt_Schutz_setzen() On Error Resume Next
Dim I As Integer For I = 1 To Sheets.Count ActiveWorkbook.Sheets(I).Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:="qawsedrftgmjnhbgvf" Next 'MsgBox "alle Blätter wurden geschützt" End Sub
Private Sub Blatt_Schutz_aufheben() On Error Resume Next
Dim I As Integer For I = 1 To Sheets.Count ActiveWorkbook.Sheets(I).Unprotect Password:="qawsedrftgmjnhbgvf" Next ' MsgBox "alle Blätter wurden vom Blattschutz befreit" End Sub
Private Sub Copy_File(vbnr, region, speicherpfad, mrbname, mrbpfad)
Dim myFSO As Object Dim qFolder As String, tFolder As String Dim qFile As String Dim tFile As String
varLinks = ActiveWorkbook.LinkSources(xlExcelLinks) If IsEmpty(varLinks) Then ' MsgBox "keine Links gefunden!" Exit Sub End If 'strText = "Total Links: " & UBound(varLinks) & vbCr For I = LBound(varLinks) To UBound(varLinks) ' strText = strText & varLinks(i) & vbCr ActiveWorkbook.BreakLink Name:=varLinks(I), Type:=xlLinkTypeExcelLinks Next I 'MsgBox strText
Else Exit Sub End If
End Sub
Private Sub Datenverbindungen_löschen() ' Verbindungen in aktiver Arbeitsmappe Loeschen ' Dim wb As Workbook, objConnection As Variant, varAuswahl As Long Set wb = ActiveWorkbook
das mache ich hier folgendermaßen. Ich speichere die Datei mit den gerade aktuellen Werten ab und kopiere dann diese Datei in einen anderen Ordner. Danach werden die Parameter in der Quelldatei geändert, gespeichert, kopiert usw.
lg
Olli
Code:
'Datei als Kopie speichern Application.DisplayAlerts = False
Zitat:Wenn ich das Makro lokal durchlaufen lasse, oder auch am Server via RDP dem Makro "zuschaue" während es läuft dann funktioniert alles tadellos. Sobald ich das im Hintergrund mache "hängt" Das Makro irgendwann fest, weil es die Datei nicht mehr schließt und es irgendwann zu einem Speicherproblem kommt. Sprich die Datei ist dann auf einmal 20 x geöffnet oder so.
Ich habe mir den code jetzt nicht angeschaut. Versuche es mal damit, den Prozess als Administrator einzurichten. In den Eigenschaften stellst Du noch "mit höchsten Privilegien ausführen" ein.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Du müßtest per Fehlerbehandlung heraus finden, wo es hakt. Wie du das aufbauen könntest, wird dir hier gezeigt. Außerdem solltest Du den Code umarbeiten indem Du das Selektieren und Aktivieren vermeidest.
es ist nicht unproblematisch, code im unangemeldeten Zustand laufen zu lassen. Wenn ich mich recht entsinne, laufen im unangemeldeten Zustand z.B. keine Workbook_Open - Makros. Ich habe da ein Projekt, in welchem ich deswegen die Excel-Datei mit einem Script starte und aus diesem Script heraus ein "Start" - Makro der Exceldatei. Deswegen hilft an der Stelle keine Fehlerbehandlung. Das wäre übrigens wahrscheinlich gleich der vielversprechendste Lösungsansatz.
Als Nachweis könnte man z.B. im Workbook_Open ein Textfile anlegen. Wenn man das dann als Prozess eines unangemeldeten users startet, bemerkt man zumindest, dass keines angelegt wird. Eine Fehlermeldung bekommt man nicht - das Workbook_open wird ja nicht ausgeführt und dementsprechend keine Fehlerbehandlung und auch kein anderes Makro.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
(07.05.2015, 20:52)schauan schrieb: es ist nicht unproblematisch, code im unangemeldeten Zustand laufen zu lassen. Wenn ich mich recht entsinne, laufen im unangemeldeten Zustand z.B. keine Workbook_Open - Makros.
das wußte ich jetzt nicht, bei Olli scheint aber zumindest das Workbook_Open-Ereignis zu laufen, denn sonst wären bei ihm nicht die Datei mehrmals geöffnet. Durch die Verwendung von On Error Resume Next merkt er aber nicht, wenn das Makro lokal läuft, das im Makroablauf eventuell Fehler vorhanden sind.