Макрос VBA в Excel 2016 для Mac: SaveAs не будет работать с форматом файла CSV

Я использую макрос VBA в Excel 2016 для Mac. Макрос работает на платформах Windows с Excel 2016 и на платформах Mac с более ранней версией, чем 2016. Эта проблема возникает в Excel 2016 для Mac при экспорте файла CSV.

Код должен позволять пользователю нажимать кнопку, которая затем экспортирует активную рабочую таблицу в файл CSV. Хотя подобная проблема была задокументирована здесь ( ошибка "Получение метода saveas объекта _workbook fail" при попытке сохранить XLSM как CSV), к сожалению, при изменении xlCSV в 6 работал для них, это не работает для меня.

Код работает до ActiveWorkbook.SaveAs Filename:=newFileName, FileFormat:=6, CreateBackup:=False строка, которая затем выдает ошибку:

Ошибка времени выполнения "1004": сбой метода "Сохранить как" объекта "_Workbook"

Если я изменю FileFormat в 51 (.xlsx) или 53 (.xlsm) код будет успешно завершен. Однако если FileFormat установлен в 6 (.csv) код выдаст ошибку выше. Я не могу SaveAsxlCSV или же 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

Я пытался:

  • Добавление полного пути к именам файлов ввода / вывода
  • Обеспечение проверки версии Excel и разрешений, разрешенных пользователем
  • Различные типы файлов для FileFormat параметр, но, как уже упоминалось, на самом деле работали только два типа.
  • Попытка кода, упомянутого в вышеупомянутой статье, которая не помогла (и именно поэтому я публикую оригинальный код здесь).

2 ответа

Я думаю, что это ошибка, у меня та же проблема, и я использую обходной путь:

ActiveWorkbook.SaveAs newFileName, CreateBackup: = False
Убить newFileName
ActiveWorkbook.SaveAs newFileName, FileFormat: = xlCSV, CreateBackup: = False
ActiveWorkbook.Close

При этом сначала сохраните мою книгу как исходный файл (xlsx), удалите ее и сохраните как csv, она работает для меня.

Попробуйте изменить разрешения для явного запроса нового имени файла вместо пути, изменив wsPath на newFileName:

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

Попробуй это:

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

Также удалите строку ActiveWorkbook.Save, Вы вдвойне сохраняете это. Я использую Excel 2010, и это отлично работает на моей машине.

Другие вопросы по тегам