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

问题描述 投票:3回答:3

我在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参数的各种文件类型,但如上所述,只有两种类型可用。
  • 上面链接文章中的代码。
excel vba excel-2016 excel-vba-mac
3个回答
0
投票

试试这个:

Application.ThisWorkbook.SaveAs ("C:\User\Folder\test.csv")

同时删除行ActiveWorkbook.Save。你是双重保存它。我正在使用Excel 2010,这在我的机器上完美运行。


0
投票

尝试通过将wsPath更改为newFileName来更改权限以显式请求新文件名而不是路径:

#If MAC_OFFICE_VERSION >= 15 Then
    filePermissionCandidates = Array(newFileName)
    fileAccessGranted = GrantAccessToMultipleFiles(filePermissionCandidates)
#End If

0
投票

我认为它是一个错误,我有同样的问题,我使用一个解决方法:

ActiveWorkbook.SaveAs newFileName,CreateBackup:= False 杀死newFileName ActiveWorkbook.SaveAs newFileName,FileFormat:= xlCSV,CreateBackup:= False ActiveWorkbook.Close

这首先保存我的工作簿作为原始文件(xlsx),删除它并保存为csv,它适用于我。

© www.soinside.com 2019 - 2024. All rights reserved.