Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

[VBA] einzelnes Arbeitsblatt abspeichern
#1
Hallo,

ich will ein einzelnes Arbeitsblatt mit VBA in einer neuen Mappe abspeichern und die neue Mappe ohne Rückfrage schließen.

In K23 steht eine Rechnungsnummer und damit der Name des einzelnen Blattes und der neuen Mappe.
Mit diesem Code kommt eine Fehlermeldung ("Index außerhalb des gültigen Bereichs") in der Move-Zeile:
   With Sheets("RechnungsVorlage")
     .ExportAsFixedFormat 0, "C:\Temp\" & .[K23] & ".pdf"          'Definition des Datei-/Blattnamens, Pfad anpassen!
     
     ActiveSheet.Copy After:=Sheets(Sheets.Count)                  'Rechnung wird ans Ende der Tabellen kopiert
     ActiveSheet.Name = .[K23]                                     'Die Kopie wird benannt nach der Rechnungsnummer
     ActiveSheet.Shapes("Button 1").Delete                         'Schaltfläche in der Kopie wird gelöscht
     
     strDatei = "C:\Temp\" & .[K23] & ".xlsb"                      'Definition des Datei-/Blattnamens, Pfad anpassen!
     MsgBox (.[K23])                                               'Anzeige des Datei-Namens
     ActiveWorkbook.Sheets(.[K23]).Move                            'hier kommt Fehler "Index außerhalb des gültigen Bereichs"
     ActiveWorkbook.SaveAs Filename:="C:\Temp\" & .[K23] & ".xlsb", FileFormat:= _
         xlExcel12, CreateBackup:=False                            'Abspeichern der neuen Arbeitsmappe
     ActiveWindow.Close                                            'Schließen der neuen Arbeitsmappe
     Sheets("RechnungsVorlage").Activate
Was mache ich falsch?
Wie wird das richtig formuliert?
Gibt es eine einfachere Lösung?
Antworten Top
#2
Hallo Ralf,

aus wieviel Blättern besteht denn deine Datei?
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#3
Hi Edgar,

(12.02.2016, 12:30)BoskoBiati schrieb: aus wieviel Blättern besteht denn deine Datei?

3: RechnungsVorlage, Kundendaten, Datenbankliste.
Antworten Top
#4
Hallo,

ich würde das so machen:


Code:
Dim StrDatei As String
Dim neueDatei as String
neueDatei=sheets("Rechnungsvorlage").Range("K32")

StrDatei = ThisWorkbook.Path & "diese Datei.xlsm"
Application.DisplayAlerts = False
Application.ScreenUpdating = False
ThisWorkbook.Save
Sheets("Kundendaten").delete
sheets("Datenbankliste").delete
VBA_Code_entfernen
ThisWorkbook.SaveAs Filename:="D:\" & neueDatei & ".xlsx", FileFormat:=xlOpenXMLWorkbook, ConflictResolution:=xlLocalSessionChanges
Workbooks.Open StrDatei
ThisWorkbook.Close savechanges = True
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End If
End Sub


Sub VBA_Code_entfernen()
Dim Ding As Object
Dim Zeile As Long

  For Each Ding In ActiveWorkbook.VBProject.vbcomponents

   'Type 100 = DieseArbeitsmappe und alle Tabellen
    If Ding.Type = 100 Then

      With ActiveWorkbook.VBProject.vbcomponents(Ding.Name).CodeModule
        For Zeile = 1 To .CountOfLines
          .DeleteLines 1
        Next Zeile
      End With

   'Type 1 = Modul, Type 2 = Klassenmodul, Type 3 = UserForm
    Else
      ActiveWorkbook.VBProject.vbcomponents.Remove Ding
    End If

  Next
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#5
Hallo zusammen,

Edgar zu umständlich.

Bin am Handy, deshalb nur eine Kurzanleitung.

Per Code:
Tabellenblatt kopieren
Das kopierte Blatt ist in dem Moment das Activeworkbook
Activeworkbook.save mit Benennung im .xlsx Format
Vorher unter Umständen Warnmeldungen aus
Ein Löschen des Codes ist dann nicht erforderlich.

Passenden Code gibt es im www zu genüge
Gruß Atilla
Antworten Top
#6
Hallo atilla,

der Löschcode ist z.B. aus dem Netz. Der ist tatsächlich überflüssig, der war noch in meiner Datei, weil ich als .xls speichern musste. Dann reicht das:


Code:
Dim StrDatei As String
Dim neueDatei as String
neueDatei=sheets("Rechnungsvorlage").Range("K32")

StrDatei = ThisWorkbook.Path & "diese Datei.xlsm"
Application.DisplayAlerts = False
Application.ScreenUpdating = False
ThisWorkbook.Save
Sheets("Kundendaten").delete
sheets("Datenbankliste").delete
ThisWorkbook.SaveAs Filename:="D:\" & neueDatei & ".xlsx", FileFormat:=xlOpenXMLWorkbook, ConflictResolution:=xlLocalSessionChanges
Workbooks.Open StrDatei
ThisWorkbook.Close savechanges = True
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End If
End Sub
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#7
Hallo Edgar,

Das Löschen von einzelnen Blättern kannst Du auch sparen,
wenn Du das Blatt kopierst und speicherst.
Gruß Atilla
Antworten Top
#8
Hallo atilla,

hast wohl recht, habe ich aber noch nicht getestet, daher kann ich dazu keinen Code liefern.
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#9
Auch Hallo,

bei der SaveAs-Methode kann man auch ein Worksheet verwenden oder habe ich da was falsch verstanden?

Zitat:Worksheet.SaveAs-Methode

Speichert Änderungen am Diagramm oder Arbeitsblatt in einer anderen Datei.
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#10
Hi,

(12.02.2016, 14:22)atilla schrieb: Das Löschen von einzelnen Blättern kannst Du auch sparen,
wenn Du das Blatt kopierst und speicherst.

das war ja mein ursprünglicher Versuch im eingestellten Code und da kam die Fehlermeldung, weil ich wohl den falschen Code verwendet habe!
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste