PDA

Vollständige Version anzeigen : mehrere Arbeitsblätter der richtigen Reihenfolge kopieren


MSOfficeAnwender
24.08.2017, 14:06
Ich bin es wieder und habe eine ziemlich einfache Fragestellung. Ich weiß aber nicht ob und wie diese umsetzbar ist.

Zunächst zähle ich in meinem Makro wie viele gefüllte Zellen in einem Bereich vorhanden sind
Anz = WorksheetFunction.CountIf(KKStool.Worksheets(Sz).Range("D99:D108"), "<>")

Je nach Anzahl der gefüllten Zellen wird das Arbeitsblatt "Kunststoff" in der Arbeitsmappe "Stammdaten" kopiert. (sind drei Zellen gefüllt, wird das Arbeitsblatt zwei mal kopiert)

For iCounter = 1 To (Anz - 1)
Stammdaten.Worksheets("Kunststoff").Copy after:=Worksheets("Kunststoff")

jetzt möchte ich, dass die kopierten Arbeitsblätter in der richtigen Reihenfolge eingefügt werden also: Kunststoff, Kunststoff(2), Kunststoff(3) und nicht Kunsstoff, Kunststoff (3), Kunststoff (2)

Eine nachträgliche Sortierung der gesamten Arbeitsmappe ist bei mir nicht möglich, da ich mehr Unordnung als Ordnung schaffen würde ;-)

rastrans
24.08.2017, 15:07
Hallo,

jedes Worksheet hat auch eine Indexnummer ( Worksheets("Kunststoff").Index ). Und Worksheets kannst du nicht nur mit dem Namen ansprechen, sondern auch mit der Indexnummer. For i = 1 to 5
With Worksheets("Kunststoff")
.Copy After:=Worksheets(.Index + i - 1)
End With
NextGrüsse
rastrans

MSOfficeAnwender
25.08.2017, 07:41
Das mit dem Index habe ich auch noch nicht gewusst.
Funktioniert einwandfrei!
Vielen Dank :)

MSOfficeAnwender
14.09.2017, 10:25
Jetzt benötige ich doch nochmal eure Hilfe,

Ich habe die Schleife nun so umgeschrieben, dass zwei Tabellenblätter gleichzeitig kopiert werden, damit sich die Formeln aufeinander beziehen.

Anz = WorksheetFunction.CountIf(KKStool.Worksheets(Sz).Range("D113:D122"), "<>") ' zählen wieviele Elemente im Bereich vorhanden sind

For i = 1 To (Anz - 1)
With Stammdaten
.Sheets(Array("Metall", "StüLi&Arb.plan-Metall")).Copy After:=Worksheets("StüLi&Arb.plan-Metall")
End With
Next

Das Funktioniert auch soweit sehr gut. Allerdings habe ich so wieder das Problem mit der richtigen Reihenfolge.

Wenn ich jetzt den Lösungsansatz mit der Indexnummer anwenden möchte:

For i = 1 To (Anz - 1)
With Stammdaten
.Sheets(Array("Metall", "StüLi&Arb.plan-Metall")).Copy After:=Worksheets(.Index + i - 1)
End With
Next

Dann bekomme ich leider eine Fehlermeldung:

"der Laufzeitfehler '9':
Index außerhalb des gültigen Bereichs"

wie muss ich denn nun den Index anpassen, damit die Schleife auch beim Kopieren von zwei Tabellenblättern funktioniert?

Welchen Wert hat i an der Stelle
.Sheets(Array("Metall", "StüLi&Arb.plan-Metall")).Copy After:=Worksheets(.Index + i - 1)

Beste Grüße und vielen Dank für eure Hilfe!

rastrans
14.09.2017, 19:24
Sub WorksheetsAdd()
Dim i As Integer
Dim straWorksheetsNames() As String

straWorksheetsNames = Split("Metall StüLi&Arb.plan-Metall")
For i = 1 To 3
Worksheets(straWorksheetsNames).Copy After:=Worksheets(Worksheets(straWorksheetsNames(UBound(straWorksheetsNames))).I ndex + (i - 1) * (UBound(straWorksheetsNames) + 1))
Next
End Sub

MSOfficeAnwender
15.09.2017, 10:33
Funktioniert mal wieder vorzüglich! Dankeschön.
Was genau macht die "Split" Funktion?

P.S. ich würde deine Beiträge gerne bewerten @rastrans allerdings bekomme ich immer die Fehlermeldung, dass ich die Seite neu laden soll und mich anmelden soll weil mir doch die Berechtigungen fehlen .. Funktioniert aber nach der Ausführung der Aktionen nicht.

RPP63neu
15.09.2017, 10:45
Was genau macht die "Split" Funktion?
Moin!
Wozu gibt es die Taste rechts neben Esc?
https://msdn.microsoft.com/de-de/library/office/gg278528(v=office.15).aspx

Gruß Ralf