アプリ版:「スタンプのみでお礼する」機能のリリースについて

FileDialog オブジェクトで返すオブジェクトを参照すると
どうしてもファイルパスを取得する変数しか取得できません。

FileDialog オブジェクトで選択したファイルのファイル名のみを取得するにはどうしたらよいでしょうか。

ExcelVBAです。よろしくお願いします。

A 回答 (4件)

Dir関数を使ってはいかがでしょう?



MsgBox fname & vbCrLf & Dir(fname)
    • good
    • 1

こんばんは。



>ファイルパスを取得する変数しか取得できません。

FileDialog で、どうやって使っているのか書かれていませんので、こちらが考えなくてはならないわけですが、msoFileDialogFolderPicker を使っているからだと思います。

>ファイルのファイル名のみを取得する

というのは、たとえば、こんな風にすればよいのでは?

Sub Test1()
  Dim fn As Variant
  Dim i As Integer
  With Application.FileDialog(msoFileDialogOpen)
    .FilterIndex = 2 'EXCEL
    i = .Show
    If i = -1 Then
    For Each fn In .SelectedItems
      MsgBox Mid$(fn, InStrRev(fn, "\") + 1)
    Next fn
    End If
  End With
End Sub
    • good
    • 1

#1です。


>MsgBox fname & vbCrLf & Dir(fname)

あふぉな回答でした。
自分のPC内で「FileDialog 」で検索して見つかった
コードをnikogooさんのコードと勘違いして、その
コードに付加するものだけをアップしてました。

ちなみに、nikogooさんのコードと勘違いしたものは
Dim fname As String
fname = Application.GetOpenFilename("エクセルファイル, *.xls")
です。
失礼しました。
    • good
    • 0

Function FolderPath2() As String


'2002以降で動作します

With Application.FileDialog(msoFileDialogFilePicker)

If .Show = -1 Then 'アクションボタンがクリックされた
FolderPath2 = .SelectedItems(1)
Else 'キャンセルボタンがクリックされた
FolderPath2 = ""
End If
End With

End Function

Sub test01()
x = FolderPath2()
MsgBox x
p = InStrRev(x, "\")
MsgBox Mid(x, p + 1, Len(x) - p)
End Sub
functionの部分は
http://www.k1simplify.com/vba/tipsleaf/leaf260.h …
などWEB照会すれば出てくる。
MsgBox Mid(x, p + 1, Len(x) - p)
の右の方で、選択されたファイル名が取れた。
エクセル2002VBAでテスト済み。
    • good
    • 1

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A