実現したいこと
・VBAで子フォルダ内pdfファイル名を格納先親フォルダ名をキーにして、Accessクエリから情報取得しファイル名を変更するツールを作成したいです。
●処理イメージ図
●処理前
●処理後
●フォルダ構成
●ツール一覧フォルダ構成
前提
<Accessとの連携>
共通キー:親フォルダ名=社外購買番号
共通キー(社外購買番号)からファイル名変更の情報を取得し、pdfファイル名を変更
<条件>
※処理イメージ図参照
パターン1
①sample1.pdf⇒②202301-00010_A0001_株式会社山田.pdf⇒③202301-00010_A0001_株式会社山田_00.pdf
①sample1-1.pdf⇒②202301-00010_A0001_株式会社山田.pdf⇒③202301-00010_A0001_株式会社山田_01.pdf
詳細
①⇒②:Accessクエリ
②⇒③:ファイル名語尾をファイル数分カウント表示
パターン2
①202302-00010_B0001_株式会社田中_00.pdf
①sample2.pdf⇒②202302-00010_B0001_株式会社田中.pdf⇒③202302-00010_B0001_株式会社田中_01.pdf
詳細
パターン1の条件に追加して、ファイル名に親フォルダ名(例.B0001)が無いファイルの場合、①⇒②⇒③:Accessクエリ、ファイル名語尾をファイル数分カウント表示
パター3
①sample3.pdf⇒②C0001_株式会社小川.pdf⇒③C0001_株式会社小川_00.pdf
共通
パターンにある通り、ファイル名の語尾をファイル数に応じてカウント名にしたい。
例.2ファイルの場合、_00.pdf、_01.pdf
発生している問題・エラーメッセージ
1.Accessのクエリから取得した情報とフォルダ名を照合し、ファイル名変更のやり方が全く分かりませんでした。
2.1の後から、条件にそって、ファイル名を変更する方法が全く分かりませんでした。
該当のソースコード
VBA
1Sub ファイル名変更() 2Const TargetFld As String = "C:\Users\○○○\Desktop\一時\テスト環境" 'フォルダ作成上位場所 3Dim objFso As Object 4Set objFso = CreateObject("Scripting.FileSystemObject") 5 6Dim objfld As Object 7Dim strFolderPath As String 8 9For Each objfld In Object.GetFolder(Target.Path & "\完了").SubFolders 10 11 12 13 14Next 15 16 17Call Access情報取得 18 19 20 21End Sub 22 23Sub Access情報取得() 24 25 Dim DBpath As String 'Accessファイルのフルパス 26 Dim adoCn As Object 'Accessへの接続用オブジェクト 27 Dim adoRs As Object 'Accessからの取得用オブジェクト 28 Dim strSQL As String 'SQL文 29 Dim myArray As Variant '全レコードを格納する配列 30 Dim tmpFldCnt As Variant 'フィール数 31 Dim tmpRcdCnt As Variant 'レコード数 32 33 'Accessへ接続する 34 Set adoCn = CreateObject("ADODB.Connection") '接続用オブジェクト作成 35 DBpath = "C:\Users\z09071\Desktop\一時\Access情報からファイル名変更" & "\Database.accdb" '接続するファイルのフルパス 36 adoCn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & DBpath & ";" 'Accessファイル(2007~)を開く 37 38 'オブジェクトの設定(取得用) 39 Set adoRs = CreateObject("ADODB.Recordset") 40 adoRs.CursorLocation = 3 ' クライアントサイドカーソルに変更 41 42 'SQL文(全レコード取得) 43 strSQL = "SELECT 社外購買番号,ファイル名変更 FROM Q_STEP1" 44 45 'SQL文の実行(読込の場合) 46 adoRs.Open strSQL, adoCn 'SQLを実行して取得したデータをadoRsへ格納する 47 48 tmpFldCnt = adoRs.Fields.Count 'フィールド数を取得 49 tmpRcdCnt = adoRs.RecordCount 'レコード数を取得 50 51 'レコード数がゼロじゃない場合 52 If tmpRcdCnt > 0 Then 53 54 '全レコードを配列に格納 55 myArray = adoRs.GetRows 56 57 End If 58 59 '後処理 60 adoCn.Close 'Accessへの接続解除 61 Set adoRs = Nothing '取得用オブジェクトの解放 62 Set adoCn = Nothing '接続用オブジェクトの解放 63 64End Sub 65
試したこと
・Accessのクエリ情報をを変数に入れる事は出来たのですが、各ファイルに対してのファイル名変更ができませんでした。
・コードも中途半端になっていますが、ご協力よろしくお願いします。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。