阅读(73) (0)

VBA中复制文件的步骤

2016-12-04 16:44:09 更新
使用FileCopy语句,可以在文件夹之间复制文件:
FileCopy 来源, 目的地

该语句的第一个参数是文件来源,明确你要复制的文件名称,该名称可以包含驱动名称。第二个参数是复制的目的地,可以包括驱动和文件夹的地址。两个参数都是必须的。假设你要将用户确定的一个文件复制到一个叫做“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 获取文件来源字符

串中的反斜杠数

' 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 创建目的文件名称

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

' create a new folder with this name 创建同名文件夹

MkDir folder

' check if the specified file already exists in the 检查该文件是否在目的地已经存

' destination folder

If Dir(dest) <> "" Then

MsgBox msg1

Else

' copy the selected file to the C:\Abort folder 复制所选文件到文件夹“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应用程序的方法GetOpenFilename从用户那里获取文件名称。该方法导致弹出内置的打开对话框。使用该对话框,你可以在任何驱动的任何文件夹里选择任何文件。如果用户取消了,VB就返回值“False”并且程序结束。如果用户选取了某个文件并且点击了打开,那么该选中的文件就会赋值到变量source。因为复制的目的,你只需要文件名称(而不需路径名),所以Do…Until循环用来找到最后一个反斜杠(“\”)在变量source里的位置。


接下来,VB给FileCopy语句的第二个参数准备了一个字母字符串,并且将其赋值到变量dest。该变量储存的字符串是目标文件夹(C:\Abort)和用户指定的文件名前面加反斜杠连接起来的。函数MkDir创建了一个叫C:\Abort的文件夹,如果它不存在于C盘上的话。如果这样的文件夹已经存在的话,那么VB就需要去处理错误75了。这个错误会被在程序后面的错误处理代码捕获。注意,错误处理器是一代码片断,它用ErrorHandler带冒号标志。


当VB遇到Resume Next语句时,就会继续执行过程里面导致错误的代码行下面的代码。这意味着语句MkDirfolder不会被执行。在这之后,程序将检查被选择的文件是否已经存在于目的文件夹。如果文件在那,那么用户将收到储存于变量msg1里面的信息;如果文件不存在于目的文件夹并且该文件当前没有打开的话,VB就会将文件复制到指定的文件夹,并且用相应的信息通知用户。如果该文件被打开了,VB将遇到运行时间错误70,并且因此而运行ErrorHandler里面的相应指令。

1. 在一名为FileCopyStatement的信魔窟里输入过程CopyToAbort


2. 运行该程序几次,从不同的文件夹里选择文件


3. 试着复制该程序之前复制过的文件到文件夹C:\Abort


4. 打开某个文件,并且在其开着的情况下试图用过程CopyToAbort来复制它


5. 运行本章前面准备的过程MyFiles,在立即窗口里列出文件夹C:\Abort里面的内容
注意,不要删除文件夹C:\Abort和你复制的文件,你将在下一节里面使用一个叫RemoveMe的VBA过程来同时删除文件和文件夹。