W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
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í)刪除文件和文件夾。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: