プロが教えるわが家の防犯対策術!

FileDialogを使用してユーザーにファイル名を指定してもらい、結果からフルパスを取得する事はできたのですが、パスではなくファイル名を取得するにはどのようにすれば良いのでしょうか?

Dim lngCount As Long
' ファイル ダイアログを開きます。
With Application.FileDialog(msoFileDialogOpen)
.AllowMultiSelect = True
.Show

'選択された各ファイルのパスを表示します。
For lngCount = 1 To .SelectedItems.Count
lblPath_1.Caption = .SelectedItems(lngCount)
Next lngCount
End With

A 回答 (3件)

こんにちは。



ご質問は、単に、Office の VBAで、開くファイルの対象も書かれておりませんから、以下のように、ユーザー定義関数を用いればよいです。(Word・Excel共用です。)

例:

省略

For lngCount = 1 To .SelectedItems.Count
 Debug.Print FullName2FName(.SelectedItems(lngCount))
Next lngCount

省略


Function FullName2FName(fn As String)
Dim buf As String
Dim i As Integer
 i = InStrRev(fn, "\")
 If i > 0 Then
  buf = Mid$(fn, k + 1)
 Else
  buf = fn
 End If
 FullName2FName = buf
End Function

この回答への補足

ご回答ありがとうございます。

自作関数を作らなくてはいけないのですね、私は標準メソッドかなんかで取得できるものがあるのかと思い込んでいました。

で、教えていただいたFullName2FName関数ですが結果もフルパスで返ってきます。例えば"C:\Documents and Settings\My Documents\test_1.xls"を引数に入れた結果も"C:\Documents and Settings\My Documents\test_1.xls"でした。使用方法が悪いでしょうか?

補足日時:2007/04/17 15:05
    • good
    • 0

For lngCount = 1 To .SelectedItems.Count


 Debug.Print(Dir(.SelectedItems(lngCount)))
Next lngCount
とすればいかがでしょうか。

フルパスが実際に存在しないファイルの場合はだめですが、FileDialogから選択したのであれば、この方法が使えると思います。
    • good
    • 0
この回答へのお礼

こんな取得方法もあるのですね、参考にさせていただきます。
有難うございました。

お礼日時:2007/04/17 16:03

こんにちは。



>標準メソッド

たぶん、それはプロパティですね。ファイルのオブジェクトを採らなくてはなりません。ただ、文字列から行ったほうが早いです。

それから、

>教えていただいたFullName2FName関数ですが結果もフルパスで返ってきます。

オンラインで書き換えたので、前のコードが残ってしまいました。
失礼しました。 k を i に変えてください。

buf = Mid$(fn, k + 1)
    ↓
buf = Mid$(fn, i + 1)
    • good
    • 0
この回答へのお礼

再度のご回答有難うございます。

buf = Mid$(fn, k + 1)
    ↓
buf = Mid$(fn, i + 1)
でうまく動きました。

お礼日時:2007/04/17 16:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!