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

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

End Sub

上記のコードを使用して、実行中の別のマクロのフォルダーの場所を保存して貼り付けようとしています。

フォルダ レベルで停止する方法や、最後からファイル名を削除する方法はありますか?

ありがとう!

4

4 に答える 4

2

あなたが使用することができます

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

Dir() はファイル名だけを取得し、Left() は文字列をフォルダー パスだけに切り詰めるのに役立ちます。

于 2013-05-30T19:08:32.280 に答える
1

パスを取得するためのさらに短いオプションがあります。1行だけで:

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

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

そして、利用可能なオプションがいくつかあると思います:)

于 2013-05-30T19:36:01.917 に答える
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

また、別のマクロがファイル名を取得するために、スプレッドシートにファイル名を書き込む必要はありません。最初のマクロから他のマクロを呼び出して、ファイル名をパラメーターとして渡すか、ファイル名変数をモジュール レベル変数として設定して、2 番目のマクロが同じモジュールにあると仮定して、他のマクロからアクセスできるようにすることができます。

于 2013-05-30T19:10:25.490 に答える