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

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

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

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 如果取消則不進(jìn)行任何操作
If source = "False" Then Exit Sub

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

串中的反斜杠數(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

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


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


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

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


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


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


4. 打開(kāi)某個(gè)文件,并且在其開(kāi)著的情況下試圖用過(guò)程CopyToAbort來(lái)復(fù)制它


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


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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)