Excel VBA質問箱 IV

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

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


3763 / 13645 ツリー ←次へ | 前へ→

【60303】ファイルを検索しシートに書くには にしもり 09/2/9(月) 11:08 質問[未読]
【60304】Re:ファイルを検索しシートに書くには neptune 09/2/9(月) 11:33 発言[未読]
【60306】Re:ファイルを検索しシートに書くには にぃ 09/2/9(月) 11:49 発言[未読]
【60308】Re:ファイルを検索しシートに書くには にしもり 09/2/9(月) 12:42 質問[未読]
【60309】Re:ファイルを検索しシートに書くには neptune 09/2/9(月) 13:06 回答[未読]
【60310】Re:ファイルを検索しシートに書くには にしもり 09/2/9(月) 13:09 質問[未読]
【60311】Re:ファイルを検索しシートに書くには neptune 09/2/9(月) 14:10 回答[未読]
【60313】Re:ファイルを検索しシートに書くには にぃ 09/2/9(月) 14:34 発言[未読]
【60318】Re:ファイルを検索しシートに書くには にしもり 09/2/9(月) 18:15 お礼[未読]

【60303】ファイルを検索しシートに書くには
質問  にしもり  - 09/2/9(月) 11:08 -

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

_cosmos_allというフォルダに多くある、COSMOSという文字を含むファイルを
シート"ファイル一覧"に書き出そうとおもっています。
が、<==ここでerr という箇所で止まってしまいます。
どこが悪いでしょうか?
正直、教本のつぎはぎです。
宜しくお願いします。

'指定フォルダ内でサブフォルダも含めて指定した名前含むファイルを検索しファイル名を取得してシートに書く

Sub Test()
 
  シート名 = "ファイル一覧"
  親フォルダへのパス = "C:\_cosmos_all"
  検索するファイル名 = "*COSMOS*" & ".*"
  With Application.FileSearch
    .NewSearch               '検索条件をリセット
    .LookIn = 親フォルダへのパス      '検索対象のフォルダ名
    .Filename = 検索するファイル名     '検索するファイルの名前
    .SearchSubFolders = True        'サブフォルダも含める
    .Execute                '検索を開始する
    For Each 各ファイルのフルパス In .FoundFiles
    
'     MsgBox 各ファイルのフルパス

    パス = ドライブ & ":\" & フォルダ & "\"
    ファイル名 = Dir(パス & 検索するファイル名)   '指定された名前含むファイル名を取得 <==ここでerr
        
      Worksheets(シート名).Activate
      Cells.Clear
  
      貼付行 = 0                 '貼付行カウンタ
      Do While ファイル名 <> ""          '取り出したファイル名が""でなければ
      貼付行 = 貼付行 + 1
      Cells(貼付行, 1).Value = 各ファイルのフルパス   'セルにファイル名をセット
      各ファイルのフルパス = Dir()
      
      Loop
    Next
  End With
End Sub

【60304】Re:ファイルを検索しシートに書くには
発言  neptune  - 09/2/9(月) 11:33 -

引用なし
パスワード
   ▼にしもり さん:
こんにちは

>正直、教本のつぎはぎです。
なら、理解しながらデバッグしましょう。

>
>    パス = ドライブ & ":\" & フォルダ & "\"
debug.print パス
を追加して、希望の文字列が取得できているかどうか確認

#もしかして、FileSearchが検索ハンドルをつかんでいて、Dirがうまく
働かないのかも???これは、検証なし、自信なしの、もしかしたらです。。

【60306】Re:ファイルを検索しシートに書くには
発言  にぃ  - 09/2/9(月) 11:49 -

引用なし
パスワード
   ▼にしもり さん:
こんにちは!

>ファイル名 = Dir(パス & 検索するファイル名)   '指定された名前含むファイル名を取得 <==ここでerr
で、どのようなエラーメッセージが出ます?

あとは、変数宣言をしっかりしてあげたほうがいいです。
>パス = ドライブ & ":\" & フォルダ & "\"
の「ドライブ」や「フォルダ」などの変数宣言です。

また、
>With Application.FileSearch

>ファイル名 = Dir(パス & 検索するファイル名)
のDir()で2種類のファイル名検索を使っていますが、
片方だけで出来るような気もします。

【60308】Re:ファイルを検索しシートに書くには
質問  にしもり  - 09/2/9(月) 12:42 -

引用なし
パスワード
   ▼neptuneさん、 にぃ さん:
ありがとうございます。

にぃ さん:

どんなエラーかというと「実行時エラー52 ファイル名または番号が不正です」です。

neptuneさん:
    パス = ドライブ & ":\" & フォルダ & "\"
    Debug.Print パス '<==これがどういう意味かわかっていません。印刷される?のですか
    ファイル名 = Dir(パス & 拡張子) 

宜しくお願いします。

【60309】Re:ファイルを検索しシートに書くには
回答  neptune  - 09/2/9(月) 13:06 -

引用なし
パスワード
   ▼にしもり さん:
こんにちは

>neptuneさん:
>    パス = ドライブ & ":\" & フォルダ & "\"
>    Debug.Print パス '<==これがどういう意味かわかっていません。印刷される?のですか
イミディエイトウィンドウに出力されます。
エラーメッセージから見て、余計、変数パスの内容を調べる必要を感じます。

イミディエイトウィンドウが判らないってのはなしね。自分で調べられますから。

【60310】Re:ファイルを検索しシートに書くには
質問  にしもり  - 09/2/9(月) 13:09 -

引用なし
パスワード
   ▼neptune さん:
ファイル名 = Dir(パス & 検索するファイル名) を
ファイル名 = Dir(検索するファイル名)にしたら実行時エラーはでなくなりました。

が、シートには何も書き出されません。
書き出されるできものは確かにあるのですが。。。 

イミディトウィンドウ理解しました。
イミディトウィンドウには、

:\\
:\\
:\\
:\\


とだけ表示されています。
ファイルが見つかっていないとうことですか

【60311】Re:ファイルを検索しシートに書くには
回答  neptune  - 09/2/9(月) 14:10 -

引用なし
パスワード
   ▼にしもり さん:
現在どう書いているか知りませんが、

    パス = ドライブ & ":\" & フォルダ & "\"
    Debug.Print パス 
と書いていれば、変数「パス」の内容が出力されます。

:\\
と出力されるのであれば、
変数「ドライブ 」、「フォルダ 」
の内容が、共に""(文字数0の文字列)という事です。
・・・・何も入力されていないという事。

原因は、自分で調べてみて下さい。それがデバッグという作業で
本来、他人に頼む性質のものではありません。
なぜならば、書いた本人が何をやっているか一番良く知っているからです。

やってみてわからなければ、どういう確認作業を行ったかを記して
質問しましょう。

【60313】Re:ファイルを検索しシートに書くには
発言  にぃ  - 09/2/9(月) 14:34 -

引用なし
パスワード
   ▼にしもり さん:
こんにちは!

私からも少し。

>    パス = ドライブ & ":\" & フォルダ & "\"
ここのコード以外「ドライブ」と「フォルダ」というのが使われていませんね。
ドライブ = "C:"(こちらは例です)
というコードもないのでもちろん「ドライブ」という変数は「""」が格納
されています。文字なしですね。

最初にもいいましたが、変数宣言を行わないとこういったエラーが
出てきてしまうと思います。
変数宣言がわからなければ調べてほしいです。
例だけみせればこんな感じです。

Const シート名 As String = "ファイル一覧"
Dim ファイル名 As String


今回、色々問題がありそうですが、コードを見た感じこのようなことが
したいのではないかと思い編集してみました。
コードの中にはファイル検索をする「FileSearch」と「Dir」の2種類が
あったので2つに分けました。
どちらもMsgboxに表示されるテストコードです。

Sub test1() 'FileSearchの方法

  Const シート名 As String = "ファイル一覧"
  Const 親フォルダへのパス As String = "C:\_cosmos_all"
  Const 検索するファイル名 As String = "*COSMOS*" & ".*"
  
  Dim 各ファイルのフルパス
  Dim 貼付行 As Long
  
  With Application.FileSearch
    .NewSearch               '検索条件をリセット
    .LookIn = 親フォルダへのパス      '検索対象のフォルダ名
    .Filename = 検索するファイル名     '検索するファイルの名前
    .SearchSubFolders = True        'サブフォルダも含める
    .Execute                '検索を開始する
    
    For Each 各ファイルのフルパス In .FoundFiles
      MsgBox 各ファイルのフルパス
    Next
  End With

End Sub

Sub Test2() 'Dir()の方法

  Const シート名 As String = "ファイル一覧"
  Const 親フォルダへのパス As String = "C:\_cosmos_all"
  Const 検索するファイル名 As String = "*COSMOS*" & ".*"
  Dim ファイル名 As String
  Dim 貼付行 As Long

  ファイル名 = Dir(親フォルダへのパス & "\" & 検索するファイル名)  '指定された名前含むファイル名を取得 <==ここでerr
  
  Worksheets(シート名).Activate
  Cells.Clear
 
  貼付行 = 0                 '貼付行カウンタ
      
  Do While ファイル名 <> ""          '取り出したファイル名が""でなければ
    MsgBox 親フォルダへのパス & "\" & ファイル名
    ファイル名 = Dir()
  Loop

End Sub


これで動作しましたら、「変数の宣言」「ファイルの検索方法」について
調べてみるといいかと思います。


長々と書き、また色々と言いたいこと言ってしまい失礼しました。

【60318】Re:ファイルを検索しシートに書くには
お礼  にしもり  - 09/2/9(月) 18:15 -

引用なし
パスワード
   ▼neptuneさん、にぃ さん:
>原因は、自分で調べてみて下さい。それがデバッグという作業で
>本来、他人に頼む性質のものではありません。

仰るとおりとおもいます。
ここまで御教えいただいたので後は自力やってみます。
どうもありがとうございました。 

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