Excel VBA質問箱 IV

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

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


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

【69436】ファイル名書き出し にしもり 11/7/11(月) 12:39 質問[未読]
【69437】Re:ファイル名書き出し にしもり 11/7/11(月) 12:59 質問[未読]
【69439】Re:ファイル名書き出し ichinose@食事中 11/7/11(月) 13:25 発言[未読]
【69438】Re:ファイル名書き出し UO3 11/7/11(月) 13:09 発言[未読]
【69440】Re:ファイル名書き出し UO3 11/7/11(月) 17:43 発言[未読]
【69445】Re:ファイル名書き出し にしもり 11/7/12(火) 11:28 お礼[未読]

【69436】ファイル名書き出し
質問  にしもり  - 11/7/11(月) 12:39 -

引用なし
パスワード
   こんにちは。
c\AAA\にある、文字列Trainingを含むファイルを書き出したいです。
ところが、型が不一致、とでます。
どこがわるいでしょうか。
ご教示ください。


Sub Test2() 'Dir()の方法

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

  ファイル名 = Dir(親フォルダへのパス & "\" & 検索するファイル名)  '指定された名前含むファイル名を取得
 
  Worksheets("ファイル一覧").Activate
  Cells.Clear

  貼付行 = 1                 '貼付行カウンタ
   
  Do While ファイル名 <> ""          '取り出したファイル名が""でなければ
'    MsgBox 親フォルダへのパス & "\" & ファイル名
    ファイル名 = Dir()
    Worksheets("ファイル一覧").Cells("A", 貼付行) = ファイル名'<=ここでErr
  
  貼付行 = 貼付行 + 1
  Loop


End Sub

【69437】Re:ファイル名書き出し
質問  にしもり  - 11/7/11(月) 12:59 -

引用なし
パスワード
   すみません、おききしたいことはまだありました。

Training*は C:内ですが、\AAA直下のみではなく
C:\AAA\BBB直下にも、
C:\AAA\BBB\CCC直下にも、
C:\AAA\BBB\CCC\DDD直下にも、
というふうにたくさんあります。
困っているのは、フォルダー名に規則性がないことです。
ひとつのこらず調べるほうほうはあるでしょうか。

また、ほしいのはフルバスとファイル名だけでなく、みつかったファイルの作成年月日もです。

よいほうほうがありましたらご教示何とぞ宜しくお願いします。

【69438】Re:ファイル名書き出し
発言  UO3  - 11/7/11(月) 13:09 -

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

コードはよく読んでいませんが、DIR処理の基本構造からいうと

>ファイル名 = Dir()
>Worksheets("ファイル一覧").Cells("A", 貼付行) = ファイル名'<=ここでErr

この2行の順番が逆ですね。
取得したファイル名を処理してから、次の ファイル名 = Dir() を。

追加質問の件、親フォルダ内の全ての階層の子フォルダ、孫フォルダも検索対象にするには
DIR関数ではなく、
・処理時間が少しかかってもいいなら、わかりやすいFSO方式。
・ファイル数などから、処理時間に問題がでるならDIRコマンドやAPI(W)なんかを。

【69439】Re:ファイル名書き出し
発言  ichinose@食事中  - 11/7/11(月) 13:25 -

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

www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=13218;id=excel

↑ここに似たような御質問がありました。
Filesearch、FSO、Dir関数でありますから、
参考にして下さい。

【69440】Re:ファイル名書き出し
発言  UO3  - 11/7/11(月) 17:43 -

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

DIRを記述する場所については申し上げたとおりですが、コードをよくよく読んでみましたら
エラーの直接の原因がわかりましたよ。

>Worksheets("ファイル一覧").Cells("A", 貼付行)

Cellsで記述するなら Cells(貼付行,"A")
Rangeで記述するなら Range("A" & 貼付行)

また、いずれの場合のプロパティは明示することをお奨めします。

Cells(貼付行,"A").Value あるいは Range("A" & 貼付行).Value

ついでに、FSOを使ったコード例を。
A列にフォルダパス、B列にファイル名、C列に作成日、時刻を記載します。

Sub FSOSample()
  Dim fso As Object
  Dim sh As Worksheet
  Dim myLine As Long

  Set fso = CreateObject("Scripting.FileSystemObject")
  Set sh = Worksheets("ファイル一覧")
  sh.Cells.ClearContents
  myLine = 0
  Call getFiles(fso.getfolder("C:\AAA"), sh, myLine)
  
  Set fso = Nothing
  Set sh = Nothing
  
End Sub

Private Sub getFiles(myfolder As Object, sh As Worksheet, myLine As Long)
  Dim myFile As Object
  Dim folder As Object
  Dim myWord As String
  
  myWord = "*Trainning*"

  For Each myFile In myfolder.Files
    If myFile.Name Like myWord Then
      myLine = myLine + 1
      sh.Cells(myLine, "A").Value = myFile.parentfolder.Path
      sh.Cells(myLine, "B").Value = myFile.Name
      sh.Cells(myLine, "C").Value = myFile.datecreated
    End If
  Next
  
  For Each folder In myfolder.subfolders
    Call getFiles(folder, sh, myLine)
  Next
  
End Sub

【69445】Re:ファイル名書き出し
お礼  にしもり  - 11/7/12(火) 11:28 -

引用なし
パスワード
   ▼UO3 さん:
ありがとうございます。
お陰様で期するものを作ることができました。

Cells以降の書き方が間違っていることは投稿後に気づきました。
基礎ができていないのですみません。
プロパティも書くようにします。
作成日はdatecreatedで取得できるのですね。
参考書も使っていますがこういうときうまく逆引きができません。。
深く感謝申し上げます。

またichinoseさんにも深く感謝いたします。
ありがとうございました。

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