Registriert seit: 10.04.2014
Version(en): 2016 + 365
12.02.2016, 13:19
(Dieser Beitrag wurde zuletzt bearbeitet: 17.02.2016, 15:25 von Rabe.)
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?
Registriert seit: 13.04.2014
Version(en): 365
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.
Registriert seit: 10.04.2014
Version(en): 2016 + 365
Hi Edgar,
(12.02.2016, 13:30)BoskoBiati schrieb: aus wieviel Blättern besteht denn deine Datei?
3: RechnungsVorlage, Kundendaten, Datenbankliste.
Registriert seit: 13.04.2014
Version(en): 365
12.02.2016, 14:56
(Dieser Beitrag wurde zuletzt bearbeitet: 12.02.2016, 15:02 von BoskoBiati.)
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.
Registriert seit: 14.04.2014
Version(en): 2003, 2007
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
Registriert seit: 13.04.2014
Version(en): 365
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.
Registriert seit: 14.04.2014
Version(en): 2003, 2007
Hallo Edgar,
Das Löschen von einzelnen Blättern kannst Du auch sparen,
wenn Du das Blatt kopierst und speicherst.
Gruß Atilla
Registriert seit: 13.04.2014
Version(en): 365
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.
Registriert seit: 11.04.2014
Version(en): Office 2007
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
Registriert seit: 10.04.2014
Version(en): 2016 + 365
14.02.2016, 14:37
(Dieser Beitrag wurde zuletzt bearbeitet: 14.02.2016, 14:38 von Rabe.)
Hi,
(12.02.2016, 15: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!