[[20191008171428]] 『UserFormで参照したパスのファイルが見つからない』(vbkka) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『UserFormで参照したパスのファイルが見つからないエラー』(vbkka)

始めて投稿します。VBA初心者です。

過去にVBAで作成されたマクロ集計ツールの改修タスクを請け負ったのですが、
改修が上手くいかず、アドバイスいただければ幸いです。

マクロの処理全体像は以下の流れで、
処理3の前に新たに2つ処理を追加したいのですが、処理aの実行時に
「実行時エラー'1004' 申し訳ありません。ファイル名が見つかりません。」と表示されて処理が成立しません。

●処理の全体像
1.エクセル上の実行ボタンを押す
2.UserFormが立ち上がり、「選択」ボタンを押して集計対象データが格納されたフォルダを選択する
3.集計処理実行
4.集計結果を所定のシートに出力する
5.終了

●新たに追加したい処理
a.2で参照したフォルダに含まれる一つのcsvファイルをマクロ実行ファイル内にシート追加する
b.追加したシートを参照して集計処理を行い、結果を所定のシートに出力する

記述したVBAは以下です。
中断にある'ブックを開くで処理がエラーとなってしまいます。
ご確認いただければ幸いです。

どうぞよろしくお願いいたします。

Private Sub CommandButton1_Click()

    '画面表示高速化
    Application.ScreenUpdating = False
    '警告画面非表示
    Application.DisplayAlerts = False

    '変数一覧

    '目的のファイルが格納されているフォルダパスを取得する変数
    Dim PathName As String

    'アラート文言
    Dim cnsTitle As String
    cnsTitle = "フォルダ内のファイル名一覧取得"

    'ファイルのパス
    Dim TempFile As String

    'クリックログを検索するときに使用
    Dim ClicklogFile As String
    ClicklogFile = "\linklog_*.csv"

    '以下処理開始
    '※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

    'フォルダを選択し、パスを取得する
    PathName = GetTargetpath()

    'フォルダが選択されていない場合終了
    If PathName = "集計対象フォルダが選択されていません" Then
        MsgBox (PathName)
        GoTo FinishTools
    End If

    ' フォルダの存在確認
    If Dir(PathName, vbDirectory) = "" Then
        MsgBox "指定のフォルダは存在しません。", vbExclamation, cnsTitle
        GoTo FinishTools
    End If

    'テキストボックスにフォルダのパスを表示
    Label2.Caption = "集計対象フォルダ : " & vbCrLf & PathName

   'Toolsのファイル取り込み&配列取得処理の前にlinklogシート作成処理を追加する
   'linklogシートを作成する
    Set NewWorkSheet = Worksheets.Add()
    NewWorkSheet.Name = "linklog"

    '"linklog_*.csv"を取込む
    'dataBookを定義する
    Dim dataBook As Workbook

    'ブックを開く
  'Pathとファイル名を指定すると処理が成立した        
    'Set dataBook = Workbooks.Open("C:\Users\TaroYamada\Desktop\LOG\linklog_123456789")
  '変数を使って処理するとエラーとなる
  'エラー内容:実行時エラー'1004' 申し訳ありません。ファイル名が見つかりません。名前が変更されたか、移動や削除が行われた可能性があります。
    TempFile = Dir(PathName & ClicklogFile, vbNormal)
    Set dataBook = Workbooks.Open(TempFile)

    '開いたブックのデータをコピー
    dataBook.Worksheets(1).Range("A1").CurrentRegion.Copy

    'マクロを記述したブックに貼り付け
    ThisWorkbook.Worksheets("linklog").Range("A1").PasteSpecial xlPasteAll

    '閉じる
    dataBook.Close


'別Moduleに記述してある関数
Function GetTargetpath()
    'フォルダのパスを取得する関数
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = True Then
            GetTargetpath = .SelectedItems(1)
        Else
            'テキストボックスにフォルダのパスを表示
            GetTargetpath = "集計対象フォルダが選択されていません"
        End If
    End With

End Function

< 使用 Excel:Excel2010、使用 OS:Windows10 >


 Dir関数で取得できるのは、ファイル名だけです。
 パスは含まれません。

 >TempFile = Dir(PathName & ClicklogFile, vbNormal)

 の下に、
 Msgbox TempFile
 でも入れてやれば、自分で確認できるかと・・・。
(BJ) 2019/10/08(火) 18:04

BJさん

早速のコメントありがとうございます。
確かにファイル名しか取得できていませんでした。

UserFormで選択したフォルダを参照して、その中にあるファイルを取得する場合、
どのように記述すればよいのでしょうか。

不勉強で恐縮です。
(vbkka) 2019/10/08(火) 18:17


DirするときにPathNameを付けているのだから、ファイルを開くときも同じ変数を利用するだけですよ。
    Msgbox PathName & "\" & TempFile
(???) 2019/10/09(水) 10:42

???さん

ありがとうございます!

試行錯誤している中で、& "\"を記述していませんでした。
おかげで関門を突破することができました。

これで改修を完遂することができそうです。

本当にありがとうございました。
(vbkka) 2019/10/09(水) 11:24


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.