こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

(Excel)VBA ファイルパスからファイル名を求める

Excel97のVBAで
 f-name = Application.GetOpenFilename()
とするとf-nameにはオープンしたファイルのパスを含めたファイル名が代入されます。
これをそのまま
 Workbooks(f-name).close
とすると、パス部分が余分なのかエラーになります。
そこで、このf-nameからファイル名(ブック名)だけ切り出す方法があれば教えてください。
もしくはこのオープンからクローズまでの流れとして良いやり方があれば教えてください。

投稿日時 - 2001-10-01 10:47:42

QNo.143989

困ってます

質問者が選んだベストアンサー

Excel97の場合は、最後の『\』を探しにいく必要があると思います。下記は処理例です。
キャンセルした時のf-nameは別途処理してください。

Public Function myFileName(flName As String)
  Dim L As Integer
  For L = Len(flName) To 1 Step -1
    If Mid(flName, L, 1) = "\" Then
      myFileName = Right(flName, Len(flName) - L)
      Exit For
    End If
  Next
End Function

投稿日時 - 2001-10-01 11:52:48

お礼

回答ありがとうございます。
ばっちり動きました。
元々UNIX屋なので(マクロの様に用意されていて)もっと簡単にできるかと思っていました。

投稿日時 - 2001-10-02 09:36:55

ANo.2

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

EXCEL2000でですが、GetOpenFilenameの後に、
Dim ファイル名 As String
ファイル名 = Dir(CurDir() & "\*.*")
とすると、選んだファイル名のみ、ファイル名に格納されました。

EXCEL97で出来るか判りませんが、試してみてはいかがでしょうか?

投稿日時 - 2001-10-02 08:31:35

お礼

回答ありがとうございます。
残念ながらExcel97ではうまく行きませんでした。
でもなんとなくDir()とCurDir()の組み合わせでGetOpenFilename()の選択ファイルが認識できるとは思えないんですが......

投稿日時 - 2001-10-02 09:39:31

ANo.1

こんにちは。maruru01です。
以下の関数を作成しました。
参考になりますか。
では。

' フルパスからファイル名を取り出す
Public Function MakeFileName(fileName As String) As String

  Dim z0 As Long

  z0 = InStrRev(fileName, "\")
  If z0 <> 0 Then
    MakeFileName = Mid(fileName, z0 + 1)
  Else
    MakeFileName = fileName
  End If

End Function

投稿日時 - 2001-10-01 11:08:53

お礼

回答ありがとうございます。
残念ながらInStrRev()がundefineになってしまします。
私の環境がおかしいか、Excel97にはないのかもしれませんね。

投稿日時 - 2001-10-02 09:34:07

あなたにオススメの質問