【问题标题】:Excel VBA: Use getOpenFilename to open folder AND filesExcel VBA:使用 getOpenFilename 打开文件夹和文件
【发布时间】:2015-09-03 02:16:03
【问题描述】:

我想使用此例程Application.GetOpenFilename 打开*.txt 文件或整个文件夹。这有可能吗?
例如。如果没有选择文件/文件夹,则返回父文件夹路径,否则选择文件名?

示例:假设我在路径C:\folder1\folder2\test.txt 中有一个名为"test.txt" 的文件。现在我在搜索文件并选择C:\folder1(“父文件夹”)时很懒惰。我的程序现在在子文件夹中搜索test.txt。但有时我并不懒惰,我想选择特定文件test.txt

我正在寻找一个用户友好的对话框来处理这两个问题:打开一个文件夹(并仅返回文件夹路径)并打开一个文件(并返回文件路径)

【问题讨论】:

  • 打开“整个文件夹”是什么样子的 - 您的意思是要在 Windows 资源管理器中显示文件夹的内容,还是要打开文件夹中的所有文件?在任何情况下,您都不能使用 getopenfilename 来选择文件夹:如果没有选择任何文件,则不会返回任何内容。如果您希望您的用户能够选择一个文件夹,那么您需要为此使用不同的路由。
  • (我指定了我的问题。)所以getopenfilename 无法做到这一点。还有其他功能吗?
  • 我找到了我的问题的解决方案。也许不完全是我搜索的内容,但无论如何:http://www.oaltd.co.uk/mvp/MVPPage.asp Jim 的工具箱“BrowseForFolder”应该可以帮助你:-)

标签: windows excel getopenfilename vba


【解决方案1】:

parent 我假设您的意思是调用 VBA 的文件。如果没有,您应该可以很容易地调整以下内容。

Sub getFileorFolder()

fileToOpen = Application.GetOpenFilename("Text Files (*.txt), *.txt")

If fileToOpen = False Then fileToOpen = ThisWorkbook.Path

MsgBox "File is " & fileToOpen

End Sub

【讨论】:

  • @vince_h -> 认真的吗?你懒得再点击一两个文件夹来获取文件?还是有其他原因需要您这样做?
【解决方案2】:

我有一种更好的打开文本文件的方法,但使用了上述答案之一。

Sub ImportTextFile()
'better method to retrieving Data from txt.
If Not Range("A2").Value = "" Then
MsgBox "Clear Data First"
Sheets("Input DATA").Select
Exit Sub
End If

fileToOpen = application.GetOpenFilename("Text Files (*.txt), *.txt")
If fileToOpen = False Then fileToOpen = ThisWorkbook.Path
MsgBox "File is " & fileToOpen

    With ActiveSheet.QueryTables.Add(connection:= _
        "TEXT;" + fileToOpen, Destination:=Range("$A$2"))
        '.name = "All"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 437
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
Call RemoveEmptyRows
End Sub

Sub RemoveEmptyRows()
On Error Resume Next
Range("A2:A5000").Select
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.Delete Shift:=xlUp
Resume:
Range("A2").Select
End Sub

【讨论】:

    猜你喜欢
    • 2013-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-26
    • 2019-01-31
    • 2021-08-07
    相关资源
    最近更新 更多