Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


11009 / 13644 ツリー ←次へ | 前へ→

【18677】ファイルの存在チェック Qs 04/10/5(火) 15:26 質問[未読]
【18678】Re:ファイルの存在チェック Asaki 04/10/5(火) 15:31 回答[未読]
【18679】Re:ファイルの存在チェック Qs 04/10/5(火) 15:36 お礼[未読]
【18680】Re:ファイルの存在チェック Qs 04/10/5(火) 15:58 質問[未読]
【18682】Re:ファイルの存在チェック Asaki 04/10/5(火) 16:09 回答[未読]
【18683】Re:ファイルの存在チェック Asaki 04/10/5(火) 16:18 発言[未読]
【18688】Re:ファイルの存在チェック Kein 04/10/5(火) 17:55 回答[未読]
【18691】Re:ファイルの存在チェック ちゃっぴ 04/10/5(火) 20:26 回答[未読]

【18677】ファイルの存在チェック
質問  Qs  - 04/10/5(火) 15:26 -

引用なし
パスワード
   フルパス指定して
そのファイルが存在してるかどうかをチェックしたいのですが・・・。

すみませんが、教えてください。

【18678】Re:ファイルの存在チェック
回答  Asaki  - 04/10/5(火) 15:31 -

引用なし
パスワード
   こんにちは。

Dir()
ではどうでしょうか?
詳しくはヘルプをご覧ください。

【18679】Re:ファイルの存在チェック
お礼  Qs  - 04/10/5(火) 15:36 -

引用なし
パスワード
   ありがとうございました。
シロートですみません。。。

【18680】Re:ファイルの存在チェック
質問  Qs  - 04/10/5(火) 15:58 -

引用なし
パスワード
   ▼Asaki さん:

Filename = Dir(Path & "\*.*", vbNormal)
    
Do While Filename <> ""

  '存在チェック
  rtn = Dir(別のファイルパス)

  Filename = Dir

Loop

こうするとFilename = Dirの位置でこけてしまいます。
何か解決策はありますか?

【18682】Re:ファイルの存在チェック
回答  Asaki  - 04/10/5(火) 16:09 -

引用なし
パスワード
   ↓こんなかんじですかね?
Sub test()

  Dim varRet     As Variant

  varRet = Dir("C:\test\*.*", vbNormal)
  Do Until (varRet = "")
    MsgBox varRet
    varRet = Dir
  Loop

End Sub

【18683】Re:ファイルの存在チェック
発言  Asaki  - 04/10/5(火) 16:18 -

引用なし
パスワード
   >Dim varRet     As Variant

Dim varRet     As String

でよいですね。

【18688】Re:ファイルの存在チェック
回答  Kein  - 04/10/5(火) 17:55 -

引用なし
パスワード
   >Dir(別のファイルパス)
ということから推測すると、それぞれ別のフォルダーにあるファイルなわけですか ?
ならば

Dim FP As Variant
Dim i As Integer

FP = Array("C:\Temp\Test1.txt", "C:\My Documents\Test2.txt", _
"C:\Windows\Test3.txt")
For i = LBound(FP) To UBound(FP)
  If Dir(FP(i)) = "" Then
   MsgBox FP(i) & vbLf & "は存在しません", 48
  End If
Next i

などと、フルパスを配列に入れてループします。

【18691】Re:ファイルの存在チェック
回答  ちゃっぴ  - 04/10/5(火) 20:26 -

引用なし
パスワード
   Dir関数は内部でANSI(S-JIS)処理されるので、(半角1Byte換算で)256Byteを
超えるパスを扱うことができません。
(あともちろんUnicode拡張文字も・・・)

なので、FileSystemObjectを使用してやるとよいでしょう。

Dim objFSO As FileSystemObject

Set objFSO = CreateObject("Screpting.FileSystemObject")

MsgBox objFSO.FileExixts("パス名")

これなら、存在するけどエラーになるといったケースはほとんどなくなります。

Dir関数は上記の問題の他に、存在しないUNCパスを指定したりすると
エラーになりますし、簡単なように見えて扱いが厄介ですよ。

11009 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free