Функция SaveAs работает на ПК Microsoft, но не на MAC
У меня есть код VBA, который контролирует пользователя от сохранения файла в любом другом формате, кроме .xls, .xlsm или .pdf. Это сделано для предотвращения удаления макросов во время процесса сохранения.
Я вставил строку, чтобы проверить, является ли операционная система OSx (... Как "макинтош"), который работает в других макросах, но не в этом. Процесс завершается ошибкой с" Не могу найти объект файла или библиотеку "с выделенным msoFileDialogSaveAs.
Вот мой код:
Option Explicit
Option Compare Text
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, _
Cancel As Boolean)
Dim fso As Object 'FileSystemObject
Dim PdfSave As Boolean
Dim SheetName As String
If Not Application.OperatingSystem Like "*Mac*" Then
SheetName = ActiveSheet.Name
'Save-As action?
If SaveAsUI Then
Set fso = CreateObject("Scripting.FileSystemObject")
'Abort excel's dialog
Cancel = True
'Create our own
With Application.FileDialog(msoFileDialogSaveAs)
'Select the XLSM filter by default
.FilterIndex = 2
Again:
'Ok clicked?
If .Show = -1 Then
'Which extension should we save?
Select Case fso.GetExtensionName(.SelectedItems(1))
Case "xlsm"
'Okay
Case "xls"
'Okay
Case "pdf"
PdfSave = True
'Okay
Case Else
MsgBox "Invalid file type selected!" _
& vbCr & vbCr & "Only the following file formats are permitted:" _
& vbCr & " 1. Excel Macro-Enabled Workbook (*.xlsm)" _
& vbCr & " 2. Excel 97-2003 Workbook (*.xls)" _
& vbCr & " 3. PDF (*.pdf)" _
& vbCr & vbCr & "Please try again." _
& vbCr & vbCr & "NOTE: 'Excel 97-2003 Workbook (*.xls)' format should be used for" _
& vbCr & "backwards compatability only!", vbOKOnly + vbCritical
GoTo Again
End Select
'Prevent that we call ourself
Application.EnableEvents = False
'Save the file
If PdfSave = True Then
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=ActiveWorkbook.Path & "\" & SheetName & ".pdf", Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True
Else
ThisWorkbook.SaveAs .SelectedItems(1)
End If
Application.EnableEvents = True
End If
End With
End If
End If
End Sub
Может кто-нибудь предложить изменения, чтобы этот код работал для Office как на ПК, так и на MAC, или иметь другой код, который выполняет одно и то же.
Спасибо
Майк