
ファイルを一括コピーするツールです。
例えば毎日、ファイル名が今日の日付をコピーする、
なんて処理があるときに使ってください。
参照設定
ツール > 参照設定 >Microsoft Scripting Runtime
Option Explicit
'---------------------------------------------------------------------------------------------------
' 定義
'---------------------------------------------------------------------------------------------------
Private Const SH_NAME As String = "ツール" 'シート名
Private Const DATA_START_ROW As Long = 10 'データ開始行
'列インデックス
Private Enum eCOL
NO = 1
SRC_DIR
SRC_FILE_NAME
DST_DIR
DST_FILE_NAME
RESULT
TRAILER
End Enum
'---------------------------------------------------------------------------------------------------
' 変数
'---------------------------------------------------------------------------------------------------
Private sh As Worksheet 'ワークシートオブジェクト
Private arrInfo As Variant 'ワークシート情報
Private fileUtil As ClsFileUtil 'ファイル操作クラス
Private oFso As FileSystemObject 'ファイルシステムオブジェクト
'---------------------------------------------------------------------------------------------------
'【処 理 名】初期化
'【処理概要】初期化を行う
'【引 数】なし
'【返 却 値】なし
'---------------------------------------------------------------------------------------------------
Private Sub Class_Initialize()
Set sh = ThisWorkbook.Worksheets(SH_NAME)
Set fileUtil = New ClsFileUtil
Set oFso = New FileSystemObject
End Sub
'---------------------------------------------------------------------------------------------------
'【処 理 名】終期化
'【処理概要】終期化を行う
'【引 数】なし
'【返 却 値】なし
'---------------------------------------------------------------------------------------------------
Private Sub Class_Terminate()
Set sh = Nothing
Set fileUtil = Nothing
Set oFso = Nothing
End Sub
'---------------------------------------------------------------------------------------------------
'【処 理 名】ファイルコピーメイン処理
'【処理概要】ファイルをコピーする
'【引 数】なし
'【返 却 値】なし
'---------------------------------------------------------------------------------------------------
Public Sub CopyFilesMain()
Dim index As Long '行カウンタ
Dim src As String
'ワークシート情報読込
Call LoadSheet
'ファイルコピー
For index = 1 To UBound(arrInfo)
'ファイルコピー処理
Call CopyFiles(index)
LBL_NEXT:
Next index
End Sub
'---------------------------------------------------------------------------------------------------
'【処 理 名】ファイルコピー処理
'【処理概要】ファイルをコピーする
'【引 数】[I]ByVal index As Long
'【返 却 値】
'---------------------------------------------------------------------------------------------------
Private Sub CopyFiles(ByVal index As Long)
Dim src As String 'コピー元ファイル名
Dim dst As String
On Err GoTo LBL_ERR
src = arrInfo(index, eCOL.SRC_DIR) & arrInfo(index, eCOL.SRC_FILE_NAME)
dst = arrInfo(index, eCOL.DST_DIR) & arrInfo(index, eCOL.DST_FILE_NAME)
'コピー元ファイルが存在しない場合スキップ
If Dir(src) = "" Then
GoTo LBL_ERR
End If
'コピー先ディレクトリ作成
Call fileUtil.makeDirectory(arrInfo(index, eCOL.DST_DIR))
If arrInfo(index, eCOL.DST_FILE_NAME) <> "" Then
'リネームする場合
FileCopy src, dst
Else
'コピーの場合
oFso.copyFile src, dst
End If
Exit Sub
LBL_ERR:
sh.Cells(DATA_START_ROW + index - 1, eCOL.RESULT).value = "ERR"
End Sub
'---------------------------------------------------------------------------------------------------
'【処 理 名】ワークシート読込
'【処理概要】ワークシートの情報を読み込む'【引 数】なし
'【引 数】なし
'【返 却 値】なし
'---------------------------------------------------------------------------------------------------
Public Sub LoadSheet()
Dim endRowIndex As Long '行インデックス
Dim index As Long 'カウンタ
endRowIndex = sh.Cells(Rows.Count, eCOL.SRC_DIR).End(xlUp).Row
arrInfo = sh.Range(sh.Cells(DATA_START_ROW, eCOL.NO), _
sh.Cells(endRowIndex, eCOL.TRAILER - 1))
For index = 1 To UBound(arrInfo)
'--------------------------------
'ディレクトリパス付与
'--------------------------------
'コピー元ファイル格納場所
arrInfo(index, eCOL.SRC_DIR) = _
fileUtil.AddPathSeparator(arrInfo(index, eCOL.SRC_DIR))
'コピー先
arrInfo(index, eCOL.DST_DIR) = _
fileUtil.AddPathSeparator(arrInfo(index, eCOL.DST_DIR))
Next index
End Sub
Option Explicit
Private Declare Function SHCreateDirectoryEx Lib "shell32" Alias "SHCreateDirectoryExA" ( _
ByVal hwnd As Long, _
ByVal pszPath As String, _
ByVal psa As Long) As Long
'ツール > 参照設定 > Microsoft Scripting Runtime
Dim oFso As FileSystemObject
'---------------------------------------------------------------------------------------------------
'【処 理 名】初期化
'【処理概要】初期化を行う
'【引 数】なし
'【返 却 値】なし
'---------------------------------------------------------------------------------------------------
Private Sub Class_Initialize()
Set oFso = New FileSystemObject
End Sub
'---------------------------------------------------------------------------------------------------
'【処 理 名】終期化
'【処理概要】終期化を行う
'【引 数】なし
'【返 却 値】なし
'---------------------------------------------------------------------------------------------------
Private Sub Class_Terminate()
Set oFso = Nothing
End Sub
'---------------------------------------------------------------------------------------------------
'【処 理 名】ディレクトリパスへのセパレータ付与
'【処理概要】ディレクトリパスの末尾にセパレータがなければ付与する
'【引 数】[I]ByVal path As String ディレクトリパス
'【返 却 値】 なし
'---------------------------------------------------------------------------------------------------
Public Function AddPathSeparator(ByVal path As String) As String
If Right(path, 1) <> ChrW(92) Then
path = path & ChrW(92)
End If
AddPathSeparator = path
End Function
'---------------------------------------------------------------------------------------------------
'【処 理 名】ディレクトリ作成
'【処理概要】ディレクトリを作成する
'【引 数】[I]ByVal path As String ディレクトリパス
'【返 却 値】 SHCreateDirectoryEx()返却値。0 = ディレクトリ作成成功
'---------------------------------------------------------------------------------------------------
Function makeDirectory(ByVal path As String) As Long
If oFso.FolderExists(path) <> True Then
makeDirectory = SHCreateDirectoryEx(0&, path, 0&)
End If
End Function
最近のコメント

コメントを残す