我在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
参数的各种文件类型,但如上所述,只有两种类型可用。答案 0 :(得分:0)
试试这个:
Application.ThisWorkbook.SaveAs ("C:\User\Folder\test.csv")
同时删除第ActiveWorkbook.Save
行。你是双重保存它。
我正在使用Excel 2010,这在我的机器上完美运行。
答案 1 :(得分:0)
尝试通过将wsPath更改为newFileName来更改权限以显式请求新文件名而不是路径:
#If MAC_OFFICE_VERSION >= 15 Then
filePermissionCandidates = Array(newFileName)
fileAccessGranted = GrantAccessToMultipleFiles(filePermissionCandidates)
#End If
答案 2 :(得分:0)
我认为这是一个错误,我遇到了同样的问题,并且使用了一种解决方法:
ActiveWorkbook.SaveAs newFileName,CreateBackup:= False
杀死newFileName
ActiveWorkbook.SaveAs newFileName,FileFormat:= xlCSV,CreateBackup:= False
ActiveWorkbook.Close
这首先将我的工作簿另存为原始文件(xlsx),将其删除并另存为csv,对我有用。