Clever-Excel-Forum

Normale Version: Per VBA Blätter einer neu geöffneten Datei löschen, dann speichern und schließen...
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo in die Runde,

ich breche mir gerade die Haxen an folgendem Problem:

Ich möchte per Makro in meinem aktiven Excel eine andere Datei, die ich kurz vorher in ein
neues Verzeichnis kopiert und dort umbenannt habe, öffnen und alle Tabellenblätter heraus-
löschen, die nicht "Daten" oder "Filialen" heißen ... funzt aber nicht ... hier ist der Code : 

:
      Dim ws As Worksheet
:           
      Name (newexportfolder & "\" & strOldPkrExcelName) As (newexportfolder & "\" & strNewPkrExcelName)
      
      Workbooks.Open (newexportfolder & "\" & strNewPkrExcelName)
      Workbooks(newexportfolder & "\" & strNewPkrExcelName).Activate
      
      Application.DisplayAlerts = False
      
      For Each ws In ThisWorkbook.Worksheets
         If Not (ws.Name = "Daten" Or ws.Name = "Filialen") Then
            ws.Delete
         End If
      Next ws
      
      Application.DisplayAlerts = True
      
      ActiveWorkbook.Save
      ActiveWorkbook.Close
:
:

Die kopierte Datei wird wie gewünscht umgenannt, sie wird dann von dem Excel, in dem ich das Makro starte, auch geöffnet, 
aber wenn die FOR Loop aus obigem Code Schnipsel startet, bekomme ich nen "Laufzeitfehler 9 - Index außerhalb des gültigen Bereichs"

Ach ja, was passieren soll : In der neuen xls Datei sollen alle Arbeitsblätter, die nicht "Daten" oder "Filialen" heißen, gelöscht werden.

Danke Euch für's Drüberschauen, für ne Idee und jegliche Hilfe!

Gruss,
     Maikel
Hi Maikel,

lade bitte deine Beispieldatei hoch!

LG
Alexandra
Hallo Maikel,

Du setztest die Schleife auf ThisWorkbook an, was Du sicher nicht wolltest. Wink
Teste mal so: (es wird auch verhindert, dass eventuell das letzte übriggebliebene Tabellenblatt gelöscht werden soll, was ja nicht geht.)
      For Each ws In ActiveWorkbook.Worksheets
        If Not (ws.Name = "Daten" Or ws.Name = "Filialen") And ws.Index > 1 Then
           ws.Delete
        End If
     Next ws
Gruß Uwe
Moin & frohe Ostern Kuwer,

hab es gerade ausprobiert, Deine "Code Änderungs-Empfehlung" sieht schlüssig aus, Ergebnis war leider dasselbe ...
wieder der Laufzeitfehler 9...

Ich hab es dann alles komplett auskommentiert und Schritt für Schritt den Casus Knacktus zu finden versucht ... 
und siehe da, er stolpert über das : 

:
      Workbooks(newexportfolder & "\" & strNewPkrExcelName).Activate
:

Weil ich das eh nicht brauche, da vorher durch das Öffnen das Workbook sowieso aktiv ist, habe ich es kommentiert gelassen
und den Rest wieder "freigeschaltet" .. und siehe da, jetzt funktioniert es Smile, auch wenn ich mich wundere, warum diese
"unscheinbare nichts verändernde Codezeile" für den Stolperer sorgt Wink...

Danke Dir und auch Alexandra für's Drübergucken!

Gruss & schönen Ostersonntag,

      Maikel
Laola
Hallo Maikel,

nur mal noch ein Hinweis. Hilft nicht hier, aber vielleicht ein anderes mal.
Beim Aktivieren nimmst Du den Name des Workbooks ohne vorherige Pfadangabe.
Hallo Maikel,

Ich würde ganz auf alle Befehle mit "active" verzichten, weil Du beim Debuggen versehentlich das aktive Fenster ändern und so lassen könntest. Gerade beim Löschen und Sichern ist dies riskant.

So geht es auch, denke ich:
Dim wb as workbook
...

wb = workbooks.open(...)
For each ws in wb.worksheets...
...

wb.Save
wb.close

Viele Grüße,
Bernd P

PS: Auch "Select" würde ich aus diesem Grund aus meinem Wortschatz streichen Smile
Moin!
Ich spendiere ein Set, Bernd:
Set wb = Workbooks.Open(...)

Gruß Ralf
Danke, Ralf!
We're all set Smile

Viele Grüße,
Bernd P
... super, klasse Tips!
Das nehme ich auf jeden Fall noch mit Wink!

Beste Grüße,
              Maikel