编译错误:拆分和保存工作表的宏

8 浏览
0 Comments

编译错误:拆分和保存工作表的宏

我在编译代码时遇到了问题,不确定原因。代码本身基于以下内容:

https://www.extendoffice.com/documents/excel/628-excel-split-workbook.html

它将每个工作表另存为一个Excel文件,以工作表名称作为文件名 - 这部分没有问题。

我想要更改保存的文件名。现在它只保存为工作表名.xls,但我希望文件名为工作簿名_工作表名.xls。这是我遇到问题的地方。我尝试了一些涉及activeworkbook.name的操作,但它给了我整个文件名,因此保存时我得到了一个像工作簿名.xlsx_工作表名.xls这样的疯狂文件名。我开始研究如何只获取文件名,这导致我找到了这些帖子,我也试图将它们合并:

How do I use FileSystemObject in VBA?

File name without extension name 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://stackoverflow.com/questions/3233203/how-do-i-use-filesystemobject-in-vba/3236348#3236348
'https://stackoverflow.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

谢谢。

0
0 Comments

在这个问题中,出现了一个编译错误,该错误与在宏中拆分和保存工作表有关。造成这个错误的原因是在代码的一行中缺少了一个下划线(_)。在VBA中,如果要将一行代码拆分成两行,需要使用下划线进行标记。解决这个错误的方法是在代码中添加下划线,使其在两行中正确拆分。代码应该是这样的:

Application.ActiveWorkbook.SaveAs Filename:=xPath & "\" & xFilename & "_" & xWs.Name, _

或者可以将整个代码放在一行中。

这个问题的解决方法可以参考这个链接:How to extend a formula in VBA past 1 line of code

原来这个问题比我想象的要简单得多。谢谢你的帮助!

0