Ошибка компиляции в макросе для разделения и сохранения рабочих таблиц
У меня проблема с получением кода для компиляции - я не знаю почему.
Сам код основан на этом:
https://www.extendoffice.com/documents/excel/628-excel-split-workbook.html
Он сохраняет каждый отдельный лист в виде файла Excel с именем листа в качестве имени файла - это работает нормально.
Я хотел изменить имя файла, который он сохраняет. Прямо сейчас это только сохраняет имя как worksheetname.xls, однако я хочу, чтобы имя было workbookname_worksheetname.xls. Здесь у меня проблемы. Я думаю, что попробовал что-то с activeworkbook.name, но это дало мне полное имя файла, поэтому при сохранении я получил сумасшедшее имя, например workbookname.xlsx_worksheetname.xls. Я начал изучать, как я могу получить только имя файла, и это привело меня к следующим постам, которые я также попытался включить:
Как использовать FileSystemObject в VBA? Имя файла без расширения VBA
Однако я получаю ошибку компиляции: синтаксическая ошибка в следующей строке:
Application.ActiveWorkbook.SaveAs Filename:=xPath & "\" & xFilename & "_" & xWs.Name,
FileFormat:=39
Может ли кто-нибудь помочь пересмотреть и очистить код, если это необходимо? Есть ли более простой способ сделать это?
Sub Splitbook()
'https://www.extendoffice.com/documents/excel/1174-excel-split-data-into-multiple-worksheets-based-on-column.html
'https://www.extendoffice.com/documents/excel/628-excel-split-workbook.html
Dim xPath As String
Dim xFilename As String
'https://stackru.com/questions/3233203/how-do-i-use-filesystemobject-in-vba/3236348#3236348
'https://stackru.com/questions/27923926/file-name-without-extension-name-vba
Dim fso As New Scripting.FileSystemObject
xPath = Application.ActiveWorkbook.Path
xFilename = fso.GetBaseName(ActiveWorkbook.Name)
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For Each xWs In ThisWorkbook.Sheets
xWs.Copy
Application.ActiveWorkbook.SaveAs Filename:=xPath & "\" & xFilename & "_" & xWs.Name,
FileFormat:=39
Application.ActiveWorkbook.Close False
Next
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Спасибо.
1 ответ
Похоже, вам нужно расширение линии. Если вы хотите разбить строку кода на две строки, вам нужно _
так должно выглядетьApplication.ActiveWorkbook.SaveAs Filename:=xPath & "\" & xFilename & "_" & xWs.Name, _
или поставить все это в одну строку