Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1328to1332
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Sheet(Array(..)).Select funktioniert nicht

Sheet(Array(..)).Select funktioniert nicht
23.08.2013 16:27:00
SK
Hallo,
ich habe ein Workbook mit mehreren Sheets, wovon immer mehrere zusammengehörige in ein neues Workbook kopiert werden soll.
Folgenden Code verwende ich:
Sheets(wert).Select
Sheets(last).Activate
Sheets(wert).Copy
ActiveWorkbook.Colors = Workbooks(Colorfile).Colors
ActiveWorkbook.SaveAs Pfad1 & ste(i), FileFormat:=xlExcel8
Aus irgend einem Grund werden die zusammengehörigen Sheets aber nicht ausgewählt. Die Variable wert hat z.B. folgenden Inhalt: Array("MK3 DA", "MK3 KST")
last hat "MK3 KST"
Verwende ich statt dessen folgenden Code zum Testen mit statischen Werten:
Sheets(Array("MK3 DA", "MK3 KST")).Select
Sheets("MK3 KST").Activate
Sheets(Array("MK3 DA", "MK3 KST")).Copy
funktioniert alles. Ich hab ehrlich gesagt keine Idee mehr :(

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Sheets(last) müsste jedenfalls funktionieren, ...
23.08.2013 18:34:05
Luc:-?
…SK;
bei wert kommt es ggf auf die Deklarierung an, aber du kannst ja auch Konstanten anlegen, denn so flexibel scheint das ja auch nicht zu sein, was du mit den Variablen machst. Also …
Const last$ = "MK3 KST", wert$ = "MK3 DA, MK3 KST"
Da man Konstanten ebenso wie Variablen am PgmAnfang deklariert, dürfte eine ggf spätere Änderung recht einfach sein.
Im Übrigen halte ich solche Blattnamen für kontraproduktiv – Leerzeichen sollte man besser vermeiden! (Viell liegt's ja gerade daran!)
Gruß Luc :-?

AW: Sheet(Array(..)).Select funktioniert nicht
24.08.2013 08:52:16
Beverly
Hi,
also bei mir funktioniert es so korrekt:
   Dim last As Variant
last = Array("MK3 DA", "MK3 KST")
Sheets(last).Copy
Übrigens: bei "Excel Gut" solltest du eigentlich wissen, dass man in VBA zu 99% aller Fälle auf Select/Activate verzichen tann. ;-)


Anzeige
AW: Sheet(Array(..)).Select funktioniert nicht
26.08.2013 15:04:39
SK
Select und Activate habe ich nur zum Debuggen drin, weil es nicht funktioniert.
Das hier funktioniert bei mir auch:
   Dim last As Variant
last = Array("MK3 DA", "MK3 KST")
Sheets(last).Copy
Wenn ich die sheets allerdings dynamisch ermittle, klappt es eben nicht.
Ich habe auch schon versucht, statt des Namens den Index zu verwenden, allerding mit dem selben Problem.
Nochmal zum Hintergrund, das Blatt enthält immer 2 zusammengehörige Arbeitsblätter "....DA" und "....KST). Für jedes Paar soll ein neues Excel-File mit jeweils diesen 2 Blättern erstellt werden. Meine Arrays sehen auch gut aus und enthalten jeweils immer die beiden Sheets, aber das copy schmeist mir dann immer in jedes der Files alle Blätter rein.

Anzeige
AW: Sheet(Array(..)).Select funktioniert nicht
26.08.2013 15:23:41
SK
Hier nochmal der saubere Code. Zum Testen baue ich wert hier als string auf, vorher war das ein array. Funktioniert aber geauso wenig:

For i = 0 To UBound(ste)
wert = ""
For Each Blatt In ActiveWorkbook.Worksheets
If InStr(Blatt.Name, ste(i)) Then
If wert  "" Then
wert = wert & ", "
End If
wert = wert & Blatt.Index
End If
Next Blatt
Sheets(Array(wert)).Copy
ActiveWorkbook.SaveAs Pfad1 & ste(i), FileFormat:=xlExcel8
Next

AW: Sheet(Array(..)).Select funktioniert nicht
26.08.2013 16:08:54
Beverly
1. du baust einen String!! zusammen, Excel benötigt aber ein Array. Entweder du schreibst die Tabellennamen per Schleife in ein Array oder du erstellst aus deinem String per Split ein Array
2. geht das nur mit dem Blattnamen und nicht dem Index


Anzeige
AW: Sheet(Array(..)).Select funktioniert nicht
26.08.2013 16:26:59
SK
Hab den entscheidenden Tipp auch grad gefunden:

Dim ws() As Variant
For i = 0 To UBound(ste)
Erase ws()
k = 0
For Each Blatt In ActiveWorkbook.Worksheets
If InStr(Blatt.Name, ste(i)) Then
ReDim Preserve ws(0 To k)
ws(k) = Blatt.Index
k = k + 1
End If
Next Blatt
Sheets(ws).Copy
ActiveWorkbook.SaveAs Pfad1 & ste(i), FileFormat:=xlExcel8
ActiveWorkbook.Close
Next
Index geht übrigens auch ;)
Wichtig war, den Array als Variant anzulegen, als String und mit Blatt.Name ging auch nicht - strange.
Was mich wundert, dass wenn ich statisch angebe Sheets(Array("...","...")).copy es funktioniert, wenn ich "...","..." zur Laufzeit einsetze nicht. Muss man erstmal drauf kommen.

Anzeige
ReDim ... ws(0 To k) muss man idR nicht ...
26.08.2013 18:34:45
Luc:-?
…SK,
ws(k) genügt, denn Index 0 für das 1.Element ist Standard, es sei denn, du hast etwas anderes eingestellt.
Gruß Luc :-?

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige