这次给大家分享通过Shell对象来获取文件夹下文件名,它的优点是可以自由选择文件夹,返回文件夹下文件名的功能。 首先声明,这个shell对象我真是不了解,也是东拼西凑,把他的非常小的一部分功能用在获取文件名上,个人感觉,能自己选择文件夹,确实是比dir函数法和FSO对象法又灵活了不少。 仍旧是写一个函数,自己用的同时,巩固自己的知识: 详见代码与解释 - '本函数返回一个下标从1开始的字符串数组;
- '如果没有得到文件名,得到仅含有1个元素的数组,元素值为空值
- Function getfilename()
- Dim iCounter As Integer '定义iCounter变量作为计数器
- Dim asFileName() As String '定义数组变量asFileName储存获得的文件名
- Dim selObject As Object '定义Shell对象变量;
- Dim fldObject As Object '定义Floder对象变量;
- Dim fldItobject As Object '定义FolderItem对象变量
-
- Set selObject = CreateObject("Shell.Application") '创建Shell对象,对象引用赋值给selObject对象变量;
- Set fldObject = selObject.BrowseForFolder(0, "请选择文件夹", &H210) '通过selObject对象的方法获得Folder对象变量,对象引用赋值给fldObject对象变量
- iCounter = 1 '给计数器赋初值
-
- If fldObject Is Nothing Then '如果“浏览文件夹”点击了取消,Folder对象为空,执行以下代码
- ReDim Preserve asFileName(1 To 1)
- asFileName(1) = ""
- getfilename = asFileName
- Exit Function '如果没有该路径,制造一个只含一个元素的数组,元素值为空,然后退出函数过程;
- End If
-
- '获取路径名
- '通过Folder的Items方法,可以得到文件夹下所有文件和文件夹的信息,fldItobject是FolderItem对象,代表每个文件和文件夹
- For Each fldItobject In fldObject.Items
- If fldItobject.IsFolder = False Then '如果当前FolderItem不是文件夹,执行下面代码
- ReDim Preserve asFileName(1 To iCounter) '利用计数器,重新定义数组asFileName
- asFileName(iCounter) = fldItobject.Path '获取的完整路径名赋值给文件名数组
- iCounter = iCounter + 1
- End If
- Next fldItobject
-
- '通过fldObject.Items的count属性,判断文件夹下是否有文件
- If fldObject.Items.Count = 0 Then
- ReDim Preserve asFileName(1 To 1)
- asFileName(1) = ""
- getfilename = asFileName
- Exit Function '如果没有得到符合条件的文件名,制造一个只含一个元素的数组,元素值为空,然后退出函数过程;
- End If
-
- getfilename = asFileName '将获得的数组赋值给函数名
-
- Set selObject = Nothing
- Set fldObject = Nothing
-
- End Function
复制代码
代码中有几个需要解释的地方 (1)Set selObject = CreateObject("Shell.Application") Shell对象是个外部对象,需要引用,或者用CreateObject函数创建; (2)Set fldObject =selObject.BrowseForFolder(0, "请选择文件夹", &H210) Folder对象是文件夹对象,是Shell下属的众多对象之一,通过Shell对象的BrowseForFolder方法获得; 语法如下: Shell.BrowseForFolder(Hwnd,Title,Options,[RootFolder]) 参数如下: Hwnd:包含对话框的窗体句柄,一般设置为0;(我反正不知道什么是句柄) Title:在对话框中显示的说明,为字符串; Options:使用对话框的样式,为长整数;(不同值效果不同,具体我说不清楚,嘿嘿) RootFolder:顶层文件夹(可选,默认为桌面) (3)For Each fldItobject In fldObject.Items
fldObject.Items是Folder的Item是方法,可以返回文件夹下所有文件与子文件夹对象的集合。 fldItobject是一个FolderItem对象,代表文件夹下1个文件或子文件夹对象。
附件供测试使用,代码在“Shell对象法.xls”文件的模块1中,其他文件为测试辅助文件 |