[VBA] einzelnes Arbeitsblatt abspeichern
#11
Hi Stefan,

(12.02.2016, 18:04)Steffl schrieb: bei der SaveAs-Methode kann man auch ein Worksheet verwenden oder habe ich da was falsch verstanden?

ok, das muß ich mal versuchen, danke.
worksheet.saveas

Dann geht das vielleicht auch ohne kopieren und ich kann das Blatt danach direkt löschen.
Top
#12
Jetzt habe ich eine Lösung gefunden und zwar hier:
WorkSheet.SaveAs

Sub Copy_ActiveSheet_1()
   'Working in Excel 97-2016 
   ' http://www.rondebruin.nl/win/s5/win001.htm 
   ' 
   Dim FileExtStr As String
   Dim FileFormatNum As Long
   Dim Sourcewb As Workbook
   Dim Destwb As Workbook
   Dim TempFilePath As String
   Dim TempFileName As String
   
   With Application
      .ScreenUpdating = False
      .EnableEvents = False
   End With
   
   Set Sourcewb = ActiveWorkbook
   
   'Copy the sheet to a new workbook 
   ActiveSheet.Copy
   Set Destwb = ActiveWorkbook
   
   'Determine the Excel version and file extension/format 
   With Destwb
      If Val(Application.Version) < 12 Then
         'You use Excel 97-2003 
         FileExtStr = ".xls": FileFormatNum = -4143
      Else
         'You use Excel 2007-2016 
         Select Case Sourcewb.FileFormat
         Case 51: FileExtStr = ".xlsx": FileFormatNum = 51
         Case 52:
            If .HasVBProject Then
               FileExtStr = ".xlsm": FileFormatNum = 52
            Else
               FileExtStr = ".xlsx": FileFormatNum = 51
            End If
         Case 56: FileExtStr = ".xls": FileFormatNum = 56
         Case Else: FileExtStr = ".xlsb": FileFormatNum = 50
         End Select
      End If
   End With
   
   'Change all cells in the worksheet to values if you want 
   With Destwb.Sheets(1).UsedRange
      .Cells.Copy
      .Cells.PasteSpecial xlPasteValues
      .Cells(1).Select
   End With
   Application.CutCopyMode = False
   
   'Löschen aller Schaltflächen 
   With ActiveSheet
      For i = 1 To .Shapes.Count
         .Shapes("Button " & i).Delete
      Next i
   End With
   
   'Save the new workbook and close it 
   TempFilePath = "C:\Temp\"                'Application.DefaultFilePath & "\" 
   TempFileName = ActiveSheet.[K23]         ' "Part of " & Sourcewb.Name & " " & Format(Now, "yyyy-mm-dd hh-mm-ss") 
   ActiveSheet.Name = ActiveSheet.[K23]     'Blattname ändern auf Rechnungsnummer 
   
   With Destwb
      .SaveAs TempFilePath & TempFileName & FileExtStr, FileFormat:=FileFormatNum
      .Close SaveChanges:=False
   End With
   
   MsgBox "You can find the new file in " & TempFilePath
   
   With Application
      .ScreenUpdating = True
      .EnableEvents = True
   End With
End Sub


VBA/HTML - CodeConverter für Office-Foren, AddIn für Excel/Word 2000-2013 - komplett in VBA geschrieben von Lukas Mosimann. Projektbetreuung durch mumpel

Code erstellt und getestet in Office 15

Top
#13
Warum nicht ?


Code:
Sub M_snb()
   With Thisworkbook.Sheets("sheet4")
    .ExportAsFixedFormat 0, "G:\OF\Beispiel.pdf"
    .SaveAs "G:\OF\Beispiel.xlsm", 52
   End With
End Sub
Top
#14
Hi,

(14.02.2016, 22:32)snb schrieb: Warum nicht ?

weil ich da nicht drauf gekommen bin. Hatte es ebenfalls mit "fixedfileformat, 1"... probiert, da kam aber was anderes raus.

Deinen Vorschlag teste ich jetzt auch, das ist ja noch einfacher als das Makro oben.

