Microsoft Excel

Herbers Excel/VBA-Archiv

Löschen von Reitern

Betrifft: Löschen von Reitern von: Arndt
Geschrieben am: 27.10.2020 12:56:23

Ausgangslage:
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

Betrifft: AW: Löschen von Reitern
von: Rudi Maintaire
Geschrieben am: 27.10.2020 13:13:38

Hallo,
hier
' 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

werden Blätter die nur xlhidden sind nicht sichtbar gemacht. Lösch mal If...
Beinhalten strDateinamOhneMakro und strDateinamMitMakro die Endung? Dann lösche diese. Sie wird durch die Angabe von FileFormat automatisch erzeugt.

Dimensionierungen gehören an den Anfang eines Makros.
Den Pfad würde ich in eine Konstante packen.

Gruß
Rudi

Betrifft: AW: Löschen von Reitern
von: Arndt
Geschrieben am: 29.10.2020 11:38:22

Hallo Rudi,
vielen Dank für Deine Hinweise. Habe sie umgesetzt. Läuft auf meinem Rechner wie zuvor, auf den anderen nicht.

Betrifft: AW: Löschen von Reitern
von: Daniel
Geschrieben am: 27.10.2020 13:19:37

HI
schwer zu sagen, ohne die Rechner und die Unterschiede zu kennen.
Wenn Bestimmte Befehle auf einem Rechner laufen und auf einem anderen nicht, dann liegt es häufig daran, dass die entsprechenden Verweise korrupt sind.
das erkennt man daran, dass VBA-Explorer unter EXTRAS - OPTIONEN - VERWEISE bei einem aktiven Verweis was seltsames steht.
In der Regel reicht es dann aus, diesen Haken zu entfernen, VBA wird benötigte Verweise im Regelfall erkennen und selbst neu setzen und dabei korrigieren.

ansonsten stellt sich die Frage, ob es bei der beschriebenen Aufgabe nicht einfacher ist, einfach das benötigte Tabellenblatt in eine neue Datei zu kopieren.

Gruß Daniel

Betrifft: AW: Löschen von Reitern
von: Arndt
Geschrieben am: 29.10.2020 11:47:45

Hallo Daniel,
vielen Dank für Deine Mühe. Die eingetragenen Verweise sind auf allen Rechnern gleich. Bin schon dabei, das gleiche Ziel auf anderem Wege zu erreichen. Mal sehen, welche Komplikationen da dann auftreten...

Beiträge aus dem Excel-Forum zum Thema "Löschen von Reitern"