【问题标题】:Excel/VBA get full file path from file selectionExcel/VBA 从文件选择中获取完整的文件路径
【发布时间】:2017-10-14 00:24:21
【问题描述】:

我有一个 VBA 宏来做类似的事情

Sub test()

For Each X In Workbooks("file.xlsx").Sheets("sheetname")
    Do something
Next

End Sub

我正在执行此宏的工作表不是 for-each 循环中的工作表。我还通过工作表中的按钮运行此宏。

但是,文件名和位置在该宏执行的 99% 的时间里会有所不同。因此,我希望在执行此宏时出现“打开文件”对话框,我在其中选择一个文件,然后在该宏中使用该文件。

我也想让它像这样:

Dim worksheetname as variable
For Each X in worksheetname.sheets("sheetname")

而不是直接在行中,因为它比直接在代码中更好。

但是,即使使用硬编码的文件名,我也未能正确执行(不知道将其调暗为什么,以及如何将其设置为文件名),如果你们可以帮助我的话好吧(结合通过文件对话框制作),那就太好了。

至少到目前为止发现了一个。所以现在只剩下从文件对话框选择中获取它了

谢谢!

Xeb

【问题讨论】:

标签: excel vba


【解决方案1】:

尝试这样的事情,我将其称为带有 args 的函数,用于文件类型过滤器和(可选)它将打开的默认目录:

Sub g()
    FilePath = FileSelectBox("*.xlsx")
    Msgbox "Filepath = " & FilePath
End Sub

Function FileSelectBox(ByRef FileType As String, Optional ByVal DefaultDir As String) As String
    Dim a As Object, FileName As String, varFile As Variant
    Set a = Application.FileDialog(msoFileDialogFilePicker)
    With a
        .AllowMultiSelect = False
        .Title = "Select File..."
        .Filters.Clear
        .Filters.Add "Excel Files", FileType
        If Not IsMissing(DefaultDir) And DefaultDir <> "" Then .InitialFileName = DefaultDir
        If .Show = True Then
            For Each varFile In .SelectedItems
                FileSelectBox = varFile
            Next varFile
        End If
    End With
End Function

MSISDN:https://msdn.microsoft.com/en-us/library/office/ff196794.aspx

【讨论】:

  • 这给了我一个“类型不匹配”错误(我认为这是错误 13)。出现文件对话框,一旦我选择文件,就会出现此错误。
  • @xebtria 道歉,现在再试一次
  • 现在我得到“下标超出范围”(再次,在选择文件后)
  • @xebtria 在哪一行?你能用 f8 单步执行你的代码吗?
  • @xebtria 我很困惑,这个函数根本不会打开选择的文件,它会将您选择的文件路径分配给子程序中的变量“FilePath”。我已经更新了代码,所以应该很清楚
猜你喜欢
  • 2016-08-04
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
  • 2015-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-10
相关资源
最近更新 更多