精华内容
下载资源
问答
  • Excel VBA之FSO-2.2文件夹的复制前景提要昨天我们首次接触了ADO中FSO的使用,并演示了如何通过FSO来创建一个文件夹,删除文件夹以及判断文件夹是否存在的操作,虽然还是再说文件夹,但是相对于上一列系列,明显功能...

    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盘下的新建文件夹目录

    执行操作前:

    636d6585c010af88f057da25a3dddc85.png

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

    执行操作之后:

    9edbe103cd71000ca32545fbd8bf40b6.png

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

    代码解析

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

    Set fs = CreateObject("Scripting.FileSystemObject")

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

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

    b578bce95e5ba168bbefb0231f16fa92.png

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

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

    fd0f4034d8ee8052936b6a535cb1e98c.png

    然后就是本次的新知识点了,前面做了那么多的准备工作,都是为了这一步,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文件夹的创建,删除

    展开全文
  • 大家好,我们今日继续讲解VBA代码解决方案的第64讲内容:如何利用VBA代码将一个文件复制,拷贝到一个新的地址并重命名。其实这节的内容在我们实际的工作中利用的是非常多的,也是非常平常的一个操作,点击文件名,点...

    大家好,我们今日继续讲解VBA代码解决方案的第64讲内容:如何利用VBA代码将一个文件复制,拷贝到一个新的地址并重命名。其实这节的内容在我们实际的工作中利用的是非常多的,也是非常平常的一个操作,点击文件名,点右键复制,或者用CTRL+C,找到一个新的地址,右键粘贴,或者CTRL+V, 就可以了,但在VBA的代码操作中,我们要把这些信息放到代码中。

    为了完成这个操作我们还要完善我们的知识结构:

    一:FileCopy语句的讲解,这个语句的作用是复制一个文件,

    语法如下:FileCopy source, destination

    a) Source参数是必需的,字符串表达式,用来表示要被复制的文件名。source参数可以包含目录或文件夹、以及驱动器。

    b) destination参数是必需的,字符串表达式,用来指定要复制的目地文件名。destination参数 可以包含目录或文件夹、以及驱动器。

    特别注意第一点: 不能对一个已打开的文件使用 FileCopy 语句,否则会产生错误

    特别注意的第二点:两个参数都是必需的参数。其中,参数source指定要复制的文件名称,可以包含驱动器名称,String类型。第二个参数destination指定复制到的地点,同样可以包含驱动器和文件夹的名称,String类型。如果没有在参数source和参数destination中指定驱动器或文件夹,则认为文件在当前的驱动器或文件夹中。在使用FileCopy语句时,只输入一个destination路径是不够的,必须提供一个文件名,即使它与source的内容相同也可以,否则会产生运行时错误"路径/文件访问错误"。

    特别注意的第三点:FileCopy是一个语句而不是函数,没有返回值。因此,可以假定如果调用FileCopy语句时没有出现错误,就认为成功复制了文件,所以应该为FileCopy语句编写良好的错误处理程序。注意,如果destination指定的文件已经存在,就会直接覆盖该文件而不会预先提示用户。

    二:ThisWorkbook.Path 是指当前的路径,这个内容就不再多说了,或许之后的文章中会再次讲到。

    需要把文件从一个地方复制到另一个地方,可以使用FileCopy语句复制文件,如下面的代码所示。

    Sub MyCopyFile()

    Dim SourceFile As String

    Dim DestinationFile As String

    SourceFile = ThisWorkbook.Path & "VBA代码解决方案(1-48).docx"

    DestinationFile = ThisWorkbook.Path & "ABCabc.docx"

    FileCopy SourceFile, DestinationFile

    End Sub

    代码解析:

    CopyFile过程使用FileCopy语句将示例文件所在文件夹中的"VBA代码解决方案(1-48).docx"文件复制到示例文件目录下的"ABC"文件夹中并重新命名为"abc.docx"。

    第4行代码指定被复制的文件名称和路径。

    第5行代码指定目的文件名称和路径,如果已存在相同名称的文件则会覆盖原文件。

    第6行代码使用FileCopy语句复制文件。

    代码窗口:

    ec3ef7310bb9dd70bf4ba5c18e096286.png

    运行后的结果:

    f13825df69b1dce0fac4b6417efb41b2.png

    如果没有这个文件夹:会有如下的提示:

    2c7a8b0786eea525a6115bef7e52ba63.png

    今日内容回向:

    1 FileCopy是函数吗?

    2 FileCopy如何理解呢?他有几个特别注意点是否清楚呢?

    展开全文
  • 比如文件夹下有test.xlsm(存放宏的文件)、a.xlsx(Sheet1)、b.xlsx(Sheet1)以及x.xlsx(Sheet xxx为第2Sheet) 我们的任务是将a.xlsx的Sheet1和b.xlsx的Sheet1复制到x.xlsx的Sheet xxx之前 确保启动时光标在...

    比如文件夹下有test.xlsm(存放宏的文件)、a.xlsx(Sheet1)、b.xlsx(Sheet1)以及x.xlsx(Sheet xxx为第2个Sheet)
    我们的任务是将a.xlsx的Sheet1和b.xlsx的Sheet1复制到x.xlsx的Sheet xxx之前

    确保启动时光标在test.xlsm中

    Dim i As Integer
        For i = 1 To Workbooks.Count
        Cells(i, 1) = Workbooks(i).name
        Next
        Cells.Replace What:="test.xlsm", Replacement:="", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
        Cells.Replace What:="x.xlsx", Replacement:="", LookAt:=xlPart, SearchOrder _
            :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False          
        Columns("A:A").Select
        Selection.SpecialCells(xlCellTypeBlanks).Select
        Selection.Delete Shift:=xlUp
        Range("A1").Select
    

    此时可以发现test.xlsm中A1、A2单元格中为a.xlsx和b.xlsx的文件名

    Dim j As Integer
        Selection.End(xlDown).Select
        j = Selection.Row        'j sheet
        Dim x As Integer
        For x = 1 To j:
            Windows("test.xlsm").Activate
            Dim Sname As String
            Sname = Range("A" & x).Value
            Workbooks(Sname).Activate 
            With Workbooks(Sname)
                    .Sheets(1).name = Mid(Sname, 1, Len(Sname) - 5) '更改工作表名称
            End With
            Sheets(1).Copy Before:=Workbooks("x.xlsx").Sheets(2)  
        Next x
    
    展开全文
  • ACCESS 复制文件

    2017-11-20 09:50:13
    vba完成文件夹复制,需要使用FileSystemObject对象来完成,FileSystemObject的copyfolder方法可以把文件夹从一个地方复制到另一个路径。下面是一个示例代码: Private Sub CommandButton1_Click()  Dim fso ...

    用vba完成文件夹的复制,需要使用FileSystemObject对象来完成,FileSystemObject的copyfolder方法可以把文件夹从一个地方复制到另一个路径。下面是一个示例代码:

    Private Sub CommandButton1_Click()
            Dim fso As Object
            Set fso = CreateObject("Scripting.FileSystemObject")
            fso.CopyFolder "d:\a", "e:\"
            Set fso = Nothing
    End Sub
    展开全文
  • 函数作用:取得一个文件的路径.......................90 '79.函数作用:十进制转二进制...........................90 '80.函数作用:检查一个数组是否为空.....................90 '81.函数作用:字母栏名转数字栏名.....
  • VBA常用技巧

    2014-12-21 16:39:28
    技巧8 仅复制数值到另一区域 12 8-1 使用选择性粘贴 12 8-2 直接赋值的方法 12 技巧9 单元格自动进入编辑状态 12 技巧10 禁用单元格拖放功能 12 技巧11 单元格格式操作 12 11-1 单元格字体格式设置 12 11-2 设置...
  • 如果用户自己的Excel文件中有一列是型号,该宏可以插入指定文件夹里以型号命名的JPG图片到另一列; 1.打开本Excel文件,不要关闭; 2.再另外打开你自己需要操作的另一个Excel文件,并保持你要操作的工作表做为当前...
  • VBA编程技巧大全

    2013-08-05 09:03:19
    技巧8 仅复制数值到另一区域 30 8-1 使用选择性粘贴 30 8-2 直接赋值的方法 31 技巧9 单元格自动进入编辑状态 32 技巧10 禁用单元格拖放功能 32 技巧11 单元格格式操作 33 11-1 单元格字体格式设置 33 11-2 设置...
  • 122.下载文件到指定目录 123.自动映射网络驱动器 124.自动断开网络驱动器 125.连接选定单元格中的内容 126.获取一个单元格中有指定字体颜色部份数据 127.对指定文件加XLS加密 128.选择指定范围内使用了填充颜色的...
  • Axx:ARJ压缩文件的分包序号文件,用于将一个文件压至几个小的压缩包中(xx取01-99的数字) A3L:Authorware 3.x库文件 A4L:Authorware 4.x库文件 A5L:Authorware 5.x库文件 A3M,A4M:Authorware Macintosh...
  • Excel百宝箱

    2012-10-27 17:09:21
    【合并数据并复制】:可以将一个区域的数据直接复制到一个单元格中 【合并区域自动换行】:可以让具有合并单元格的区域在自动换行与不换行之间自由切换 【选择合并单元格】:选择指定区域中的所有合并区域 【让合并...
  • Excel百宝箱9.0无限制破解版

    热门讨论 2012-02-03 19:05:29
    【合并数据并复制】:可以将一个区域的数据直接复制到一个单元格中 【合并区域自动换行】:可以让具有合并单元格的区域在自动换行与不换行之间自由切换 【选择合并单元格】:选择指定区域中的所有合并区域 【让合并...
  • 【合并数据并复制】:可以将一个区域的数据直接复制到一个单元格中 【合并区域自动换行】:可以让具有合并单元格的区域在自动换行与不换行之间自由切换 【选择合并单元格】:选择指定区域中的所有合并区域 【让...
  • 6.3.2 与另一个数据库连接 119 6.4 使用ADO创建记录集 120 6.4.1 打开简单的记录集 120 6.4.2 循环搜索和编辑记录集 122 6.4.3 创建永久记录集 124 6.4.4 使用RecordCount, BOF和EOF属性 125 6.4.5 检查...
  • 6.3.2 与另一个数据库连接 119 6.4 使用ADO创建记录集 120 6.4.1 打开简单的记录集 120 6.4.2 循环搜索和编辑记录集 122 6.4.3 创建永久记录集 124 6.4.4 使用RecordCount, BOF和EOF属性 125 6.4.5 检查记录集...
  • 【合并数据并复制】:可以将一个区域的数据直接复制到一个单元格中 【合并区域自动换行】:可以让具有合并单元格的区域在自动换行与不换行之间自由切换 【选择合并单元格】:选择指定区域中的所有合并区域 【让合并...
  • 1637.5.3 使用分隔文本文件 1657.5.4 处理宽度固定的文本文件 1667.5.5 追加文本数据到一个现有的表 1677.6 使用剪贴板导入数据 1677.6.1 向一个表粘贴新记录 1687.6.2 通过从剪贴板上粘贴来替换记录 1707.7 从...
  • 1637.5.3 使用分隔文本文件 1657.5.4 处理宽度固定的文本文件 1667.5.5 追加文本数据到一个现有的表 1677.6 使用剪贴板导入数据 1677.6.1 向一个表粘贴新记录 1687.6.2 通过从剪贴板上粘贴来替换记录 1707.7 从...
  • 1637.5.3 使用分隔文本文件 1657.5.4 处理宽度固定的文本文件 1667.5.5 追加文本数据到一个现有的表 1677.6 使用剪贴板导入数据 1677.6.1 向一个表粘贴新记录 1687.6.2 通过从剪贴板上粘贴来替换记录 1707.7 从...
  • 1637.5.3 使用分隔文本文件 1657.5.4 处理宽度固定的文本文件 1667.5.5 追加文本数据到一个现有的表 1677.6 使用剪贴板导入数据 1677.6.1 向一个表粘贴新记录 1687.6.2 通过从剪贴板上粘贴来替换记录 1707.7 从...
  • 1637.5.3 使用分隔文本文件 1657.5.4 处理宽度固定的文本文件 1667.5.5 追加文本数据到一个现有的表 1677.6 使用剪贴板导入数据 1677.6.1 向一个表粘贴新记录 1687.6.2 通过从剪贴板上粘贴来替换记录 1707.7 从...
  • 1637.5.3 使用分隔文本文件 1657.5.4 处理宽度固定的文本文件 1667.5.5 追加文本数据到一个现有的表 1677.6 使用剪贴板导入数据 1677.6.1 向一个表粘贴新记录 1687.6.2 通过从剪贴板上粘贴来替换记录 1707.7 从...
  • 1637.5.3 使用分隔文本文件 1657.5.4 处理宽度固定的文本文件 1667.5.5 追加文本数据到一个现有的表 1677.6 使用剪贴板导入数据 1677.6.1 向一个表粘贴新记录 1687.6.2 通过从剪贴板上粘贴来替换记录 1707.7 从...
  • 1637.5.3 使用分隔文本文件 1657.5.4 处理宽度固定的文本文件 1667.5.5 追加文本数据到一个现有的表 1677.6 使用剪贴板导入数据 1677.6.1 向一个表粘贴新记录 1687.6.2 通过从剪贴板上粘贴来替换记录 1707.7 从...
  • 1637.5.3 使用分隔文本文件 1657.5.4 处理宽度固定的文本文件 1667.5.5 追加文本数据到一个现有的表 1677.6 使用剪贴板导入数据 1677.6.1 向一个表粘贴新记录 1687.6.2 通过从剪贴板上粘贴来替换记录 1707.7 从...
  • 1637.5.3 使用分隔文本文件 1657.5.4 处理宽度固定的文本文件 1667.5.5 追加文本数据到一个现有的表 1677.6 使用剪贴板导入数据 1677.6.1 向一个表粘贴新记录 1687.6.2 通过从剪贴板上粘贴来替换记录 1707.7 从...
  • 1637.5.3 使用分隔文本文件 1657.5.4 处理宽度固定的文本文件 1667.5.5 追加文本数据到一个现有的表 1677.6 使用剪贴板导入数据 1677.6.1 向一个表粘贴新记录 1687.6.2 通过从剪贴板上粘贴来替换记录 1707.7 从...
  • 1637.5.3 使用分隔文本文件 1657.5.4 处理宽度固定的文本文件 1667.5.5 追加文本数据到一个现有的表 1677.6 使用剪贴板导入数据 1677.6.1 向一个表粘贴新记录 1687.6.2 通过从剪贴板上粘贴来替换记录 1707.7 从...
  • 1637.5.3 使用分隔文本文件 1657.5.4 处理宽度固定的文本文件 1667.5.5 追加文本数据到一个现有的表 1677.6 使用剪贴板导入数据 1677.6.1 向一个表粘贴新记录 1687.6.2 通过从剪贴板上粘贴来替换记录 1707.7 从...
  • 1637.5.3 使用分隔文本文件 1657.5.4 处理宽度固定的文本文件 1667.5.5 追加文本数据到一个现有的表 1677.6 使用剪贴板导入数据 1677.6.1 向一个表粘贴新记录 1687.6.2 通过从剪贴板上粘贴来替换记录 1707.7 从...

空空如也

空空如也

1 2 3
收藏数 58
精华内容 23
关键字:

vba复制文件到另一个文件夹