2013-05-30 88 views
1
Sub GetFolderPath() 
Dim InputFolder As String 
Dim OutputFolder As String 

InputFolder = Application.GetOpenFilename("Folder, *") 
Range("C1").Select 
ActiveCell.Value = InputFolder & "\" 

End Sub 

我正在使用上面的代碼嘗試存儲,然後粘貼另一個宏我正在運行的文件夾位置。如何在Excel VBA中存儲文件夾路徑

任何想法如何使它停止在文件夾級別或從最後刪除文件名?

謝謝!

+0

Does [this](http://stackoverflow.com/a/5975453/1048539)適用於您正在做的事情嗎? – enderland

+0

我在這裏發佈之前實際上已經嘗試過了。當我嘗試時它沒有工作,但我可能做錯了。 我上面發表的作品,除了它在結束時返回一個文件名而不是在文件夾級別結束。 – NPoorbaugh

回答

2

你可以使用

FileName = Dir(InputFolder) 
InputFolder = Left(InputFolder, Len(InputFolder)-Len(FileName)) 

迪爾()獲取只是文件名和左()幫助減磅字符串只是文件夾路徑。

+0

你甚至可以在一行內做到:)所以,兩個或更多選項可用:) –

0

如果我理解正確,您希望獲取文件的路徑,但不想在InputFolder字符串中輸入文件名。如果我理解正確的話,那麼這將這樣的伎倆:

Option Explicit 

Sub GetFolderPath() 
Dim InputFolder As String 
Dim OutputFolder As String 

InputFolder = Application.GetOpenFilename("Folder, *") 
Range("C1").Value = getFilePath(InputFolder) 

End Sub 

Function getFilePath(path As String) 

Dim filePath() As String 
Dim finalString As String 
Dim x As Integer 
filePath = Split(path, "\") 

For x = 0 To UBound(filePath) - 1 
    finalString = finalString & filePath(x) & "\" 
Next 

getFilePath = finalString 
End Function 

而且,你不必爲了寫文件名以電子表格的另一個宏得到它。您可以從第一個宏中調用另一個宏,並將文件名作爲參數傳遞,或者將文件名變量設置爲模塊級變量,以便其他宏可以訪問它(假設第二個宏位於同一個模塊中)。

+0

完美,謝謝! – NPoorbaugh

+0

很高興能幫到你!確保標記您的答案,以便其他訪問者在遇到此問題時能找到有效的答案。 – Casey

+1

這似乎很多工作來創建文件夾路徑的數組只是爲了修剪文件名。我會看看我發佈的解決方案,因爲它只使用兩行,運行速度更快。 – AxGryndr

1

甚至有更短的選擇讓你的路徑。只是一個單行:

'...your code 
Dim InputFolder As String 
InputFolder = Application.GetOpenFilename("Folder, *") 

'new, single line solution 
InputFolder = Mid(InputFolder, 1, InStrRev(InputFolder, Application.PathSeparator)) 

我想可能有一些可用的更多的選擇:)

0

哇,這款主板是不可思議!我會使用casey的代碼,它完美的工作:)。我還添加了一個功能來根據需要創建子文件夾。

這是我最終決定的產品。

Option Explicit 

Sub GetFolderPath() 
Dim InputFolder As String 
Dim OutputFolder As String 

MsgBox ("Please Select the Folder of Origin") 
    InputFolder = Application.GetOpenFilename("Folder, *") 
    Range("D5").Value = getFilePath(InputFolder) 
MsgBox ("Please Select the Desired Destination Root Folder") 
    InputFolder = Application.GetOpenFilename("Folder, *") 
    Range("E5").Value = getFilePath(InputFolder) 

    Dim OutputSubFolder As String 
    Dim Cell As Range 
     Range("E5").Select 
    OutputSubFolder = ActiveCell.Value 


    'Loop through this range which includes the needed subfolders 
     Range("C5:C100000").Select 
      For Each Cell In Selection 
     On Error Resume Next 
      MkDir OutputSubFolder & Cell 
     On Error GoTo 0 
     Next Cell 

End Sub 

Function getFilePath(path As String) 

Dim filePath() As String 
Dim finalString As String 
Dim x As Integer 
filePath = Split(path, "\") 

For x = 0 To UBound(filePath) - 1 
    finalString = finalString & filePath(x) & "\" 
Next 

getFilePath = finalString 
End Function 
相關問題