簡體   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