我在Excel 2016 for Mac中运行VBA宏。该宏适用于使用Excel 2016的Windows平台,以及早于2016版本的Mac平台。
代码应该将活动工作表导出到CSV文件。
该问题似乎特定于Excel 2016 for Mac。这里记录了类似的问题(Getting "method saveas of object _workbook failed" error while trying to save an XLSM as CSV)。将xlCSV
改为6
并没有对我有用。
ActiveWorkbook.SaveAs Filename:=newFileName, FileFormat:=6, CreateBackup:=False
线,抛出错误:
运行时错误'1004':对象'_Workbook'的方法'SaveAs'失败
如果我将FileFormat
更改为51
(.xlsx)或53
(.xlsm),代码将完成。但是,如果FileFormat
设置为6
(.csv),则代码将抛出上述错误。我无法SaveAs
xlCSV
或xlCSVMac
。
我的完整脚本:
Sub btnExportCSV_Click()
Dim oldFileName As String
Dim newFileName As String
Dim timeStamp As String
Dim fileAccessGranted As Boolean
Dim filePermissionCandidates
Dim wsPath As String
timeStamp = Format(Now, "yyyymmddhhmmss")
wsPath = Application.ThisWorkbook.Path
oldFileName = ThisWorkbook.FullName
newFileName = Mid(oldFileName, 1, InStrRev(oldFileName, ".") - 1) & timeStamp & ".csv"
' Check if software is Office 2016 for Mac
' Documentation for this comes from https://dev.office.com/blogs/VBA-improvements-in-Office-2016
#If MAC_OFFICE_VERSION >= 15 Then
filePermissionCandidates = Array(wsPath)
fileAccessGranted = GrantAccessToMultipleFiles(filePermissionCandidates)
#End If
Application.DisplayAlerts = False
Sheets("OfflineComments").Activate
Sheets("OfflineComments").Copy
ActiveWorkbook.SaveAs Filename:=newFileName, FileFormat:=6, CreateBackup:=False
ActiveWorkbook.Save
ActiveWindow.Close
MsgBox ("Offline comments exported to " & newFileName)
Application.DisplayAlerts = True
End Sub
我试过了:
FileFormat
参数的各种文件类型,但如上所述,只有两种类型可用。试试这个:
Application.ThisWorkbook.SaveAs ("C:\User\Folder\test.csv")
同时删除行ActiveWorkbook.Save
。你是双重保存它。我正在使用Excel 2010,这在我的机器上完美运行。
尝试通过将wsPath更改为newFileName来更改权限以显式请求新文件名而不是路径:
#If MAC_OFFICE_VERSION >= 15 Then
filePermissionCandidates = Array(newFileName)
fileAccessGranted = GrantAccessToMultipleFiles(filePermissionCandidates)
#End If
我认为它是一个错误,我有同样的问题,我使用一个解决方法:
ActiveWorkbook.SaveAs newFileName,CreateBackup:= False 杀死newFileName ActiveWorkbook.SaveAs newFileName,FileFormat:= xlCSV,CreateBackup:= False ActiveWorkbook.Close
这首先保存我的工作簿作为原始文件(xlsx),删除它并保存为csv,它适用于我。