2013-06-05 21 views
24

Vì vậy, tôi có một tệp truy cập mà tôi thường xuyên cần được sao chép vào một thư mục khác, thay thế phiên bản cuối cùng. Tôi muốn sử dụng macro Excel để đạt được điều này và cũng muốn đổi tên tệp trong quy trình.VBA để sao chép tệp từ một thư mục này sang một thư mục khác

Ví dụ:

fileName = "X:\Database\oldName.accdb" 
    copyDestination = "Y:\dbstore\" 
    newName = "newName.accdb" 

Có cách nào dễ dàng để thực hiện việc này không?

+1

Bằng cách thường xuyên làm bạn có nghĩa là mỗi x phút một lần? – will

+0

Không, ý tôi là một vài lần mỗi ngày – harryg

Trả lời

42

Sử dụng các phương pháp thích hợp trong Scripting.FileSystemObject. Sau đó, mã của bạn sẽ dễ dàng hơn với VBScript và VB.net. Để giúp bạn bắt đầu, bạn sẽ cần phải bao gồm:

Dim fso As Object 
Set fso = VBA.CreateObject("Scripting.FileSystemObject") 

Sau đó, bạn có thể sử dụng

Call fso.CopyFile(source, destination[, overwrite]) 

nơi nguồn và đích là tên đầy đủ (bao gồm cả đường dẫn) của tập tin.

Xem http://msdn.microsoft.com/en-us/library/aa711216(v=vs.71).aspx

+0

Điều đó thật dễ dàng. Rất cảm ơn – harryg

+0

So với giải pháp đơn giản khác với FileCopy, giải pháp này dường như có lợi thế là tệp nguồn cũng có thể được sao chép trong khi nó được mở (ví dụ: bằng MS Access), tức là khi "chỉ đọc". –

52

Phương pháp này thậm chí còn dễ dàng hơn nếu bạn ok với các tùy chọn ít hơn:

FileCopy source, destination 
+0

Đó là đơn giản nhất –

+2

Tôi đã thử nghiệm và, thực sự, phương pháp này sẽ ghi đè tự động. –

+0

Đẹp và đơn giản, tuy nhiên khi tôi sử dụng giải pháp này và cơ sở dữ liệu Access được sao chép được mở, tôi nhận được lỗi "Truy cập bị từ chối". Điều này không xảy ra khi sử dụng FileSystemObject. –