2012-10-22 127 views
0

我想使用此例程Application.GetOpenFilename打開*.txt文件或整個文件夾。這是否有可能?
例如如果沒有選擇文件/文件夾,則返回父文件夾路徑,否則返回所選文件名?Excel VBA:使用getOpenFilename打開文件夾和文件

示例:假設我在路徑C:\folder1\folder2\test.txt中有一個名爲"test.txt"的文件。現在我在搜索文件時很懶,並選擇C:\folder1(「父文件夾」)。我的程序現在在子文件夾內搜索test.txt。但有時我不懶惰,我想選擇特定的文件test.txt

我正在尋找一個用戶友好的對話框來處理兩個:打開一個文件夾(並返回文件夾路徑只)並打開一個文件(並返回文件路徑)

+1

是什麼打開「整個文件夾」的樣子 - 你的意思是你想顯示在Windows資源管理器文件夾的內容,或者你想要的文件夾中打開所有文件?在任何情況下,您都不能使用getopenfilename來選擇一個文件夾:如果沒有選擇文件,則不會返回任何文件。如果你希望你的用戶能夠選擇一個文件夾,那麼你需要使用不同的路線。 –

+0

(我指定了我的問題。)所以'getopenfilename'不能實現這一點。還有其他功能嗎? –

+0

我找到了解決我的問題。也許不完全是我搜索,但無論如何: [http://www.oaltd.co.uk/mvp/MVPPage.asp](http://www.oaltd.co.uk/mvp/MVPPage.asp) 吉姆的工具箱「BrowseForFolder」應該可以幫助你:-) –

回答

1

By parent我假設你的意思是調用VBA的文件。如果不是,你應該能夠調整下面的很容易。

Sub getFileorFolder() 

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

If fileToOpen = False Then fileToOpen = ThisWorkbook.Path 

MsgBox "File is " & fileToOpen 

End Sub 
+0

我很抱歉,我不清楚我的問題。假設我在路徑「C:\ folder1 \ folder2 \ test.txt」中有一個名爲「test.txt」的文件。現在我搜索文件時懶惰,並選擇'C:\ folder1'(「父文件夾」)。我的程序現在在子文件夾內搜索'test.txt'。 但有時我不懶惰,我想選擇一個特定的文件'test.txt'。 –

+1

@vince_h - >認真嗎?你懶得點擊一個或兩個以上的文件夾來獲取文件?或者還有其他一些原因,爲什麼你需要這樣做? –

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