ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

EH搜索     
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
Excel不给力? 何不试试FoxTable! Excel 2016函数公式学习大典 Office知识技巧免费学 打造核心竞争力的职场宝典
300集Office 2010微视频教程 Tableau-数据可视化工具 精品推荐-800套精选PPT模板,点击获取 ExcelHome出品 - VBA代码宝免费下载
你的Excel 2010实战技巧学习锦囊 欲罢不能, 过目难忘的 Office 新界面 Excel VBA经典代码实践指南
查看: 100887|回复: 108

[分享] VBA-目录及文件操作汇总

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2016-2-6 09:31 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:文件操作和FSO
本帖最后由 liulang0808 于 2016-2-6 19:00 编辑

fso已经贴过,不再赘述,详见下面链接:

fso提取汇总文件夹及其下的文件名及内容(递归操作字典汇总)
http://club.excelhome.net/thread-1165866-1-1.html

FSO之文件及文件夹操作及获取相关属性等
http://club.excelhome.net/thread-1174170-1-1.html


今天主要介绍dir,kill,name,mkdir,rmdir,filecopy及filedialog等
注意:介绍的示例是以正常条件下的,非正常条件的请预先判断或者使用on error容错等手段
不正常条件如:文件不存在的时候使用filecopy,文件打开的时候使用name等。

可以对比fso,看看具体差别
一、dir判断文件或文件夹是否存在
http://club.excelhome.net/forum. ... 1258425&pid=8556244
示例:
http://club.excelhome.net/forum. ... 1258425&pid=8556257
二、kill 删除文件
http://club.excelhome.net/forum. ... 1258425&pid=8556266
三、name 重命名文件名
http://club.excelhome.net/forum. ... 1258425&pid=8556267
四、mkdir创建文件夹及rmdir删除文件夹
http://club.excelhome.net/forum. ... 1258425&pid=8556271
五、filecopy拷贝文件
http://club.excelhome.net/forum. ... 1258425&pid=8556273
六、filedialog文件对话框(第一部分)
http://club.excelhome.net/forum. ... 1258425&pid=8556274
六、filedialog文件对话框(第二部分)
http://club.excelhome.net/forum. ... 425&pid=8556331

第七部分,部分属性相关的函数
http://club.excelhome.net/forum. ... 1258425&pid=8556333

第七部分,部分属性相关的函数-示例
http://club.excelhome.net/forum. ... 425&pid=8556339





评分

参与人数 20财富 +30 鲜花 +37 技术 +1 收起 理由
adud + 2
zhangyibin_yx + 2 优秀作品
logochen + 1 太强大了
WatchChen + 2 优秀作品
复道加餐 + 2 优秀作品

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-2-6 09:32 | 显示全部楼层
本帖最后由 liulang0808 于 2016-2-6 09:58 编辑

一、dir判断文件或文件夹是否存在
语法:Dir[(pathname[, attributes])]
Dir 函数的语法具有以下几个部分:
部分                描述
pathname        可选参数。用来指定文件名的字符串表达式,可能包含目录或文件夹、以及驱动器。如果没有找到 pathname,则会返回零长度字符串 ("")。
attributes        可选参数。常数或数值表达式,其总和用来指定文件属性。如果省略,则会返回匹配 pathname 但不包含属性的文件
attributes 参数的设置可为:
常数               值        描述
vbNormal        0        (缺省) 指定没有属性的文件。
vbReadOnly    1        指定无属性的只读文件
vbHidden        2        指定无属性的隐藏文件
VbSystem        4        指定无属性的系统文件 在Macintosh中不可用。
vbVolume        8        指定卷标文件;如果指定了其它属性,则忽略vbVolume 在Macintosh中不可用。
vbDirectory    16        指定无属性文件及其路径和文件夹。
vbAlias             64        指定的文件名是别名,只在Macintosh上可用。
注意 这些常数是由 VBA 所指定的,在程序代码中的任何位置,可以使用这些常数来替换真正的数值。
说明 在 Microsoft Windows 中, Dir 支持多字符 (*) 和单字符 (?) 的通配符来指定多重文件。
第一次调用 Dir 函数时,必须指定 pathname,否则会产生错误。如果也指定了文件属性,那么就必须包括 pathname。
Dir 会返回匹配 pathname 的第一个文件名。若想得到其它匹配 pathname 的文件名,再一次调用 Dir,且不要使用参数。如果已没有合乎条件的文件,则 Dir 会返回一个零长度字符串 ("")。一旦返回值为零长度字符串,并要再次调用 Dir 时,就必须指定 pathname,否则会产生错误。不必访问到所有匹配当前 pathname 的文件名,就可以改变到一个新的 pathname 上。但是,不能以递归方式来调用 Dir 函数。以 vbDirectory 属性来调用 Dir 不能连续地返回子目录。
提示 由于文件名并不会以特别的次序来返回,所以可以将文件名存储在一个数组中,然后再对这个数组排序。

