엑셀 VBA에서 FileCopy 함수는 파일을 한 위치에서 다른 위치로 복사하는 함수입니다.
즉, 원본 파일을 그대로 유지하면서 다른 폴더나 드라이브에 복사할 때 사용됩니다.
1. FileCopy 기본 문법
FileCopy "원본파일경로", "복사할파일경로"
|
매개변수
|
설명
|
"원본파일경로"
|
복사할 원본 파일의 전체 경로
|
"복사할파일경로"
|
복사된 파일이 저장될 대상 경로
|
📌 원본 파일이 존재하지 않으면 오류 발생 (Run-time error '53': File not found)
📌 대상 파일이 이미 존재하면 덮어쓰기 (Overwrite)
📌 폴더는 복사할 수 없음 → 폴더 복사는 FileSystemObject 사용 필요
2. 기본 파일 복사 예제
Sub 파일복사_기본()
FileCopy "C:\원본폴더\파일.xlsx", "C:\복사폴더\파일.xlsx"
MsgBox "파일이 성공적으로 복사되었습니다!"
End Sub
|
📌 C:\원본폴더\파일.xlsx → C:\복사폴더\파일.xlsx로 복사
3. 파일이 존재하는지 확인 후 복사 (Dir 활용)
Sub 파일존재확인후복사()
Dim 원본파일 As String, 대상파일 As String
원본파일 = "C:\원본폴더\파일.xlsx"
대상파일 = "C:\복사폴더\파일.xlsx"
If Dir(원본파일) <> "" Then
FileCopy 원본파일, 대상파일
MsgBox "파일이 복사되었습니다!"
Else
MsgBox "원본 파일이 존재하지 않습니다!"
End If
End Sub
|
📌 원본 파일이 존재할 경우에만 FileCopy 실행하여 복사
4. 폴더가 없으면 자동 생성 후 파일 복사
Sub 폴더확인후파일복사()
Dim 원본파일 As String, 대상파일 As String, 폴더경로 As String
원본파일 = "C:\원본폴더\파일.xlsx"
폴더경로 = "C:\복사폴더"
대상파일 = 폴더경로 & "\파일.xlsx"
' 폴더가 없으면 생성
If Dir(폴더경로, vbDirectory) = "" Then
MkDir 폴더경로
End If
' 파일 복사
If Dir(원본파일) <> "" Then
FileCopy 원본파일, 대상파일
MsgBox "파일이 복사되었습니다!"
Else
MsgBox "원본 파일이 존재하지 않습니다!"
End If
End Sub
|
📌 폴더가 없으면 MkDir을 사용하여 폴더 생성 후 파일 복사
5. 특정 확장자(.txt, .xlsx 등) 파일 여러 개 복사 (Dir 활용)
Sub 특정확장자_파일복사()
Dim 원본폴더 As String, 대상폴더 As String
Dim 파일이름 As String
원본폴더 = "C:\원본폴더\"
대상폴더 = "C:\복사폴더\"
' 폴더가 없으면 생성
If Dir(대상폴더, vbDirectory) = "" Then MkDir 대상폴더
' 특정 확장자 파일 찾기
파일이름 = Dir(원본폴더 & "*.xlsx") ' .xlsx 파일만 찾기
Do While 파일이름 <> ""
FileCopy 원본폴더 & 파일이름, 대상폴더 & 파일이름
파일이름 = Dir ' 다음 파일 검색
Loop
MsgBox "모든 .xlsx 파일이 복사되었습니다!"
End Sub
|
📌 원본 폴더의 모든 .xlsx 파일을 대상 폴더로 복사
6. 파일 이름 변경하면서 복사
Sub 파일이름변경_복사()
Dim 원본파일 As String, 대상파일 As String
원본파일 = "C:\원본폴더\파일.xlsx"
대상파일 = "C:\복사폴더\새파일.xlsx"
If Dir(원본파일) <> "" Then
FileCopy 원본파일, 대상파일
MsgBox "파일이 '새파일.xlsx'로 복사되었습니다!"
Else
MsgBox "원본 파일이 존재하지 않습니다!"
End If
End Sub
|
📌 파일을 복사하면서 이름을 "새파일.xlsx"로 변경
7. 날짜 기반 파일 백업 (YYYY-MM-DD 형식)
Sub 날짜기반_파일백업()
Dim 원본파일 As String, 백업파일 As String
원본파일 = "C:\원본폴더\데이터.xlsx"
백업파일 = "C:\백업폴더\데이터_" & Format(Date, "YYYY-MM-DD") & ".xlsx"
' 폴더 확인 후 생성
If Dir("C:\백업폴더", vbDirectory) = "" Then MkDir "C:\백업폴더"
If Dir(원본파일) <> "" Then
FileCopy 원본파일, 백업파일
MsgBox "파일이 백업되었습니다: " & 백업파일
Else
MsgBox "원본 파일이 존재하지 않습니다!"
End If
End Sub
|
📌 C:\백업폴더\데이터_YYYY-MM-DD.xlsx 형식으로 백업
8. 사용자 입력을 받아 파일 복사 (InputBox 활용)
Sub 사용자입력_파일복사()
Dim 원본파일 As String, 대상파일 As String
원본파일 = InputBox("복사할 원본 파일 경로를 입력하세요:")
대상파일 = InputBox("저장할 파일 경로를 입력하세요:")
If Dir(원본파일) <> "" Then
FileCopy 원본파일, 대상파일
MsgBox "파일이 성공적으로 복사되었습니다!"
Else
MsgBox "원본 파일이 존재하지 않습니다!"
End If
End Sub
|
📌 사용자가 직접 원본 파일과 대상 파일 경로를 입력
9. FileSystemObject를 사용한 파일 복사 (CopyFile 활용)
Sub FSO_파일복사()
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim 원본파일 As String, 대상파일 As String
원본파일 = "C:\원본폴더\파일.xlsx"
대상파일 = "C:\복사폴더\파일.xlsx"
If fso.FileExists(원본파일) Then
fso.CopyFile 원본파일, 대상파일
MsgBox "파일이 복사되었습니다!"
Else
MsgBox "원본 파일이 존재하지 않습니다!"
End If
End Sub
|
📌 FileSystemObject의 CopyFile을 사용하면 더 강력한 파일 복사 기능 제공
📌 예를 들어, 여러 개의 파일을 한 번에 복사할 수도 있음
📌 FileCopy 사용 시 주의할 점
- 원본 파일이 존재하지 않으면 오류 발생 (Run-time error '53')
- 해결 방법: If Dir(원본파일) <> "" Then FileCopy 원본파일, 대상파일
- 폴더는 복사할 수 없음
- 해결 방법: FileSystemObject.CopyFolder 사용
- 대상 파일이 이미 존재하면 덮어쓰기
- 해결 방법: 덮어쓰기를 방지하려면 If Dir(대상파일) = "" Then FileCopy 원본파일, 대상파일
- FileCopy는 파일의 속성을 유지
- 파일 복사 후 Read-Only 속성을 변경하려면 SetAttr 대상파일, vbNormal 사용
📝 정리
기능
|
VBA 코드 (FileCopy 활용)
|
기본 파일 복사
|
FileCopy "C:\원본.xlsx", "C:\복사.xlsx"
|
파일 존재 여부 확인 후 복사
|
If Dir(원본파일) <> "" Then FileCopy 원본파일, 대상파일
|
폴더가 없으면 자동 생성 후 복사
|
If Dir(폴더경로, vbDirectory) = "" Then MkDir 폴더경로
|
날짜 기반 파일 백업
|
FileCopy 원본파일, "C:\백업_" & Format(Date, "YYYY-MM-DD") & ".xlsx"
|
FSO를 활용한 파일 복사
|
fso.CopyFile 원본파일, 대상파일
|
🔥 VBA의 FileCopy를 활용하면 자동 파일 복사 및 백업을 쉽게 구현할 수 있습니다! 🚀