使用CSV文件格式保存,在Excel 2016 for Mac中

时间:2016-08-25 13:50:06

标签: excel vba excel-2016 excel-vba-mac

我在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 xlCSVxlCSVMac

我的完整剧本:

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

我试过了:

  • 添加输入/输出文件名的完整路径
  • 确保检查Excel的版本以及用户
  • 允许的权限
  • FileFormat参数的各种文件类型,但如上所述,只有两种类型可用。
  • 上述链接文章中的代码。

3 个答案:

答案 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,对我有用。