[getestet]
Ich möchte es als xlsx abspeichern ohne Makros und ohne Rückfrage und vor allem ohne Buttons. Ich kann aber die Buttons so nicht vorher rauslöschen, denn dann sind sie ja in der Vorlage auch nicht mehr drin.
Code:
     .ExportAsFixedFormat 0, "C:\Temp\" & .[K23] & ".pdf"            'Definition des Datei-/Blattnamens, Pfad anpassen!
     .SaveAs "C:\Temp\" & .[K23] & ".xlsx", 51
Top
#15
Code:
Sub M_snb()
   With Thisworkbook.Sheets("sheet4")
    .ExportAsFixedFormat 0, "C:\temp\" & cells(23,11) & ".pdf"
    .Shapes.SelectAll
    Selection.Cut
    application.displayalerts=false
    .SaveAs "C:\temp\" & cells(23,11) & ".xlsx", 51
    ActiveSheet.Paste
   End With
End Sub
Top
#16
Hallo Ralf,

genau darauf wollte Stefan uns aufmerksam machen, dass man gar nich rumkopieren muss, sonder dass die SaveAs Methode es ohne macht:

Stefan schrieb bezogen auf die SaveAs Metode:


Zitat:Speichert Änderungen am Diagramm oder Arbeitsblatt in einer anderen Datei.
Gruß Atilla
Top
#17
muss sein:


Code:
Sub M_snb()
   With Thisworkbook.Sheets("sheet4")
    .ExportAsFixedFormat 0, "C:\temp\" & cells(23,11) & ".pdf"
    .Shapes.SelectAll
    Selection.Cut
    application.displayalerts=false
    .SaveAs "C:\temp\" & cells(23,11) & ".xlsx", 51
    .Paste
   End With
End Sub
Top
#18
Hi,

(15.02.2016, 13:28)snb schrieb: muss sein:

ich habe es jetzt so gemacht:
Sub M_snb_erweitert()
   strPfadDatei = ThisWorkbook.Path & "\" & ThisWorkbook.Name
   With ThisWorkbook.Sheets("sheet4")
      .ExportAsFixedFormat 0, "C:\temp\" & Cells(23, 11) & ".pdf"
      .Shapes.SelectAll
      Selection.Cut
      Application.DisplayAlerts = False
      .SaveAs "C:\temp\" & Cells(23, 11) & ".xlsx", 51
      .Paste
   End With
   ThisWorkbook.SaveAs strPfadDatei & ".xlsb", 50
End Sub


VBA/HTML - CodeConverter für Office-Foren, AddIn für Excel/Word 2000-2013 - komplett in VBA geschrieben von Lukas Mosimann. Projektbetreuung durch mumpel

Code erstellt und getestet in Office 15

Top
#19
Code:
Sub M_snb()
   Application.DisplayAlerts = False
   ThisWorkbook.SaveAs replace(thisworkbook.fullname,".xlsx",".xlsb"), 50

  With ThisWorkbook.Sheets("sheet4")
     .ExportAsFixedFormat 0, "C:\temp\" & .Cells(23, 11) & ".pdf"

     .Shapes.SelectAll
     Selection.Cut
            .SaveAs "C:\temp\" & .Cells(23, 11) & ".xlsx", 51
     .Paste
  End With
End Sub


PS. Problem mit dein formatierte Code: wenn man die kopiiert, werden alle Farben mitkopiiert. Und es ist ziemlich viel Arbeit die zu löschen. Ich habe nichts gegen die vom Forum gegebene Code tags.
Top
#20
Hi,

wenn das Tabellenblatt einzeln abgespeichert wird, dann steht die Gesamt-Datei unter dem neuen Namen im Arbeitsspeicher. Ich muß sie also anschließend noch unter dem Originalnamen im Originalpfad abspeichern., sonst sind die Änderungen in der Datei nciht enthalten. Darum das vorherige Sichern von Pfad und Dateiname.

(15.02.2016, 22:06)snb schrieb: PS. Problem mit dein formatierte Code: wenn man die kopiiert, werden alle Farben mitkopiiert. Und es ist ziemlich viel Arbeit die zu löschen. Ich habe nichts gegen die vom Forum gegebene Code tags.

wenn ich den Code in die Zwischenablage kopiere und in den VBA-Editor einfüge, sind dort keine Farben drin.
Top


Gehe zu:


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