VBA中復(fù)制文件的步驟

2021-12-08 14:31 更新
使用FileCopy語句,可以在文件夾之間復(fù)制文件:
FileCopy 來源, 目的地

該語句的第一個參數(shù)是文件來源,明確你要復(fù)制的文件名稱,該名稱可以包含驅(qū)動名稱。第二個參數(shù)是復(fù)制的目的地,可以包括驅(qū)動和文件夾的地址。兩個參數(shù)都是必須的。假設(shè)你要將用戶確定的一個文件復(fù)制到一個叫做“C:\Abort”的文件夾,下面的過程示范如何完成它:

Sub CopyToAbort()
Dim folder As String
Dim source As String
Dim dest As String
Dim msg1 As String
Dim msg2 As String
Dim p As Integer
Dim s As Integer
Dim i As Long
On Error GoTo ErrorHandler
folder = "C:\Abort"
msg1 = "The selected file is already in this folder."
msg2 = "was copied to"
p = 1
i = 1
' get the name of the file from the user 從用戶處獲取文件名稱
source = Application.GetOpenFilename
' don’t do anything if cancelled 如果取消則不進行任何操作
If source = "False" Then Exit Sub

' get the total number of backslash characters "\" in the source 獲取文件來源字符

串中的反斜杠數(shù)

' variable’s contents

Do Until p = 0

p = InStr(i, source, "\", 1)

If p = 0 Then Exit Do

s = p

i = p + 1

Loop

' create the destination file name 創(chuàng)建目的文件名稱

dest = folder & Mid(source, s, Len(source))

' create a new folder with this name 創(chuàng)建同名文件夾

MkDir folder

' check if the specified file already exists in the 檢查該文件是否在目的地已經(jīng)存

' destination folder

If Dir(dest) <> "" Then

MsgBox msg1

Else

' copy the selected file to the C:\Abort folder 復(fù)制所選文件到文件夾“C:\Abort”

FileCopy source, dest

MsgBox source & " " & msg2 & " " & dest

End If

Exit Sub

ErrorHandler:

If Err = "75" Then

Resume Next

End If

If Err = "70" Then

MsgBox "You can’t copy an open file."

Exit Sub

End If

End Sub

過程CopyToAbort使用了Excel應(yīng)用程序的方法GetOpenFilename從用戶那里獲取文件名稱。該方法導(dǎo)致彈出內(nèi)置的打開對話框。使用該對話框,你可以在任何驅(qū)動的任何文件夾里選擇任何文件。如果用戶取消了,VB就返回值“False”并且程序結(jié)束。如果用戶選取了某個文件并且點擊了打開,那么該選中的文件就會賦值到變量source。因為復(fù)制的目的,你只需要文件名稱(而不需路徑名),所以Do…Until循環(huán)用來找到最后一個反斜杠(“\”)在變量source里的位置。


接下來,VB給FileCopy語句的第二個參數(shù)準(zhǔn)備了一個字母字符串,并且將其賦值到變量dest。該變量儲存的字符串是目標(biāo)文件夾(C:\Abort)和用戶指定的文件名前面加反斜杠連接起來的。函數(shù)MkDir創(chuàng)建了一個叫C:\Abort的文件夾,如果它不存在于C盤上的話。如果這樣的文件夾已經(jīng)存在的話,那么VB就需要去處理錯誤75了。這個錯誤會被在程序后面的錯誤處理代碼捕獲。注意,錯誤處理器是一代碼片斷,它用ErrorHandler帶冒號標(biāo)志。


當(dāng)VB遇到Resume Next語句時,就會繼續(xù)執(zhí)行過程里面導(dǎo)致錯誤的代碼行下面的代碼。這意味著語句MkDirfolder不會被執(zhí)行。在這之后,程序?qū)z查被選擇的文件是否已經(jīng)存在于目的文件夾。如果文件在那,那么用戶將收到儲存于變量msg1里面的信息;如果文件不存在于目的文件夾并且該文件當(dāng)前沒有打開的話,VB就會將文件復(fù)制到指定的文件夾,并且用相應(yīng)的信息通知用戶。如果該文件被打開了,VB將遇到運行時間錯誤70,并且因此而運行ErrorHandler里面的相應(yīng)指令。

1. 在一名為FileCopyStatement的信魔窟里輸入過程CopyToAbort


2. 運行該程序幾次,從不同的文件夾里選擇文件


3. 試著復(fù)制該程序之前復(fù)制過的文件到文件夾C:\Abort


4. 打開某個文件,并且在其開著的情況下試圖用過程CopyToAbort來復(fù)制它


5. 運行本章前面準(zhǔn)備的過程MyFiles,在立即窗口里列出文件夾C:\Abort里面的內(nèi)容
注意,不要刪除文件夾C:\Abort和你復(fù)制的文件,你將在下一節(jié)里面使用一個叫RemoveMe的VBA過程來同時刪除文件和文件夾。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號