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

締切り済みの質問

Visual Basic Editorの実行時エラーのことについて教えてください。 

Visual Basic超初心者ですがよろしくお願いします。
標準モジュールで入力したものを実行すると、必ず「実行時エラー "53": ファイルが見つかりません。」と表示してしまいます。
入力したものはミスはないと思うのですが、何回やってもエラーが出てしまいます。
わかる方いましたら教えてください。
入力したものを一応載せときます↓
Sub list_file()
Dim numfile As Long
Dim i As Long
With Application.FileSearch
.NewSearch
.LookIn = Range("b1").Value
.Filename = Range("b2").Value
.SearchSubFolders = Range("b3").Value

If .Execute() > 0 Then
file_count = .FoundFiles.Count
MsgBox file_count & "files exis"
Worksheets.Add after:=Worksheets("sheet1")
Range("a1").Value = "filename"
Range("b1").Value = "date"
Range("c1").Value = "size"
For i = 1 To file_count
Cells(i + 1, 1).Value = .FoundFiles(i)
Cells(i + 1, 2).Value = FileDateTime(.FoundFiles(i))
Cells(i + 1, 3).Value = FileLen(.FoundFiles(i))
Cells(i + 1, 2).Value = Hex(Cells(i + 1, 3).Value)
Next
Columns("a:c").AutoFit
Else
MsgBox "no file exists"
End If
End With
End Sub

投稿日時 - 2007-11-11 01:26:30

QNo.3507515

すぐに回答ほしいです

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

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

回答(2)

Cells(i + 1, 2).Value = FileDateTime(.FoundFiles(i))でエラーになると言うことは、.Execute()の時点ではあるけど、Cells(i + 1, 2).Value = FileDateTime(.FoundFiles(i))の時には無いと言う事でしょうから、以下のようにしてはどうでしょう。
または、on error で飛ばす方法もあります。

Sub list_file()
Dim numfile As Long
Dim i As Long
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
With Application.FileSearch
.NewSearch
Sheets("sheet1").Select
.LookIn = Range("b1").Value
.Filename = Range("b2").Value
.SearchSubFolders = Range("b3").Value

If .Execute() > 0 Then
file_count = .FoundFiles.Count
MsgBox file_count & "files exis"
Worksheets.Add after:=Worksheets("sheet1")
Range("a1").Value = "filename"
Range("b1").Value = "date"
Range("c1").Value = "size"
For i = 1 To file_count
Cells(i + 1, 1).Value = .FoundFiles(i)
If fso.FileExists(.FoundFiles(i)) = True Then
Cells(i + 1, 2).Value = FileDateTime(.FoundFiles(i))
Cells(i + 1, 3).Value = FileLen(.FoundFiles(i))
Cells(i + 1, 4).Value = Hex(Cells(i + 1, 3).Value)
Else
Cells(i + 1, 5).Value = "削除されています"
End If
Next
Columns("a:c").AutoFit
Else
MsgBox "no file exists"
End If
End With
Set fso = Nothing
End Sub

p.s.
office2007ではFileSearchが無くなっているらしいです。
http://support.microsoft.com/kb/935402/ja
これからは、Dir 関数または FileSystemObjectを使った方がいいかもしれません。

投稿日時 - 2007-11-11 17:45:36

検索条件を取得するsheetが不安定なんじゃないでしょうか?
検索条件がsheet1にある場合なら、最初にcellの値を取得する.LookIn = Range("b1").Valueの前に
Sheets("sheet1").Select
を入れてみてください。

複数のsheetや標準モジュールからcellを扱う場合は、現在のシートがどこだか指定する必要があります。
後半部もWorksheets.Addの後に書き込んでるから指定無しで動いてますが、途中で他のsheetの作業をしたりすると思わぬ不具合がおこったりしますよ。

投稿日時 - 2007-11-11 09:53:50

補足

回答ありがとうございます。
LookIn = Range("b1").Valueの前にSheets("sheet1").Selectを入れてみたんですが、やっぱり実行時エラーになってしまいます。

同じ課題をやっている友達は一発で実行できたんですが、僕のパソコンでは、友達と同じやり方でやっているのにもかかわらずできません。

補足で、エラーでいつも黄色く表示される場所はCells(i + 1, 2).Value = FileDateTime(.FoundFiles(i))です。
excelではsheet1に、b1にc:\ b2に*.txt b3に入力規則の設定で、入力値の種類リスト、元の値TRUE,FALSE を設定して、ボタン表示のTRUEを選んで実行してます。

なにかわかりましたらお願いします。

投稿日時 - 2007-11-11 14:53:42

あなたにオススメの質問