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 IfEnd WithWith Application.FileDialog(msoFileDialogFolderPicker) .Title = "请选择要粘贴的位置" If .Show = -1 Then s = .SelectedItems(1) NewString = s & "" & FileName End IfEnd Withfs.CopyFolder OldString, NewStringMsgBox "复制成功!"Set fs = NothingEnd Sub

效果如图:

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

执行操作前:

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

执行操作之后:

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

代码解析

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

Set fs = CreateObject("Scripting.FileSystemObject")

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

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

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

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

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

fs.CopyFolder OldString, NewString

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

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

完整代码加注释

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

总结

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

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

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

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

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

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

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

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

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

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

ubuntu复制文件到另一个文件夹_Excel VBA之FSO-2.2文件夹的复制相关推荐

  1. vba复制整个sheet内容_Excel VBA解读(74):移动或复制工作表——Move方法和Copy方法...

    有时候,我们可能想复制工作表,保留一份工作表的副本,以免误操作打乱工作表后无法恢复.有时候,我们也可能想移动工作表,调整工作表顺序,将工作表重新排列,以方便工作表的布置.本文介绍在VBA中实现这两种操 ...

  2. BootISO:从 ISO 文件中创建一个可启动的 USB 设备

    为了安装操作系统,我们中的大多数人(包括我)经常从 ISO 文件中创建一个可启动的 USB 设备.为达到这个目的,在 Linux 中有很多自由可用的应用程序.甚至在过去我们写了几篇介绍这种实用程序的文 ...

  3. 「整理文件轻松有妙招!教你如何按类型将文件夹里的文件进行归类保存」

    文件整理是一个让人望而却步的任务,不经意间文件夹里就会产生大量分类不清的文件,让我们感到十分困扰.而现在,让我们为你介绍一种简便易行的方法,可将文件夹中的文件按类型进行归类保存,轻松整理你的文件夹! ...

  4. struts2文件上传一个错误的解决

    struts2文件上传一个错误的解决 在做struts2的多文件上传时,选择了几个比较大的文件,点击"提交"后,画面没有提示说文件太大,而是清空了各个表单项,查看控制台显示如下错误 ...

  5. 如何把一个bin文件捆绑到一个可执行文件exe中?

    如何把一个bin文件捆绑到一个可执行文件exe中? Delphi / Windows SDK/API http://www.delphi2007.net/DelphiAPI/html/delphi_2 ...

  6. php中读取文件内容的几种方法。(file_get_contents:将文件内容读入一个字符串)...

    php中读取文件内容的几种方法.(file_get_contents:将文件内容读入一个字符串) 一.总结 php中读取文件内容的几种方法(file_get_contents:将文件内容读入一个字符串 ...

  7. 报表合并软件怎么快速将多表格文件整合到一个表

    今天跟大家分享一下报表合并软件怎么快速将多表格文件整合到一个表 1.如下图有多个excel文件,现在要求将这几个文件合并到一起 2.首先我们点击下图选项 3.鼠标点击[汇总拆分]-[汇总大师] 4.点 ...

  8. 怎么把多个pdf文件合并成一个?一分钟解决

    当我们有多个PDF文件时,将它们合并成一个文件可以帮助您更轻松地管理和浏览文件.不必打开多个文件,只需打开一个文件就能查看所有内容.将PDF文件合并成一个文件可以帮助您更好地组织文档,以便于共享和备份 ...

  9. 【文件操作(IO)】File类的属性,常见方法,文件内容的读写操作

    文章目录 1. 认识文件 2. Java中操作文件 2.1 File类 2.2 文件内容的读写--数据流 InputStream类 利用Scanner进行字符读取 OutputStream类 利用Pr ...

最新文章

  1. IT行业常见职位职业路线图
  2. 图文教程:使用MyEclipse的hibernate工具从数据库反向生成实体Bean
  3. 从零开始使用Realsense D435i运行VINS-Mono
  4. Vue 学习第四天 -2
  5. 动态引用webservice
  6. xflash里的hello world程序
  7. 湖首大学计算机科学硕士申请,湖首大学王牌专业之一丨计算机科学专业
  8. WordPress本地运行,PhpStudy中MySQL无法启动,数据库无法连接?
  9. VSCode配置PyQt5和designer
  10. Linux 查看进程之PS命令
  11. 伟大架构师的秘密(转载)
  12. Proteus20个应用技巧
  13. IDEA软件中的五子棋~
  14. python脚本注册服务+pyinstaller打包exe开机自启动服务
  15. 电脑下载路径与安装路径设置 以及浏览器推荐
  16. Surface Defect Detection Methods for Industrial Products : A Review
  17. APICloud介绍
  18. A. Chess Placing
  19. 多线程加速图像模板匹配
  20. 如何将下载的影像变换为西安80坐标系

热门文章

  1. window 右击菜单启动 nodejs app
  2. Randomized Cuts for 3D Mesh Analysis (SIGGRAPH Asia 08)
  3. Centos Ubuntu防爆破ssh脚本
  4. 电脑桌面出现透明条图标“复制”“刷新”解决方法
  5. CentOS通过 liveCD 进入救援模式-重装 grub 修复损坏的
  6. 使用Prometheus监控Flink
  7. Windows下MySql主从配置实战教程
  8. Linux安装Gitlab
  9. 使用Excel公式,获取 当前 Excel 文件 的 名字
  10. 呉服屋 2011/03/24早会文章