Макрос 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) код выдаст ошибку выше. Я не могу SaveAs
xlCSV
или же 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, и это отлично работает на моей машине.