乔山办公网我们一直在努力
您的位置:乔山办公网 > excel表格制作 > Excel VBA之FSO-2.2文件夹的复制-excel下标

Excel VBA之FSO-2.2文件夹的复制-excel下标

作者:乔山办公网日期:

返回目录:excel表格制作

Excel VBA之FSO-2.2文件夹的复制

前景提要

昨天我们首次接触了ADO中FSO的使用,并演示了如何通过FSO来创建一个文件夹,删除文件夹以及判断文件夹是否存在的操作,虽然还是再说文件夹,但是相对于上一列系列,明显功能提升了很多,今天我们继续分享FSO的操作,今天来说下如何通过FSO来执行文件夹的复制。

思路

复制文件夹的话,我们至少需要知道两个条件,首先当前文件夹所在的位置,然后我们需要复制到那个位置,这两点是必须要知道的,在延伸下,通过之前学习过的对话框的方式来实现自主选择文件夹,(如果你想要复习下昨天分享的判断文件夹是否存在并删除再粘贴的话,也是可以的好了,不过复制的时候,并不需要这一个判断,他会直接覆盖掉原始数据的)

上代码

Sub test()
Dim pathn$, fs As Object, FileName$, NewString$, s$, OldString$
Set fs = CreateObject("Scripting.FileSystemObject")
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "请选择要复制的文件夹"
If .Show = -1 Then
OldString = .SelectedItems(1)
FileName = Split(OldString, "\\")(UBound(Split(OldString, "\\")))
End If
End With
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "请选择要粘贴的位置"
If .Show = -1 Then
s = .SelectedItems(1)
NewString = s & "\\" & FileName
End If
End With
fs.CopyFolder OldString, NewString
MsgBox "复制成功!"
Set fs = Nothing
End Sub

效果如图:

上面的代码要复制的文件夹在桌面,需要复制的地方是D盘下的新建文件夹目录

执行操作前:

Excel VBA之FSO-2.2文件夹的复制

这里没有文件夹,只有我们之前创建的案例

执行操作之后:

Excel VBA之FSO-2.2文件夹的复制

文件夹也复制成功,修改日期也变成了我们最新操作的那个时间,说明此操作是成功的

代码解析

首先声明并创建FSOF对象,这个我们在之前说过了

Set fs = CreateObject("Scripting.FileSystemObject")

然后连续两个FileDialog,利用我们之前学习过的方法,灵活的选择我们要复制的文件夹和粘贴的文件夹位置,提高代码的通用性和灵活性

在第一个FileDialog中,我们主要是获得我们需要复制的文件夹的文件名,为什么要获得文件夹的名字呢?因为在之后我们需要利用它和粘贴的文件夹路径组合成为完整的路径,这样才可以执行粘贴的操作,这里利用到了一个split()函数,有点语言基础的童鞋都应该知道split()主要是执行拆分操作的,将文件夹的路径通过“\\”这个标签来进行拆分,拆分之后得到的是一个数组类型的(数组的知识,我们后面会单独开一系列来讲,知识面比较大),然后我们利用UBound这个函数取得最大下标,然后获得最后一个元素,即文件名了。现在讲的比较抽象,如果有数组基础的话,就比较好理解,我们利用调试的方式来实现下效果,大家也可以先记住,这种方法是常用的

Excel VBA之FSO-2.2文件夹的复制

通过调试,我们看到OldString代表的原文件夹的路径,然后我们拆分的时候就是通过分隔符“\\”,拆分成几部分,文件夹的名字就是最后一个部分,通过ubound就可以获得最后一部分了,这样应该好理解一点。

然后第二个FileDialog就是获得我们要粘贴的那个文件夹的位置了,这里我们在插入一个比较基础的知识点,文件夹的路径都是通过“\\”来连接的,我们通过FileDialog得到的粘贴路径只有文件夹的位置,我们还需要通过连接的方式来得到粘贴文件夹的完整路径。

Excel VBA之FSO-2.2文件夹的复制

然后就是本次的新知识点了,前面做了那么多的准备工作,都是为了这一步,FSO文件夹的复制

fs.CopyFolder OldString, NewString

原来的路径在前,新路径再后。

这里说明一点:复制的话,不需要判断是否有同名文件夹,他会直接覆盖旧的数据,在使用的过程中,要注意这一点,如果你想要保存历史数据的话,最好不要放在同一个文件夹下,或者将旧的数据名字更改下。

完整代码加注释

Sub test()
Dim pathn$, fs As Object, FileName$, NewString$, s$, OldString$
Set fs = CreateObject("Scripting.FileSystemObject") '创建FSO
With Application.FileDialog(msoFileDialogFolderPicker) '调用文件选择框
.Title = "请选择要复制的文件夹" '选择框的名字,人性化
If .Show = -1 Then
OldString = .SelectedItems(1) '文件夹的路径
FileName = Split(OldString, "\\")(UBound(Split(OldString, "\\"))) '通过拆分和最大下标的方式的活文件名
End If
End With
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "请选择要粘贴的位置"
If .Show = -1 Then
s = .SelectedItems(1) '获得要粘贴的文件夹路径
NewString = s & "\\" & FileName '将上面的路径和前面得到的文件名合并,构造要粘贴的文件夹的完整路径
End If
End With
fs.CopyFolder OldString, NewString 'FSO复制文件夹的方法,旧的路径在前,新的路径在后
MsgBox "复制成功!"
Set fs = Nothing '释放FSO
End Sub

总结

==========================================================================

今天的知识点主要是通过FSO来复制文件夹的方法,顺带也巩固了一下通过FileDialog获得文件夹/文件名字的方法,这个是固定的透露,如果还不是很理解数组和拆分的概念的话,先记住这个套路就好了,可以直接套用的,大家在使用的过程中也可以和之前分享的创建,删除等方法混合一起使用,不过要记住,复制的操作会直接覆盖掉目标文件夹的历史数据,使用的时候要注意这点,做好备份或者另存。

==========================================================================

本人已经打算长期分享一些网络搜集的各种VBA知识,如果大家有问题也可以提出来共同解决,一起进步,毕竟VBA的世界还是很大的。

因为基本上都是自学的,很多代码和知识都是来源于网络的,如果在分享的过程中,正好拿了某位大神的代码,请告诉我,我将标注代码来源出处,也方便大家学习分享,谢谢!

如果你有什么想要分享的,或者有什么想要知道的,都可以留言等方式告诉我,大家一起努力进步。

好了,明晚19:00,准时再见。

=============================历史相关文章==============================

Excel VBA和文件夹-1.7通过对话框灵活选定文件夹并打开对应文件

Excel VBA之FSO-2.1文件夹的创建,删除

相关阅读

关键词不能为空
极力推荐

ppt怎么做_excel表格制作_office365_word文档_365办公网