|
▼すず さん:
こんばんは〜
>そして、新たに問題が2点出てきてしまいました。
>
>●問題点1
>こちらで質問させていただいた日報のブック名を確認
>したところ、日付の部分が単純に「101206」のようなyymmdd形式になって
>いるものと、「2010-12-06」のように「-」で区切られている2パターンがありました。
>●問題点2
>日報が保存されているフォルダが2つありました。
>たとえば、フォルダAには「101206」のつく日報があり、フォルダBには「2010-12-06」のつく日報があるという具合になります。
>その場合、mypathの部分をどのように変更すればよろしいでしょうか
まず
>●問題点2
のために、myPathに セミコロン(;)で区切って複数のパス名を
記入するように 変更してみてください。
↓
myPath = "\\サーバ名\フォルダ名\;\\サーバ名\フォルダ名2\" '◆要変更
>●問題点1
については、InputBoxでの入力は これまでどおり yymmdd 形式で
入れておいてください。たとえば 「101120」と入力しますと、
プログラムのほうで、
*101120*.xls
と
*2010-11-20*.xls
と2種類の検索ファイル名を作成します。
で、プログラム内で これらを組み合わせて 計4種類の検索パターンを
作成し、これをDIRコマンドのパラメータにしています。
こんな風にです↓
DIR "\\サーバ名\フォルダ名\*101120*.xls" _
"\\サーバ名\フォルダ名\*2010-11-20*.xls" _
"\\サーバ名\フォルダ名2\*101120*.xls" _
"\\サーバ名\フォルダ名2\*2010-11-20*.xls" _
/b/s > "C:\Users\kanabun\AppData\Local\Temp\Dir.tmp"
上記変更点について修正したものを以下に示しますので、
新規モジュールに 下記をコピペしてテストしてみてください。
'---------------------------------------------- 標準モジュール2
Option Explicit
Sub ファイル取得ボタン_Click()
Dim myPath As String
myPath = "\\サーバ名\フォルダ名\;\\サーバ名\フォルダ名2\" '◆要変更
Dim Filename As String
Dim i As Long
Dim FoundFiles() As String
Filename = InputBox$("yymmdd形式でファイル名を指定", "ファイルの取得")
If StrPtr(Filename) = 0& Then Exit Sub
If Not (Filename Like "######") Then Exit Sub
Filename = "*" & Filename & "*.xls;*20" _
& Format$(Filename, "##-##-##") & "*.xls"
''検索パスとファイルパターンを指定してファイル検索
FoundFiles = GetFile(myPath, Filename)
If UBound(FoundFiles) < 0 Then
MsgBox "該当ファイルが見つかりません"
Exit Sub
End If
Dim WB0 As Workbook
Set WB0 = Workbooks("コピー先Book.xls")'あらかじめ開いておく◆要変更
Dim WB As Workbook
Dim ws As Worksheet
'--- ↓確認用
For i = 0 To UBound(FoundFiles) - 1
Debug.Print FoundFiles(i)
Next
'--- Open抽出 実行
For i = 0 To UBound(FoundFiles) - 1
Set WB = Workbooks.Open(FoundFiles(i))
For Each ws In WB.Worksheets
Select Case ws.Name
Case "東京", "大阪", "名古屋"
このシートより転記 ws, WB0
End Select
Next
WB.Close False
Set WB = Nothing
Next
Set WB0 = Nothing
MsgBox "転記終了!"
End Sub
Private Sub このシートより転記( _
ByVal ws As Worksheet, _
ByVal WB0 As Workbook)
Dim ws0 As Worksheet
Set ws0 = WB0.Worksheets(ws.Name)
Dim r As Range
With ws
Set r = .Range("A1", .Cells(.Rows.Count, 1).End(xlUp))
Set r = r.Resize(r.Rows.Count - 1, 3)
End With
r.Copy ws0.Range("D1")
End Sub
'サブフォルダを含むファイルの検索(ファイルリストを返す)
Private Function GetFile(myPath As String, _
Filename As String) As String()
Dim myPaths, Filenames
Dim tmpPath As String
Dim sCmd As String
Dim i&, j&, ko As Long
tmpPath = Environ$("Temp") & "\Dir.tmp"
myPaths = Split(myPath, ";")
Filenames = Split(Filename, ";")
For i = 0 To UBound(myPaths)
If Right$(myPaths(i), 1) <> "\" Then
myPaths(i) = myPaths(i) & "\"
End If
For j = 0 To UBound(Filenames)
sCmd = sCmd & " """ & myPaths(i) & Filenames(j) & """ "
Next
Next
sCmd = "DIR " & sCmd & "/b/s > """ & tmpPath & """"
'Debug.Print sCmd
With CreateObject("WScript.Shell")
ko = .Run("CMD /C " & sCmd, 7, True) 'Dirコマンド実行
End With
Dim io As Integer
Dim buf() As Byte
io = FreeFile()
Open tmpPath For Binary As io '出力ファイルリスト取得
ReDim buf(1 To LOF(io))
Get #io, , buf
Close io
Kill tmpPath
GetFile = Split(StrConv(buf, vbUnicode), vbCrLf)
End Function
|
|