选择要导出.xlsx文件VBA的文件路径

选择要导出.xlsx文件VBA的文件路径,vba,excel,Vba,Excel,我正在尝试编写一段代码,允许用户在将单独的.xlsx文件中的数据导出到文件夹之前选择文件夹的文件路径。预先查找文件夹的路径并硬编码很容易,但我希望这个程序允许用户每次选择一个文件夹。实际上,我有一个利用excel打开文件对话框的函数。从那里,我可以找到我需要的文件夹,只需从顶部栏复制文件路径并点击“取消”。代码如下: Function GetFileDestination() As String Dim DataObj As New MSForms.DataObject 'Th

我正在尝试编写一段代码,允许用户在将单独的.xlsx文件中的数据导出到文件夹之前选择文件夹的文件路径。预先查找文件夹的路径并硬编码很容易,但我希望这个程序允许用户每次选择一个文件夹。实际上,我有一个利用excel打开文件对话框的函数。从那里,我可以找到我需要的文件夹,只需从顶部栏复制文件路径并点击“取消”。代码如下:

Function GetFileDestination() As String
    Dim DataObj As New MSForms.DataObject

    'This MsgBox just tells the user what to do
    MsgBox "To get the file Destination, the 'Open File' Dialog Box will open. Go to the folder_
    you want to use, click on the bar at the top, and copy the destination. Then hit Cancel",_
    vbOKOnly, "Finding the File Destination"

    Application.Dialogs(xlDialogOpen).Show
    DataObj.GetFromClipboard
    GetFileDestination = DataObj.GetText
End Function
这可以完成任务,但看起来相当草率,因为它强制用户手动复制所需的文件路径,然后取消“打开文件”对话框。 在保持相同功能的同时,是否有人知道一种更具创造性和简洁的方法

提前谢谢

函数GetFolder(strPath作为字符串)作为字符串
Function GetFolder(strPath As String) As String
Dim fldr As FileDialog
Dim sItem As String
Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
With fldr
    .Title = "Select a Folder"
    .AllowMultiSelect = False
    .InitialFileName = strPath
    If .Show <> -1 Then GoTo NextCode
    sItem = .SelectedItems(1)
End With
NextCode:
GetFolder = sItem
Set fldr = Nothing
End Function
Dim fldr As FILE对话框 以字符串形式显示 设置fldr=Application.FileDialog(msoFileDialogFolderPicker) 与fldr .Title=“选择一个文件夹” .AllowMultiSelect=False .InitialFileName=strPath 如果.Show-1,则转到下一个代码 sItem=.SelectedItems(1) 以 下一个代码: GetFolder=sItem 设置fldr=无 端函数
以下是描述:

  • Application.FileDialog(msoFileDialogFolderPicker)
    -文件夹对话框提示用户 选择一个目录路径

  • strPath
    -将传递给函数的默认路径

  • show
    -如果用户选择取消对话框,将分配值“0”,否则分配值“-1”

  • GetFolder=sItem
    -此语句返回所选/打开文件夹的路径, 如果单击取消按钮,则返回else Null


  • 希望这能澄清所使用的整体逻辑。

    您看到了吗?这非常有效,谢谢Rusk!不知道大部分是怎么工作的,但我不是在抱怨!我已经添加了答案及其解释,供您参考。