Ошибка компиляции в макросе для разделения и сохранения рабочих таблиц

У меня проблема с получением кода для компиляции - я не знаю почему.

Сам код основан на этом:

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, _

или поставить все это в одну строку

См. Как расширить формулу в VBA после 1 строки кода

Другие вопросы по тегам