繁体   English   中英

Excel 2016 for Mac 中的 VBA 宏:另存为不适用于 CSV 文件格式

[英]VBA macro in Excel 2016 for Mac: SaveAs will not work with a CSV file format

我正在 Excel 2016 for Mac 中运行 VBA 宏。 该宏适用于使用 Excel 2016 的 Windows 平台以及早于 2016 版本的 Mac 平台。 尝试导出 CSV 时,该问题特定于 Excel 2016 for Mac。

该代码应该允许用户单击一个按钮,然后将活动工作表导出到 CSV 文件。 虽然这里记录了一个类似的问题( 在尝试将 XLSM 保存为 CSV 时出现“Getting "method saveas of object _workbook failed" 错误),但不幸的是,虽然将xlCSV更改为6对他们xlCSV ,但这对我不起作用。

该代码一直运行到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参数的各种文件类型,但如前所述,实际上只有两种类型有效。
  • 尝试上面链接的文章中提到的代码,这没有帮助(这就是我在这里发布原始代码的原因)。

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

ActiveWorkbook.SaveAs newFileName, CreateBackup:=False
杀死新文件名
ActiveWorkbook.SaveAs newFileName, FileFormat:=xlCSV, CreateBackup:=False
ActiveWorkbook.Close

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

试试这个:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM