Du brauchst eigentlich nur zwei Objektvariablen.
Das Quellworkbook sowie das Zielworkbook.
Schau Dir mal folgendes an, aber vervollständige selbst bzw passe an Deine Umgebung an:
Sub CopyFile()
'*** Deklarationsteil
Dim wkbQuelle As Excel.Workbook
Dim wkbZiel As Excel.Workbook
Dim sPfad As String
'*** Definitionsteil
Set wkbZiel = Application.Workbooks.Add 'neues Workbook wird erzeugt
Set wkbQuelle = Application.Workbooks.Open(sPfad) 'Quellworkbook wird referenziert/geöffnet; sPfad muss Pfadangabe und Dateinamen enthalten
sPfad = "c:\Dateiname.xlsx" 'kann natürlich über Application.GetOpenFilename() gefüllt werden, nicht wahr?
'*** Arbeitsblatt kopieren; RISK_1
wkbQuelle.Worksheets("1").Copy after:=wkbZiel.Worksheets(wkbZiel.Sheets.Count) 'Worksheet 1 wird in Zielworkbook kopiert... an letzter Stelle (also hinter allen Arbeits-und Diagrammblätter)
wkbQuelle.Close SaveChanges:=False 'Quellworkbook wird geschlossen ohne Rückfrage zum speichern
'*** erstes Quellworkbook ist geschlossen, also nächstes öffnen; RISK_2
Set wkbQuelle = Application.Workbooks.Open(sPfad) 'neuer Pfad zur neuen Datei
wkbQuelle.Worksheets("2").Copy after:=wkbZiel.Worksheets(wkbZiel.Sheets.Count) 'Worksheet 2 wird in Zielworkbook kopiert...
wkbQuelle.Close SaveChanges:=False 'Quellworkbook wird geschlossen ohne Rückfrage zum speichern
'*** ab hier RISK_3
'//TODO
End Sub
Das Abspeichern über das FileDialog-Object():
Sub DateiSpeichernMitDialog()
'*** Deklaration
Dim sDatei As String
Dim wkbZiel As Excel.Workbook
'*** Definition
sDatei = "Dateiname"
Set wkbZiel = ActiveWorkbook 'logischerweise anzupassen
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show Then
wkbZiel.SaveAs .SelectedItems(1) & "\" & sDatei
End If
End With
End Sub
Grundsätzlich gilt:
- Zerlege Dein Problem in Teilprobleme
- Löse Deine Teilprobleme (möglichst) unabhängig voneinander
- optimiere Deine Lösungen (Performance)
- Verkette Deine Lösungen
|