我得到一个运行时错误与ws.copy -〉没有代码的作品,但只是创建一个空的工作簿。
Sub SaveWorksheetAsXlsx(ws As Worksheet)
Dim filePath As String
filePath = ThisWorkbook.Path & "\" & ws.Name & ".xlsx"
' Create a new workbook
Dim newWorkbook As Workbook
Set newWorkbook = Workbooks.Add
' Copy the worksheet to the new workbook
ws.Copy 'After:=newWorkbook.Worksheets(1)
' Save the new workbook
newWorkbook.SaveAs filePath, FileFormat:=xlOpenXMLWorkbook
newWorkbook.Close SaveChanges:=False
End Sub
2条答案
按热度按时间8fsztsew1#
将工作表复制到新工作簿
As Worksheet
替换为As Object
,则此过程也适用于图表。Workbook(Workbooks.Count)
。Application.DisplayAlerts
以覆盖而不进行确认。如果不执行此操作,则当文件存在时,系统将要求您保存它。如果选择No
或Cancel
,则会出现以下错误:.Parent
属性。这样,该过程就不会仅限于包含此代码(ThisWorkbook
)的工作簿。否则,请将Sheet.Parent
替换为ThisWorkbook
。Application.PathSeparator
而不是反斜杠(\
),则此过程也可以在操作系统与Windows
不同的计算机上运行。.xlsx
,因此不需要指定文件扩展名或格式。iaqfqrcu2#
set newWorkbook = workbooks.Add
创建了一个新工作簿。但是不带参数的ws.Copy
将ws
复制到一个新工作簿。现在您有两个新工作簿,这显然不是您想要的。MS学习文档在其文档中提供了一个如何使用copy命令复制工作表的示例。参考:https://learn.microsoft.com/en-us/office/vba/api/excel.worksheet.copy这显然依赖于预期的行为,即当您将工作表复制到新工作簿时,该工作簿将成为活动工作簿。(我猜很多年了),尽管依赖默认行为确实让我有点紧张,所以您可以考虑添加一些保护子句,也许只有当工作簿有空路径时才保存它(iIndie.E.,确保它是一个新添加的工作簿-〉
if ActiveWorkbook.Path = ""
。因此,编码预防性和非常谨慎: