Сопоставить тип файла диалога SaveAs2 с Application.FileDialog
Допустим, вам нужна кнопка, которую пользователь может щелкнуть и сохранить копию текущего файла в формате PDF( Документация):
Application.ActiveDocument.SaveAs2 fileName:="fileName.pdf", FileFormat:=wdFormatPDF
Это работает нормально, пользователь получает диалоговое окно сохранения, выбирает местоположение и файл сохраняется, однако некоторые вещи не верны:
Отображаемый тип не соответствует указанному в VBA. Как это можно исправить? Он по-прежнему сохраняется как тип "PDF" без проблем, даже после отображения "DOCX" в качестве типа файла в раскрывающемся списке "Сохранить как тип". Также файл "fileName.pdf" не помещается в поле "Имя файла", как будто диалоговое окно не знает о параметрах, установленных в коде VBA (на эту же проблему также ссылаются в этом посте).
ОБНОВЛЕНИЕ 1
После второго взгляда на мой код я теперь понимаю, что метод SaveAs2 не отображал диалоговое меню, правильную версию кода (упрощенно) можно описать так:
Dim selected As String: selected = Application.FileDialog(msoFileDialogSaveAs).Show()
Dim filePath As String
If selected <> 0 Then
filePath = Application.FileDialog(msoFileDialogSaveAs).SelectedItems(1)
Application.ActiveDocument.SaveAs2 fileName:=Split(filePath, ".")(0), FileFormat:=wdFormatPDF
End If
Итак, реальный вопрос (я полагаю) заключается в том, как заставить "Application.FileDialog" отображать правильный тип, который вы хотите сохранить в раскрывающемся меню "Сохранить как тип", и на него уже ответил @PatricK. Спасибо всем за помощь, я прошу прощения за первоначальный запутанный характер этого вопроса.
1 ответ
Я удивлен SaveAs2
принесет вам подсказку, чтобы быть честным - только новый документ и .Save
принесет вам эту подсказку.
Если вы хотите получить что-то похожее на это приглашение, вы используете Application.FileDialog с типом msoFileDialogSaveAs.
Используйте этот код ниже (возможно, как AddIn подходит больше):
Option Explicit
Sub MySaveAs()
Dim oPrompt As FileDialog, i As Long, sFilename As String
Set oPrompt = Application.FileDialog(msoFileDialogSaveAs)
With oPrompt
' Find the PDF Filter from Default Filters
For i = 1 To .Filters.Count
'Debug.Print i & " | " & .Filters(i).Description & " | " & .Filters(i).Extensions
' Locate the PDF filter
If InStr(1, .Filters(i).Description, "PDF", vbTextCompare) = 1 Then
.FilterIndex = i
Exit For
End If
Next
' Change the title and button text
.Title = "Saving """ & ActiveDocument.Name & """ to PDF format"
.ButtonName = "Save to PDF"
' Default name
.InitialFileName = ActiveDocument.Name
' Show the Prompt and get Filename
If .Show = -1 Then
sFilename = .SelectedItems(1)
Debug.Print "Final filename: " & sFilename
' Save the file as PDF
ActiveDocument.SaveAs2 sFilename, wdFormatPDF
End If
End With
Set oPrompt = Nothing
End Sub