Speichern von Excel-Arbeitsblättern in CSV-Dateien mit Dateiname+Arbeitsblattname mit VB

Ich bin sehr neu mit VB-Codierung, ich versuche, mehrere Excel-Datei Arbeitsblätter zu csv zu speichern, ich weiß nicht, dies für mehrere Blätter zu tun, aber ich fand einen Weg, für einzelne Datei zu tun. Ich habe Code auf dieser Website gefunden, die sehr nützlich sind für das, was ich versuche zu tun, nur das Problem ist die Dateien mit dem Namen des Arbeitsblatts gespeichert, aber ich versuche, sie mit der ursprünglichen Datei und Arbeitsblatt Name wie filename_worksheet name zu speichern, habe ich versucht, das selbst zu tun, aber immer wieder Fehler, könnten Sie bitte beraten, was ich falsch mache?

Der Code, den ich verwende, lautet wie folgt:

   Public Sub SaveWorksheetsAsCsv()

   Dim WS As Excel.Worksheet
   Dim SaveToDirectory As String

   Dim CurrentWorkbook As String
   Dim CurrentFormat As Long

   CurrentWorkbook = ThisWorkbook.FullName
   CurrentFormat = ThisWorkbook.FileFormat
   ' Store current details for the workbook
   SaveToDirectory = "H:\test\"
   For Each WS In ThisWorkbook.Worksheets
   WS.SaveAs SaveToDirectory & WS.Name, xlCSV
   Next

Application.DisplayAlerts = False
ThisWorkbook.SaveAs Filename:=CurrentWorkbook, FileFormat:=CurrentFormat
Application.DisplayAlerts = True
' Temporarily turn alerts off to prevent the user being prompted
'  about overwriting the original file.

End Sub 
Lösung

Ich glaube, das ist es, was Sie wollen...

Sub SaveWorksheetsAsCsv()

Dim WS As Excel.Worksheet
Dim SaveToDirectory As String

Dim CurrentWorkbook As String
Dim CurrentFormat As Long

CurrentWorkbook = ThisWorkbook.FullName
CurrentFormat = ThisWorkbook.FileFormat
' Store current details for the workbook
SaveToDirectory = "H:\test\"

For Each WS In Application.ActiveWorkbook.Worksheets
    WS.SaveAs SaveToDirectory & WS.Name, xlCSV
Next

Application.DisplayAlerts = False
ThisWorkbook.SaveAs Filename:=CurrentWorkbook, FileFormat:=CurrentFormat
Application.DisplayAlerts = True
' Temporarily turn alerts off to prevent the user being prompted
'  about overwriting the original file.

End Sub
Kommentare (10)

Ist es das, was Sie versuchen?

Option Explicit

Public Sub SaveWorksheetsAsCsv()
    Dim WS As Worksheet
    Dim SaveToDirectory As String, newName As String

    SaveToDirectory = "H:\test\"

    For Each WS In ThisWorkbook.Worksheets
        newName = GetBookName(ThisWorkbook.Name) & "_" & WS.Name
        WS.Copy
        ActiveWorkbook.SaveAs SaveToDirectory & newName, xlCSV
        ActiveWorkbook.Close Savechanges:=False
    Next
End Sub

Function GetBookName(strwb As String) As String
    GetBookName = Left(strwb, (InStrRev(strwb, ".", -1, vbTextCompare) - 1))
End Function
Kommentare (2)

Der beste Weg, um herauszufinden, ist die Makro aufzeichnen und führen Sie die genauen Schritte und sehen, welche VBA-Code es erzeugt. Sie können dann gehen und ersetzen Sie die Bits, die Sie generisch machen wollen (dh Dateinamen und so)

Kommentare (0)