Gegeben ist eine Arbeitsdatei, die verschiedene sichtbare und nicht sichtbare Reiter xlVeryHidden" sowie Makros enthält. Nach Drücken eines Befehlsknopfes in dieser Arbeitsdatei wird eine Prozedur aufgerufen und ein weiterer Reiter erzeugt, Eintragungen durchgeführt und der neue Reiter formatiert. Anschließend wird unter einem neuen Namen eine Kopie abgespeichert, die Makros enthält. Sodann erfolgt in der Kopie die Sichtbarmachung aller Reiter und eine zweite Schleife führt das Löschen aller Reiter bis auf den einen neuen durch. Dann wird diese Datei unter gleichem Namen, jedoch ohne Makros gespeichert. Abschließend wird die Kopie mit Makros gelöscht Kill und aus der Arbeitsdatei der neu erstellte Reiter herausgelöscht und die Arbeitsdatei abgespeichert. Das ist der Inhalt des mitgesendeten Codes.
Was mich nun in den Wahnsinn treibt ist, dass der Code auf dem Rechner sauber durchläuft, auf dem er erstellt wurde. Auf weiteren drei Rechnern aber nicht. Die Anweisungen werden bis zum Sichtbarmachen aller Reiter ausgeführt und dann bricht die Veranstaltung ab und man erhält zwei offene Dateien, die unfertig sind. Mit Application.DisplayAlerts = False/True habe ich schon herumgespielt. Funktioniert auf dem Programmierrechner an verschiedenen Stellen im Code, auf den anderen Rechnern führt es immer zum Abbruch der Ausführung. Ohne Application.DisplayAlerts = False/True läuft der Code auf den anderen Rechnern durch, ruft aber bei jedem Schleifendurchlauf der Löschung ein Meldungsfenster auf, das ich unterdrücken will, denn die Löschung der Reiter ist ja explizit beabsichtigt. Systembasis ist Windows 10 mit Office 365 auf allen Rechnern. Die Rechner sind altersmäßig und vom Typ her unterschiedlich.
So: Was läuft hier falsch? Kann ich die Meldungen auf andere Weise unterdrücken (Errorhandler oder, oder) und den Programmdurchlauf erzwingen? Beschimpfungen nehme stoisch entgegen, sofern auch eine Lösung mit dabei ist. Vielen Dank schon mal an dieser Stelle, dass Ihr Euch durch den Text gearbeitet habt. PS: Eine Lösung wäre große Klasse, ich würde aber auch gern verstehen, warum es so nicht geht.
Ausschnitt:
'## Speichern der neuen Datei im Excel-Format:
'##
' Nachfolgende Zeile liest den aktuellen Dateinamen aus und übergibt diesen an eine Variable:
Dim strProjektdateiname As String
strProjektdateiname = ActiveWorkbook.Name
' Übergabe des Dateinamens an die Arbeitsdateikopie:
ActiveWorkbook.SaveCopyAs "C:\Users\Public\Downloads\" & strDateinamemitMakro
' Öffnen der Dateikopie:
Workbooks.Open "C:\Users\Public\Downloads\" & strDateinamemitMakro
' Sichtbarmachen aller Reiter:
Dim xWs As Worksheet
For Each xWs In Application.ActiveWorkbook.Worksheets
If xWs.Visible = xlVeryHidden Then
xWs.Visible = True
End If
Next
' Löschen der Tabellenreiter außer AP:
For Each xWs In Application.ActiveWorkbook.Worksheets
If xWs.Name "AP" Then
Application.DisplayAlerts = False
xWs.Delete
Application.DisplayAlerts = True
End If
Next
' Speichern und schließen der geänderten Kopie nunmehr ohne Makros:
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=("C:\Users\Public\Downloads\" & strDateinameohneMakro), FileFormat:=xlOpenXMLWorkbook
Application.DisplayAlerts = True
ActiveWorkbook.Close
' Löschen der zuvor erzeugten Arbeitskopie mit Makros:
Kill "C:\Users\Public\Downloads\" & strDateinamemitMakro
' Öffnen der Projektdatei, löschen des Reiters AP und speichern ohne zu schließen:
Workbooks.Open "C:\Users\Public\Downloads\" & strProjektdateiname
Application.DisplayAlerts = False
Worksheets("AP").Delete
Application.DisplayAlerts = True
ActiveWorkbook.Save