Excel / VBA从文件选择中获取完整文件路径

时间:2017-05-15 09:23:50

标签: excel vba

我正在使用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

1 个答案:

答案 0 :(得分:2)

尝试这样的事情,我将其称为带有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