Excel VBA > Blatt in neue Arbeitsmappe kopieren..

OP #6266184
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..
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.
Gast
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.