質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

4回答

5155閲覧

VBA フルパス、ファイル名制限

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2018/06/26 03:27

編集2018/07/02 00:17

ファイルを開くダイアログにて
ファイルを選択してリストボックスに表示させる際に、特定のファイルだけ
「【実行時エラー53】そのようなファイルはありません」
が出て来ました。
デバッグした際に
Filename = Dir(Target)
でエラーが出ていることがわかりました。
Dir関数の制限でファイルのフルパスが長すぎてエラーがでているようなのですが(おそらく)
どうにかこのエラーを解決してファイルをリストボックスに表示させる方法はありますか?
ちなみにファイルはありませんと出ていますが
ちゃんと存在しています。
よろしくお願い致します

VBA

1Private Sub btn_FileOpen_Click() 2 Dim OpenFileName As Variant, Target As Variant 3 'カレントディレクトリを指定 4 ChDrive "C" 5 ChDir "C:\test" 6 OpenFileName = Application.GetOpenFilename(FileFilter:="Microsoft Excelブック,*.xls?", _ 7 MultiSelect:=True) 8 If IsArray(OpenFileName) Then 9 With Me.BookInput 10 11'リストボックスにファイル名を表示 12 For Each Target In OpenFileName 13 Filename = Dir(Target) 14 Pathname = Replace(Target, Filename, "") 15 .AddItem "" 16 .List(BookInput.ListCount - 1, 0) = Filename 17 .List(BookInput.ListCount - 1, 1) = Pathname 18 Next Target 19 'ファイルのあるフォルダーのパスをラベルに表示 20 Me.lblPath.Caption = .List(0, 1) 21 22 End With 23 Else 24 MsgBox "キャンセルされました" 25 End If 26End Sub 27Private Sub btn_FilePrint_Click() 28 Dim wb As Variant 29 Dim Fn As Variant, i As Long 30 31 With Me.BookInput 32 For i = 0 To .ListCount - 1 33 Set wb = Workbooks.Open(.List(i,1) & .List(i,0),ReadOnly:=True) 34 wb.PrintOut 'ブック全体を印刷 35 wb.Close 36 Next 37 End with 38Application.ScreenUpdateing = True 39End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ファイルの名前が長過ぎる等でエラーが返却されているものと思われます。

FileSystemObjectオブジェクトを使われてはどうですか。
FileSystemObjectオブジェクト - FileExistsメソッド

投稿2018/06/26 03:43

sazi

総合スコア25195

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自力で分解すればよろしいかと。

VBA

1Filename = Mid(Target, InStrRev(Target, "\") + 1)

ただし本当にエラーの原因がこれなら、ってことですが。

投稿2018/06/26 04:15

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/06/26 04:29 編集

ttyp03さん〉 回答ありがとうございます Filename = Mid(Target, InStrRev(Target, "\") + 1) を試したさいにエラーはなくなりました。
guest

0

ベストアンサー

Dir関数の制限でファイルのフルパスが長すぎてエラーがでているようなのですが(おそらく)

.AddItem Mid(Target,InstrRev(Target,"")+1)

とすればいいでしょう。

もちろん FileSystemObject の GetFileNameメソッドを使ってもいいですが。
Office TANAKA - Excel VBA FileSystemObject[GetFileNameメソッド]


ちなみに、
提示のコードは
VBA - VBAで複数のExcelファイルを印刷するマクロについて(131198)|teratail
での私の回答のコードとまったく同じですが、FRIXIONさんと同一人物ですか?

もしそうなら、下記でツリービューを使ってサブフォルダーも含む複数ファイルを選択できるサンプルのコードを提示してますが、それはチェックしてますか。

VBA - VBA フォームにウィンドウズ エクスプローラ(132232)|teratail

投稿2018/06/26 04:07

hatena19

総合スコア33715

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/06/26 04:17

hatena19さん〉 回答ありがとうございます .AddItem Mid(Target,InstrRev(Target,"\")+1) で試してできました。 FileSystemObject の GetFileNameメソッドも試してみます。 端末が違いますが 同一人物です。 すみませんまだ確認してないです これからツリービューを使ったファイルの選択方法を学習してみます。
guest

0

ファイル名を取るだけなら、ShortPathにしてはいかがでしょう。

参考:VBAで長いパスが扱えないと思ったら

投稿2018/06/26 03:59

編集2018/06/26 04:02
ladybird

総合スコア163

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2018/06/26 04:05

カレントディレクトリは"C:\test"となっていますから、パスの問題では無いかと。
ladybird

2018/06/26 05:44 編集

あ、たしかに。長いのはファイル名の可能性が高いですね
sazi

2018/06/26 04:48

解決したのは、パスをカットして解決したみたいですね。 失礼しました。
ladybird

2018/06/26 05:52

いえいえ。調べ直すきっかけとなり勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問