VBA 对象 _workbook 的运行时错误方法保存失败
VBA runtime error method save of object _workbook failed
我正在尝试创建一个检查指定文件夹的宏,以确保存在名为当年的文件夹。如果不是,它会按当年的名称创建一个文件夹。
然后宏从已打开的工作簿的 Sheet1 复制所有内容,并粘贴到新添加的工作簿中。以指定名称保存新工作簿并关闭它。
我尝试了下面提到的代码。如果我已经有了名称为当年的文件夹,宏将按预期工作。但是,如果该文件夹不存在,则宏会创建一个文件夹,打开一个新工作簿,粘贴复制的数据,保存文件,但不会进行下一步关闭文件,而是显示 运行 -time 错误“对象 _workbook 的 1004 方法保存失败”。
有人可以帮我吗?
Sub Copy_Data()
Dim ThisYear As String
Dim fdObj As Object
Dim wbO As Workbook
ThisYear = Format(Date, "YYYY")
Set fdObj = CreateObject("Scripting.FileSystemObject")
If fdObj.FolderExists("C:\Temp\" & ThisYear) Then GoTo DataCopy:
fdObj.CreateFolder ("C:\Temp\" & ThisYear)
DataCopy:
Sheet1.UsedRange.Copy
Set wbO = Workbooks.Add
Range("A1").PasteSpecial xlPasteAll
wbO.SaveAs Filename:="C:\Temp\" & ThisYear & "\Data_New_" & Format(Now(), "ddmmyyyy"), FileFormat:=51 'Stops here
Windows("Data_New_" & Format(Now(), "ddmmyyyy") & ".xlsx").Close
End Sub
根据建议,我编辑了如下代码。我仍然遇到同样的问题。如果我使用 F8 执行步骤,代码工作正常,但如果我 运行 宏,则显示 运行 时间错误。
Sub Copy_Data()
Dim ThisYear As String
Dim fdObj As Object
Dim wbO As Workbook
ThisYear = Format(Date, "YYYY")
Set fdObj = CreateObject("Scripting.FileSystemObject")
If Not fdObj.FolderExists("C:\Users\abcd\OneDrive - abcd\Desktop\Temp\" & ThisYear) Then
fdObj.CreateFolder ("C:\Users\abcd\OneDrive - abcd\Desktop\Temp\" & ThisYear)
End If
Sheet1.UsedRange.Copy
Set wbO = Workbooks.Add
Range("A1").PasteSpecial xlPasteAll
wbO.SaveAs Filename:="C:\Users\abcd\OneDrive - abcd\Desktop\Temp\" & ThisYear & "\Data_New_" & Format(Now(), "ddmmyyyy"), FileFormat:=51 'Stop here
wbO.Close
End Sub
通过反复试验和谷歌搜索,我发现在尝试将文件另存为 xlsx 时会发生此运行时错误“对象 _workbook 的方法保存失败”。如果选择的文件格式是 xls,那么宏就可以正常工作。但我更喜欢将文件保存为 xlsx 格式。
由于我的宏会在文件夹不存在时创建该文件夹,并且还会使用指定的名称保存文件,所以我只是选择使用 On Error Resume Next
跳过该错误消息宏现在按预期工作。下面是我使用的代码。
Sub Copy_Data()
Dim ThisYear As String
Dim fdObj As Object
Dim wbO As Workbook
ThisYear = Format(Date, "YYYY")
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Set fdObj = CreateObject("Scripting.FileSystemObject")
If Not fdObj.FolderExists("C:\Users\abcd\OneDrive - abcd\Desktop\Temp\" & ThisYear) Then
fdObj.CreateFolder ("C:\Users\abcd\OneDrive - abcd\Desktop\Temp\" & ThisYear)
End If
Sheet1.UsedRange.Copy
Set wbO = Workbooks.Add
Range("A1").PasteSpecial xlPasteAll
On Error Resume Next
wbO.SaveAs Filename:="C:\Users\abcd\OneDrive - abcd\Desktop\Temp\" & ThisYear & "\Data_New_" & Format(Now(), "ddmmyyyy"), FileFormat:=51
wbO.Close
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
我正在尝试创建一个检查指定文件夹的宏,以确保存在名为当年的文件夹。如果不是,它会按当年的名称创建一个文件夹。 然后宏从已打开的工作簿的 Sheet1 复制所有内容,并粘贴到新添加的工作簿中。以指定名称保存新工作簿并关闭它。
我尝试了下面提到的代码。如果我已经有了名称为当年的文件夹,宏将按预期工作。但是,如果该文件夹不存在,则宏会创建一个文件夹,打开一个新工作簿,粘贴复制的数据,保存文件,但不会进行下一步关闭文件,而是显示 运行 -time 错误“对象 _workbook 的 1004 方法保存失败”。 有人可以帮我吗?
Sub Copy_Data()
Dim ThisYear As String
Dim fdObj As Object
Dim wbO As Workbook
ThisYear = Format(Date, "YYYY")
Set fdObj = CreateObject("Scripting.FileSystemObject")
If fdObj.FolderExists("C:\Temp\" & ThisYear) Then GoTo DataCopy:
fdObj.CreateFolder ("C:\Temp\" & ThisYear)
DataCopy:
Sheet1.UsedRange.Copy
Set wbO = Workbooks.Add
Range("A1").PasteSpecial xlPasteAll
wbO.SaveAs Filename:="C:\Temp\" & ThisYear & "\Data_New_" & Format(Now(), "ddmmyyyy"), FileFormat:=51 'Stops here
Windows("Data_New_" & Format(Now(), "ddmmyyyy") & ".xlsx").Close
End Sub
根据建议,我编辑了如下代码。我仍然遇到同样的问题。如果我使用 F8 执行步骤,代码工作正常,但如果我 运行 宏,则显示 运行 时间错误。
Sub Copy_Data()
Dim ThisYear As String
Dim fdObj As Object
Dim wbO As Workbook
ThisYear = Format(Date, "YYYY")
Set fdObj = CreateObject("Scripting.FileSystemObject")
If Not fdObj.FolderExists("C:\Users\abcd\OneDrive - abcd\Desktop\Temp\" & ThisYear) Then
fdObj.CreateFolder ("C:\Users\abcd\OneDrive - abcd\Desktop\Temp\" & ThisYear)
End If
Sheet1.UsedRange.Copy
Set wbO = Workbooks.Add
Range("A1").PasteSpecial xlPasteAll
wbO.SaveAs Filename:="C:\Users\abcd\OneDrive - abcd\Desktop\Temp\" & ThisYear & "\Data_New_" & Format(Now(), "ddmmyyyy"), FileFormat:=51 'Stop here
wbO.Close
End Sub
通过反复试验和谷歌搜索,我发现在尝试将文件另存为 xlsx 时会发生此运行时错误“对象 _workbook 的方法保存失败”。如果选择的文件格式是 xls,那么宏就可以正常工作。但我更喜欢将文件保存为 xlsx 格式。
由于我的宏会在文件夹不存在时创建该文件夹,并且还会使用指定的名称保存文件,所以我只是选择使用 On Error Resume Next
跳过该错误消息宏现在按预期工作。下面是我使用的代码。
Sub Copy_Data()
Dim ThisYear As String
Dim fdObj As Object
Dim wbO As Workbook
ThisYear = Format(Date, "YYYY")
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Set fdObj = CreateObject("Scripting.FileSystemObject")
If Not fdObj.FolderExists("C:\Users\abcd\OneDrive - abcd\Desktop\Temp\" & ThisYear) Then
fdObj.CreateFolder ("C:\Users\abcd\OneDrive - abcd\Desktop\Temp\" & ThisYear)
End If
Sheet1.UsedRange.Copy
Set wbO = Workbooks.Add
Range("A1").PasteSpecial xlPasteAll
On Error Resume Next
wbO.SaveAs Filename:="C:\Users\abcd\OneDrive - abcd\Desktop\Temp\" & ThisYear & "\Data_New_" & Format(Now(), "ddmmyyyy"), FileFormat:=51
wbO.Close
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub