- ベストアンサー
(Excel)VBA ファイルパスからファイル名を求める
Excel97のVBAで f-name = Application.GetOpenFilename() とするとf-nameにはオープンしたファイルのパスを含めたファイル名が代入されます。 これをそのまま Workbooks(f-name).close とすると、パス部分が余分なのかエラーになります。 そこで、このf-nameからファイル名(ブック名)だけ切り出す方法があれば教えてください。 もしくはこのオープンからクローズまでの流れとして良いやり方があれば教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
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
その他の回答 (2)
- wtnb_h
- ベストアンサー率35% (14/40)
EXCEL2000でですが、GetOpenFilenameの後に、 Dim ファイル名 As String ファイル名 = Dir(CurDir() & "\*.*") とすると、選んだファイル名のみ、ファイル名に格納されました。 EXCEL97で出来るか判りませんが、試してみてはいかがでしょうか?
お礼
回答ありがとうございます。 残念ながらExcel97ではうまく行きませんでした。 でもなんとなくDir()とCurDir()の組み合わせでGetOpenFilename()の選択ファイルが認識できるとは思えないんですが......
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。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
お礼
回答ありがとうございます。 残念ながらInStrRev()がundefineになってしまします。 私の環境がおかしいか、Excel97にはないのかもしれませんね。
お礼
回答ありがとうございます。 ばっちり動きました。 元々UNIX屋なので(マクロの様に用意されていて)もっと簡単にできるかと思っていました。