Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Per VBA Blätter einer neu geöffneten Datei löschen, dann speichern und schließen...
#1
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
Antworten Top
#2
Hi Maikel,

lade bitte deine Beispieldatei hoch!

LG
Alexandra
[-] Folgende(r) 1 Nutzer sagt Danke an cysu11 für diesen Beitrag:
  • maikel408
Antworten Top
#3
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
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • maikel408
Antworten Top
#4
Smile 
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
Antworten Top
#5
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.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • maikel408
Antworten Top
#6
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
[-] Folgende(r) 1 Nutzer sagt Danke an Sulprobil für diesen Beitrag:
  • maikel408
Antworten Top
#7
Moin!
Ich spendiere ein Set, Bernd:
Set wb = Workbooks.Open(...)

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
[-] Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:
  • maikel408
Antworten Top
#8
Danke, Ralf!
We're all set Smile

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

Beste Grüße,
              Maikel
Antworten Top


Gehe zu:


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