【问题标题】:Select folder for save location选择保存位置的文件夹
【发布时间】:2015-10-29 09:59:26
【问题描述】:

我有一个包含大约 20 个模块的 VBA 宏,它们在工作簿中创建单独的电子表格。他们还将宏的每个模块创建的单个电子表格保存到共享驱动器上的特定文件夹中。

这是将电子表格保存到单独文件夹的几行示例。

z = Format(DateTime.Now, "dd-MM-YYYY hhmm")
wb.SaveAs "J:\AAAA\BBBB\CCCC\DDDD\mod1" & z & ".xlsx"
Workbooks("mod1" & z & ".xlsx").Close savechanges:=True

但是,由于此文件现在在多个用户之间共享,具有不同的功能,用户现在希望能够单独设置生成的电子表格的保存位置。

我正在寻找的是宏打开新窗口以及用户选择文件路径的某种方式。然后将该文件路径存储到宏中,以便每个模块都可以读取需要存储的文件位置。

这可能吗?

编辑 1:

我应该更清楚一些事情。我很抱歉。

上面的代码被复制到每个模块中。此外,所有模块都从一个总体模块运行,该模块调用另一个。

我正在寻找的是允许用户在总体模块开始时选择保存位置的代码。例如。 J\AAA\CCC\XXX。模块在调用时将检索文件路径,然后将文件保存到该位置。

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    使用此功能:

    Function GetFolder() 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
    

    它返回一个文件夹路径

    【讨论】:

    • 感谢您的代码。但是,我只需要它来返回文件夹路径的字符串,而不是它似乎要求的文件名。文件名取决于电子表格和正在运行的单个宏。
    • msoFildeDialogSaveAs交换msoFileDialogFolderPicker
    • 谢谢,也帮了我。
    【解决方案2】:

    如果你想让他们选择一个文件名,你可以使用这个功能。它提示用户输入文件夹位置和文件名。该函数返回一个绝对文件路径。如果用户取消了对话,则返回vbNullString

    Public Function SaveWorkbook() As String
    
        Dim fileName As Variant
    
        fileName = Application.GetSaveAsFilename(fileFilter:="Excel Workbook (*.xlsx), *.xlsx")
    
        If fileName <> False Then Exit SaveWorkbook = fileName
    
    End Sub
    

    【讨论】:

    • 感谢您的代码。但是,我只需要它来返回文件夹路径的字符串,而不是文件名。文件名取决于电子表格和正在运行的单个宏。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-14
    • 2021-07-24
    • 2011-05-19
    相关资源
    最近更新 更多