Excel宏 - 将工作表导出到csv并浏览保存目录

Maz*_*Maz 5 csv excel vba excel-vba

我已经成功地完成了一项宏观工作,可以做我需要做的事情,但我想做得更好,而且不能.

- 此位有效 - 通过单击excel中的按钮,用户将特定工作表导出到具有动态文件名的csv,并将csv保存在预定目录中.

- 它可以这样做 - 而不是保存到预定的目录,我可以显示浏览窗口,以便他们可以选择一个目录,以便保存到?我无法弄清楚如何做到这一点.

这是我的宏:

Sub Export()
Dim MyPath As String
Dim MyFileName As String
MyPath = "C:\importtest"

MyFileName = "MR_Update_" & Sheets("Monthly Review").Range("D3").Value & "_" & Format(Date, "ddmmyyyy")

If Not Right(MyPath, 1) = "\" Then MyPath = MyPath & "\"
If Not Right(MyFileName, 4) = ".csv" Then MyFileName = MyFileName & ".csv"

Sheets("Export Data").Copy

With ActiveWorkbook

    .SaveAs Filename:= _
        MyPath & MyFileName, _
        FileFormat:=xlCSV, _
        CreateBackup:=False

    .Close False
End With
End Sub
Run Code Online (Sandbox Code Playgroud)

Sid*_*out 6

Excel有一个内置的FileSave对话框.它被称为.GetSaveAsFilename.用那个.

句法

expression.GetSaveAsFilename(InitialFilename,FileFilter,FilterIndex,Title,ButtonText)

用法

Dim fileSaveName As Variant

fileSaveName = Application.GetSaveAsFilename( _
                                    fileFilter:="Excel Files (*.csv), *.csv")
If fileSaveName <> False Then
    '
    '~~> Your code to save the file here
    '
End If
Run Code Online (Sandbox Code Playgroud)

  • +1对OP问题的很好的解决方案. (2认同)

ARi*_*ich 3

正如帕特里克所建议的,您正在寻找该.FileDialog房产。

要实现它,请尝试以下操作:

Sub Export()
Dim MyPath As String
Dim MyFileName As String

MyFileName = "MR_Update_" & Sheets("Monthly Review").Range("D3").Value & "_" & Format(Date, "ddmmyyyy")

If Not Right(MyFileName, 4) = ".csv" Then MyFileName = MyFileName & ".csv"

Sheets("Export Data").Copy

With Application.FileDialog(msoFileDialogFolderPicker)
    .Title = "Select a Folder"
    .AllowMultiSelect = False
    .InitialFileName = "" '<~~ The start folder path for the file picker.
    If .Show <> -1 Then GoTo NextCode
    MyPath = .SelectedItems(1) & "\"
End With

NextCode:

With ActiveWorkbook
    .SaveAs Filename:=MyPath & MyFileName, FileFormat:=xlCSV,CreateBackup:=False
    .Close False
End With
End Sub
Run Code Online (Sandbox Code Playgroud)