Excel VBA:使用getOpenFilename打开文件夹AND文件

时间:2012-10-22 12:49:26

标签: windows excel-vba getopenfilename vba excel

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

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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