A função SaveAs funciona no Microsoft PC, mas não no MAC
Eu tenho o código VBA que controla o usuário de salvar o arquivo em qualquer outro formato que não seja .xls, .xlsm ou .pdf. Isso evita a remoção de macros durante o processo de salvamento.
Eu inseri uma linha para verificar se o sistema operacional é OSx (... Como "Mac") que funciona em outras macros, mas não nesta. O processo falha com" Não é possível encontrar o objeto ou a biblioteca de arquivos "com 'msoFileDialogSaveAs' realçado.
Aqui está o meu código:
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
Alguém pode sugerir alterações para que esse código funcione para o Office no PC e no MAC ou tenha um código diferente que atinja a mesma coisa.
obrigado
Mike