Hallo zusammen!
Ich habe ein Problem mit Kopieren von Excel-sheets mithilfe von Makro. Ich möchte ein Paar Excel-Sheets von einem zu anderen Workbook zu kopieren. Komischerweise funktioniert es perfekt für den ersten Sheet, aber bei zweiten nicht. Beim Debugging kann ich sehen, dass der gewünschte Bereich im Ausgangssheet kopiert wird (es wird im Workbook charakteristisch markiert) und dass beim PasteSpecial-Anweisung ein LEERES Bereich ins zweite Sheet eingetragen wird. Dazu, wenn ich xlPasteValues löschen, dann wird die Formatierung von Ausgangsheet kopiert aber ohne Zahlen und Formel.
So sieht das Code aus (die relevante Teil):
' wkb - the new created workbook
' orgWkb - the existing workbook, that performs calculations (not the one that contains the macro, but is already opened)
relevantSheets = Array("A", "B")
scenarioList = Array("1", "2", "3")
' a flag indicating if the SKV-Sheet is already present in the new workbook.
Dim Bexists As Boolean
Bexists = False
For Each Scenario In scenarioList
' activate the original workbook
Workbooks(orgWkb.Name).Activate
' set the scenario and recalculate the workbook to fill in the input values.
Sheets("SKV").Range("C37") = Val(Scenario)
Application.CalculateFull
Dim NewSheet As Worksheet
For Each relevantSheet In relevantSheets
Workbooks(orgWkb.Name).Activate
If (StrComp(CStr(relevantSheet), "A", vbTextCompare) = 0) And Not Bexists Then
Set NewSheet = wkb.Sheets.Add
NewSheet.Name = "A"
SKVexists = True
ElseIf (StrComp(CStr(relevantSheet), "B", vbTextCompare) = 0) And Bexists Then
GoTo EndLoop
ElseIf (StrComp(CStr(relevantSheet), "B", vbTextCompare) = 0) Then
Set NewSheet = wkb.Sheets.Add
NewSheet.Name = "B_" & CStr(Val(Scenario)
End If
With Worksheets(relevantSheet)
.UsedRange.Copy
NewSheet.UsedRange.PasteSpecial ' xlPasteValues, _
' Operation:=xlNone, SkipBlanks:=True, Transpose:=False
End With
EndLoop:
Next ' end loop over relevant sheets.
Next ' end loop over scenarios.
' delete unnecessary sheets of the new file, save and close it.
wkb.Sheets("Tabelle1").Delete
wkb.Save
wkb.Close
End Sub
Vielleicht noch zum Aufklärung: zuerst soll der Sheet A kopiert werden und dann die Inhalt von Sheet B für jeder der Scenarien aus der Liste für separate Sheets B_1, B_2, B_3.
Dake für jede Hilfe!
|