评分

参与人数 4鲜花 +10 收起 理由
YZC51 + 2 太强大了
达州张先生 + 3 太强大了
autumnalRain + 2 优秀作品
yeminqiang + 3 感谢帮助

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-2-6 09:49 | 显示全部楼层
本帖最后由 liulang0808 于 2016-2-6 10:15 编辑

示例:
Sub dirtest()    rem 以下两段,是attributes的属性不同,返回的结果有出入,一个是文件,一个文件夹。前提是存在test目录,如果不存在,注意下返回结果
    MsgBox Dir(ThisWorkbook.Path & "\test\", vbDirectory)
    MsgBox Dir(ThisWorkbook.Path & "\test\", vbNormal)
        rem 使用通配符,限定文件类型,也可以限定文件名关键字等
     MsgBox Dir(ThisWorkbook.Path & "\test\*.txt", vbNormal)

     rem 以下两段代码的对比,可能是使用中遇到的异常情况,对比就知道差别了
    MsgBox Dir(ThisWorkbook.Path & "\", vbNormal)
    MsgBox Dir(ThisWorkbook.Path, vbNormal)
End Sub


反馈指定文件夹下,以t开头的文本文件列表
Sub dirlist()
    flnm = Dir(ThisWorkbook.Path & "\Test\t*.txt")
    Do While flnm <> ""
        MsgBox ThisWorkbook.Path & "\Test\" & flnm
        flnm = Dir
    Loop
End Sub


评分

参与人数 1鲜花 +3 收起 理由
达州张先生 + 3 值得肯定

查看全部评分

TA的精华主题

TA的得分主题

发表于 2016-2-6 09:55 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-2-6 09:57 | 显示全部楼层
kuaile5935 发表于 2016-2-6 09:55
大过年还这么近兢兢业业的分享,LZ威武。

有点时间,整理下资料的。不过有点混乱,不断修改发布的内容,

评分

参与人数 1鲜花 +3 收起 理由
达州张先生 + 3 值得肯定

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-2-6 09:59 | 显示全部楼层
本帖最后由 liulang0808 于 2016-2-6 10:09 编辑

二、kill 删除文件
语法:Kill pathname
必要的 pathname 参数是用来指定一个文件名的字符串表达式pathname 可以包含目录或文件夹、以及驱动器。
说明 Microsoft Windows 中,Kill 支持多字符 (*) 和单字符 (?) 的统配符来指定多重文件。
示例:
Sub Killtest()
    Kill ThisWorkbook.Path & "\Test.xls"
End Sub
使用比较简单,但是需要注意文件是否存在或者打开等异常情况,不然会报错。


评分

参与人数 1鲜花 +3 收起 理由
达州张先生 + 3 值得肯定

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-2-6 09:59 | 显示全部楼层
本帖最后由 liulang0808 于 2016-2-6 11:00 编辑

三、name 重命名文件名
语法:Name  oldpathname  As  newpathname

  
oldpathname
  
newpathname
必要参数。字符串表达式,指定新的文件名和位置,可以包含目录或文件夹、以及驱动器。而由 newpathname 所指定的文件名不能存在。
说明:Name 语句重新命名文件并将其移动到一个不同的目录或文件夹中。如有必要,Name 可跨驱动器移动文件。但当 newpathname oldpathname 都在相同的驱动器中时,只能重新命名已经存在的目录或文件夹。Name 不能创建新文件、目录或文件夹。
注意:在一个已打开的文件上使用Name,将会产生错误。必须在改变名称之前,先关闭打开的文件。Name 参数不能包括多字符 (*) 和单字符 (?) 的统配符。

示例:文件名相同时,等同于移动文件,而不修改文件名
Sub nametest()
    Name ThisWorkbook.Path & "\test\Test.txt" As "C:\Test\Test.txt"
End Sub

评分

参与人数 1鲜花 +3 收起 理由
达州张先生 + 3 值得肯定

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-2-6 10:00 | 显示全部楼层
本帖最后由 liulang0808 于 2016-2-6 10:40 编辑

四、mkdir创建文件夹及rmdir删除文件夹
创建文件夹Mkdir path:必要的 path 参数是用来指定所要创建的目录或文件夹的字符串表达式path 可以包含驱动器。如果没有指定驱动器,则MkDir 会在当前驱动器上创建新的目录或文件夹。
删除文件夹Rmdir path必要的 path 参数是一个字符串表达式,用来指定要删除的目录或文件夹。path 可以包含驱动器。如果没有指定驱动器,则 RmDir 会在当前驱动器上删除目录或文件夹。
说明:如果想要使用 RmDir 来删除一个含有文件的目录或文件夹,则会发生错误。在试图删除目录或文件夹之前,先使用 Kill 语句来删除所有文件。即,只能删除空文件夹

Sub MkdirandRmdir()
    rem 首先确定在当前路径下,test1是存在的才能再继续创建,不然会报错,就是路径不能一次性创建多层
    fdpath = ThisWorkbook.Path & "\test1\Test2\"
    MkDir fdpath
    MsgBox Dir(fdpath, vbDirectory) <> ""
    Dir ("")'大家可以注释掉,然后运行代码看看,会报错,原因可以自己思考下,文件夹存在!被使用?
    RmDir fdpath
    MsgBox Dir(fdpath, vbDirectory) <> ""
End Sub

评分

参与人数 1鲜花 +3 收起 理由
达州张先生 + 3 值得肯定

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-2-6 10:01 | 显示全部楼层
本帖最后由 liulang0808 于 2016-2-6 10:50 编辑

五、filecopy拷贝文件
语法FileCopy source, destination
  部分  
描述
source
destination
必要参数。字符串表达式,用来指定要复制的目地文件名。destination 可以包含目录或文件夹、以及驱动器。
说明:如果想要对一个已打开的文件使用 FileCopy语句,则会产生错误。另外在使用前建议使用dir判断下是否存在该文件
Sub FileCopytest()
    FileCopy ThisWorkbook.Path & "\Test\Test.txt", "C:\Test.txt"
End Sub

评分

参与人数 1鲜花 +3 收起 理由
达州张先生 + 3 值得肯定

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-2-6 10:01 | 显示全部楼层
本帖最后由 liulang0808 于 2016-2-6 10:59 编辑

六、filedialog文件对话框(第一部分)先上示例,因为涉及其他的方法属性
Sub Main()
    Dim fd AsFileDialog
    Set fd =Application.FileDialog(msoFileDialogFilePicker)
    Dim vrtSelectedItem As Variant
    With fd
        .AllowMultiSelect = True
       If .Show = -1Then
            For Each vrtSelectedItem In .SelectedItems               
                MsgBox "Selected item's path: " &vrtSelectedItem
            Next
        Else
        End If
    End With
   Set fd =Nothing
End Sub

(1)表达式.FileDialog(fileDialogType)  fileDialogType 是必须的,对应的类型如下:
名称
描述
msoFileDialogFilePicker
3
“文件选取器”对话框。
msoFileDialogFolderPicker
4
“文件夹选取器”对话框。
msoFileDialogOpen
1
打开对话框。
msoFileDialogSaveAs
2
另存为对话框。
(2)FileDialogFilters.Add 方法
文件对话框的文件类型下拉列表框的筛选器列表中添加一个新的文件筛选器。返回一个代表新添的文件筛选器的 FileDialogFilter 对象。
语法:表达式.Add(Description, Extensions, Position)表达式   必需。一个代表 FileDialogFilters 对象的变量。
名称
必选/可选
数据类型
描述
Description
必选
String
该文本表示要添加到筛选器列表中的文件扩展名的说明。
Extensions
必选
String
该文本代表要添加到筛选器列表中的文件扩展名。可以指定多个扩展名,每个扩展名必须以分号分隔。例如,可以向以下字符串分配参数:“*.txt; *.htm”。
  
注释:不需要在扩展名两侧添加括号。在说明和扩展名字符串连接成一个文件筛选器项时,Microsoft Office 将自动在扩展名字符串两侧添加括号。
  
Position
可选
Variant
表示新控件在筛选列表中位置的数字。新筛选将插入到该位置的筛选之前。如果忽略该参数,筛选将添加到指定列表的末端。
说明:列表中的每个筛选器由两部分组成:文件扩展名(例如 .txt)和文件扩展名的文本说明(例如“文本文件”)。二者相结合,文件筛选器将在文件类型下拉列表框中显示为:文本文件(*.txt)。请注意,向列表中添加筛选器时,不会删除默认的筛选器。仅当选中窗口选项时才显示筛选器。如果 Position 无效,将显示超出范围运行时错误。如果 DescriptionExtensions 值无效,将显示运行时错误(分析)。
3FileDialog.Title 属性
设置或获取使用 FileDialog 对象显示的文件对话框的标题。可读/







评分

参与人数 2鲜花 +5 收起 理由
mengfei773 + 2 感谢帮助
达州张先生 + 3 太强大了

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关注官方微信,高效办公专列,每天发车

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2020-5-29 22:29 , Processed in 0.073730 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2020 Wooffice Inc.

   

沪公网安备 31011702000001号 沪ICP备11019229号

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:徐怀玉律师 李志群律师

快速回复 返回顶部 返回列表