2016-04-04 9 views
0

Sagen Sie bitte einen Knopf haben wollen, dass der Benutzer kann als PDF (Documentation) eine Kopie der aktuellen Datei klicken und sparen:Spiel SaveAs2 Dialog Dateityp Application.FileDialog

Application.ActiveDocument.SaveAs2 fileName:="fileName.pdf", FileFormat:=wdFormatPDF 

Dies funktioniert gut, der Benutzer mit einem Dialog speichern präsentiert wird, wählt einen Speicherort und die Datei gespeichert wird, aber ein paar Dinge sind nicht korrekt:

enter image description here

der Typ entspricht nicht angezeigt, was in der VBA angegeben wurde, wie kann das ist richtig? Es speichert immer noch als Typ "PDF" ohne Problem, auch nachdem "DOCX" als Dateityp im Dropdown-Menü "Dateityp" angezeigt wird. Außerdem wird die Datei "Dateiname.pdf" nicht in das Feld "Dateiname" eingefügt, als ob das Dialogfeld die im VBA-Code (This same issue is also referenced in this post) festgelegten Optionen nicht kennt.

UPDATE 1

Nach einem zweiten Blick auf meinem Code unter merke ich jetzt, dass die SaveAs2 Methode wurde nicht das Dialogmenü angezeigt wird, um die richtige Version des Codes (vereinfacht) kann wie folgt beschrieben werden:

Also die eigentliche Frage (ich denke) ist, wie erhalten Sie "Application.FileDialog", um den richtigen Typ, den Sie speichern möchten, unter dem "Speichern unter" Drop-down anzuzeigen, und dies wurde bereits beantwortet von @ PatricK. Vielen Dank für die Hilfe, ich entschuldige mich für die anfängliche Verwirrung dieser Frage.

+0

weit hergeholt, aber die Antwort auf diese Frage einen Blick wert sein könnte: http: //stackoverflow.com/questions/25360555/document-save-is-showing-saveas-dialog –

+0

Dave, ich stimme Patricks Bemerkung zu, dass kein Dialog angezeigt werden sollte. Ist es möglich, dass Ihr Code (oder der eines anderen) das DocumentBeforeSave-Ereignis abfängt und die Anzeige des Dialogfelds erzwingt? (Obwohl ich keine Ahnung habe, warum die Verwendung seines Codes das unterdrücken würde ...) –

+0

Ja, ich denke, mein Beispiel ist zu einfach, es gab eine Menge Zeug, bevor diese Methode aufgerufen wurde, ich glaube nicht einmal, dass dieser Code war verantwortlich für die Anzeige der Popup-Box, wie ich bereits erwähnt, ich werde die Frage umrahmen, um eine generische (+ genaue) Anfrage nach dem Standard-Weg zur Anzeige der Dialogbox widerspiegeln. –

Antwort

1

Ich bin überrascht für SaveAs2 bringt Ihnen eine Aufforderung, um ehrlich zu sein - Nur ein neues Dokument und .Save bringen Sie diese Aufforderung.

Wenn Sie etwas ähnliches zu dieser Aufforderung erhalten möchten, verwenden Sie Application.FileDialog mit Typ msoFileDialogSaveAs.

Verwenden Sie diesen Code (vielleicht als ein AddIn passt mehr):

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 

Screenshot Beispiel:
ResultingFileDialogBox

+0

Möglicherweise gibt es ein anderes Problem mit der Datei (schreibgeschützt, Berechtigungen, etc ..), ich denke, dass der Dialog angezeigt werden kann, muss ich weiter untersuchen, aber ich denke, es liegt außerhalb Vom Umfang dieser Frage scheint diese Lösung vorerst gut zu funktionieren. Vielen Dank :) –