use vba para salvar em um arquivo de texto não existente usando uma caixa de diálogo de estilo “salvar como”

0

Eu tenho uma macro que gera um arquivo de texto.

O que eu quero é uma caixa de diálogo do tipo "salvar" que me permita obter o caminho de um arquivo ainda inexistente, exibindo uma caixa de diálogo do explorador de arquivos.

O que eu tenho gerenciado até agora é um prompt que requer que você digite o nome do arquivo com o caminho completo (não ideal) ou salve em um arquivo existente usando uma caixa de diálogo de estilo "aberto".

Exemplo de código abaixo.

Sub UseOpenDialog()
    Dim DestFile As String

    ' Open the file dialog
    With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = False
        .Filters.Clear
        .Filters.Add "Text File", "*.txt"
        .Filters.Add "All Files", "*.*"

        If .Show = True Then
            DestFile = .SelectedItems(1)
            dosomething (DestFile)
        Else: MsgBox "nothing selected"
        End If

    End With
End Sub

Sub TypeFullPath()
    Dim DestFile As String

    DestFile = InputBox("Enter the destination filename" _
     & Chr(10) & "(with complete path):", "Title")
    dosomething (DestFile)
End Sub

Sub dosomething(x)

    MsgBox x

End Sub
    
por Some_Guy 03.10.2016 / 20:43

1 resposta

0

Encontrei isso depois de pesquisar

O Excel tem "Application.GetSaveAsFilename", que retorna uma string do caminho completo de um arquivo usando uma caixa de estilo Salvar como, ou FALSE, se o prompt for encerrado.

Implementação para salvar em um arquivo de texto, com prompts apropriados.

Sub saveas()
    Dim Destfile As Variant
saveas::     'bring up saveas dialogue with filters
        Destfile = Application.GetSaveAsFilename(title:="Export", _
            fileFilter:= _
            "Text Files (*.txt; *.csv), *.txt;*.csv," & _
            "All Files (*.*),*.*")

        'exit sub with message if no file selected
        If Destfile = False Then
            MsgBox "no file selected"
            Exit Sub

        'prompt user for overwrite confirmation
        ElseIf Dir(Destfile) <> "" Then
            If MsgBox("Overwrite " & Dir(Destfile) & "?", vbYesNo) = vbNo Then GoTo saveas
        'beware of velociraptors
        End If

    dosomething (Destfile)

End Sub
    
por 04.10.2016 / 15:21