2012-10-22 7 views
0
나는 *.txt 파일 또는 전체 폴더 중 하나를 열려면이 루틴 Application.GetOpenFilename를 사용하려면

를 엽니 다. 어떻게 든 가능합니까?
예. 파일/폴더를 선택하지 않으면 상위 폴더 경로가 반환되고 그렇지 않으면 선택한 파일 이름이 반환됩니까?엑셀 VBA : 사용 GetOpenFilename에 폴더 및 파일

예 : 경로 C:\folder1\folder2\test.txt"test.txt"이라는 파일이 있다고 가정 해 보겠습니다. 이제 파일을 검색하고 C:\folder1 ("상위 폴더")을 선택할 때 나는 게으르다. 이제 내 프로그램에서 서브 폴더 내에서 test.txt을 검색합니다. 하지만 때로는 게으르지 않아 특정 파일을 선택하려고합니다. test.txt

폴더를 열고 (폴더 경로 만 반환) 파일을 열고 파일 경로) parent으로

+1

"전체 폴더"를 여는 방법 - Windows 탐색기에서 폴더의 내용을 표시하거나 폴더의 모든 파일을 열고 싶습니까? 어쨌든 getopenfilename을 사용하여 폴더를 선택할 수는 없습니다. 파일을 선택하지 않으면 아무 것도 반환되지 않습니다. 사용자가 폴더를 선택할 수있게하려면 다른 경로를 사용해야합니다. –

+0

는 (내 질문을 지정했습니다.) 그래서'getopenfilename'이 달성 할 수 없습니다. 다른 기능이 있습니까? –

+0

내 질문에 대한 해결책을 찾았습니다. 아마도 내가 어쨌든 검색,하지만 정확히 : [http://www.oaltd.co.uk/mvp/MVPPage.asp](http://www.oaltd.co.uk/mvp/MVPPage.asp) 짐의 도구 상자 "BrowseForFolder는"나는 내 질문에 명확하지 않았다 것을 유감스럽게 생각한다 :-) –

답변

1

난 당신이 VBA가 호출되는 파일을 의미 가정합니다. 그렇지 않으면 아래를 매우 쉽게 조정할 수 있어야합니다.

Sub getFileorFolder() 

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

If fileToOpen = False Then fileToOpen = ThisWorkbook.Path 

MsgBox "File is " & fileToOpen 

End Sub 
+0

당신을 도움이 될 것입니다. 의 난' "TEST.TXT"라는 파일이 있다고 가정하자'경로에 C를': \ 폴더 1 \ Folder2 폴더 \ 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