Сохранение таблицы Excel в файлах CSV с именем файла + имя листа с использованием VB
Я очень новичок в кодировании VB, я пытаюсь сохранить несколько таблиц excel файлов в csv, я не знаю, как это сделать для нескольких листов, но я нашел способ сделать это для одного файла. Я нашел код на этом сайте, который очень полезен для того, что я пытаюсь сделать, только проблема в том, что файлы сохраняются с именем рабочего листа, но я пытаюсь сохранить их с исходным именем файла и рабочего листа, например filename_worksheet name
, Я попытался сделать это сам, но продолжаю получать ошибку, не могли бы вы посоветовать, что я делаю неправильно?
Используемый мной код выглядит следующим образом:
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
Ответы
Ответ 1
Я думаю, что это то, что вы хотите...
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
Ответ 2
У меня была аналогичная проблема. Данные на листе, который мне нужно сохранить в виде отдельного файла CSV.
Здесь мой код за командной кнопкой
Private Sub cmdSave()
Dim sFileName As String
Dim WB As Workbook
Application.DisplayAlerts = False
sFileName = "MyFileName.csv"
'Copy the contents of required sheet ready to paste into the new CSV
Sheets(1).Range("A1:T85").Copy 'Define your own range
'Open a new XLS workbook, save it as the file name
Set WB = Workbooks.Add
With WB
.Title = "MyTitle"
.Subject = "MySubject"
.Sheets(1).Select
ActiveSheet.Paste
.SaveAs "MyDirectory\" & sFileName, xlCSV
.Close
End With
Application.DisplayAlerts = True
End Sub
Это работает для меня: -)
Ответ 3
Это то, что вы пытаетесь?
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
Ответ 4
Лучший способ узнать - записать макрос и выполнить точные шаги и посмотреть, какой код VBA он генерирует. вы можете пойти и заменить биты, которые вы хотите сделать родовыми (например, имена файлов и прочее)
Ответ 5
Приведенный выше код отлично работает с одним незначительным недостатком; результирующий файл не сохраняется с расширением .csv. - Tensigh 2 дня назад
Я добавил следующее в код, и он сохранил мой файл как csv. Спасибо за этот бит кода. Все работало, как ожидалось.
ActiveWorkbook.SaveAs Filename:=SaveToDirectory & ThisWorkbook.Name & "-" & WS.Name & ".csv", FileFormat:=xlCSV