Forum: PC-Programmierung Excel VBA > Blatt in neue Arbeitsmappe kopieren..


von Jan H. (janiiix3)


Lesenswert?

Nabend,

hat jemand eine Idee was ich falsch mache? Ich möchte gerne aus meiner 
aktuellen Arbeitsmappe raus eine neue erstellen.
Diese soll erstmal ein Arbeitsblatt von meiner aktuellen Arbeitsmappe 
erhalten (also von aktueller nach neuer kopieren..)
1
Public Function CreateNewWorkbook(sName As String)
2
3
     Dim sPath As String
4
     
5
     sPath = CreateObject("WScript.Shell").SpecialFolders("Desktop")
6
7
     MsgBox sPath
8
9
     Set NewBook = Workbooks.Add
10
     With NewBook
11
     .Title = "sName" + Format(Date, "YYYY")
12
     .SaveAs Filename:=sPath & "\" & sName & ".xlsm", FileFormat:=xlWorkbookNormal
13
     End With
14
15
    Dim wbkQuelle As Workbook
16
    Dim wbkZiel As Workbook
17
    Dim wksQuelle As Worksheet
18
19
    Set wbkQuelle = Workbooks(ActiveWorkbook.Name)
20
    Set wbkZiel = Workbooks(sName + ".xlsm")
21
    Set wksQuelle = wbkQuelle.Worksheets("Tabelle1")
22
    
23
    wksQuelle.Copy After:=wbkZiel.Sheets(wbkZiel.Sheets.Count)
24
25
    
26
End Function

Was mache ich falsch? Es wird zwar eine neue Mappe erstellt, nur mein 
Arbeitsblatt ("Tabelle1") wird da nicht in die neue Arbeitsmappe 
kopiert..

von Peter M. (r2d3)


Lesenswert?

Bei mir klappt es problemlos unter Office 2000.

Füge dem Code ein minimales aufrufendes Programm hinzu oder wandele die 
Funktion in eine Prozedur, so dass Du das Ganze alleinstehend debuggen 
kannst.

Schreibe zur Kontrolle einen Kontrollwert in Zelle A1 vom ersten Blatt 
der Quelle und kontrolliere dann die Zieldatei.

: Bearbeitet durch User
von Alexander K. (Gast)


Lesenswert?

Wieso eine Funktion wenn sie kein Rückgabewert liefert. ???

Dann brauch man auch keine Funktion, da reicht eine einfache SUB. Bei 
meinen VB-Compiler bekomme ich immer "Warnung : Die Funktion liefert 
kein Rückgabewert".

Mach eine SUB. Reicht völlig aus.

Den Rest deiner Fehler kannst du hier nachlesen.
https://www.automateexcel.com/vba/copy-worksheet/

Frage : Wieso gibst du der Datei einen Titel wenn du sie nicht darunter 
abspeicherst. Ist das eine neue Funktion in moderneren Excel die ich 
noch nicht kenne, oder ein Bug.  Ich würde den "Titel" weglassen. Und 
den sNAME einfach mit der "Titel-berechnung" berechnen.

Mein Tipp leg den sName in eine Variable und dann kannst du die unten 
beim Copybefehl gleich nochmal benutzen

Nur mal so als Tipp. Du willst ein BLATT kopieren, das nennt man English 
SHEETS. Also brauchst du den Blattnamen "Tabelle1" wenn nicht geändert.

Den Befehl den du brauchst steht ca. ca 40 % der Seite. Ich meine den 
hier ;)
Sheets("Sheet1").Copy Before:=Workbooks("Example.xlsm").Sheets(1)

Alles in allen max. 5 Befehle ;)

1.) sName berechnen
2.) Datei speichern
3.) Copybefehl ausführen

4.) Als Funktion den Rückgabewert setzen falls man wissen muss das 
allers geklappt hat.

5.) für das was ich vergessen habe auf die schnelle ;)

Gruß

   Pucki

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.