Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 6499|回复: 4

[分享] 获得文件名的几种方法之三:Shell对象

[复制链接]
发表于 2011-4-28 01:21 | 显示全部楼层 |阅读模式

这次给大家分享通过Shell对象来获取文件夹下文件名,它的优点是可以自由选择文件夹,返回文件夹下文件名的功能。
首先声明,这个shell对象我真是不了解,也是东拼西凑,把他的非常小的一部分功能用在获取文件名上,个人感觉,能自己选择文件夹,确实是比dir函数法和FSO对象法又灵活了不少。
仍旧是写一个函数,自己用的同时,巩固自己的知识:
详见代码与解释
  1. '本函数返回一个下标从1开始的字符串数组;
  2. '如果没有得到文件名,得到仅含有1个元素的数组,元素值为空值


  3. Function getfilename()
  4.   Dim iCounter As Integer '定义iCounter变量作为计数器
  5.   Dim asFileName() As String '定义数组变量asFileName储存获得的文件名
  6.   Dim selObject As Object '定义Shell对象变量;
  7.   Dim fldObject As Object '定义Floder对象变量;
  8.   Dim fldItobject As Object '定义FolderItem对象变量
  9.   
  10.   Set selObject = CreateObject("Shell.Application") '创建Shell对象,对象引用赋值给selObject对象变量;
  11.   Set fldObject = selObject.BrowseForFolder(0, "请选择文件夹", &H210) '通过selObject对象的方法获得Folder对象变量,对象引用赋值给fldObject对象变量
  12.   iCounter = 1 '给计数器赋初值
  13.   
  14.   If fldObject Is Nothing Then '如果“浏览文件夹”点击了取消,Folder对象为空,执行以下代码
  15.      ReDim Preserve asFileName(1 To 1)
  16.      asFileName(1) = ""
  17.      getfilename = asFileName
  18.      Exit Function '如果没有该路径,制造一个只含一个元素的数组,元素值为空,然后退出函数过程;
  19.   End If
  20.   
  21.   '获取路径名
  22.   '通过Folder的Items方法,可以得到文件夹下所有文件和文件夹的信息,fldItobject是FolderItem对象,代表每个文件和文件夹
  23.   For Each fldItobject In fldObject.Items
  24.     If fldItobject.IsFolder = False Then '如果当前FolderItem不是文件夹,执行下面代码
  25.       ReDim Preserve asFileName(1 To iCounter) '利用计数器,重新定义数组asFileName
  26.       asFileName(iCounter) = fldItobject.Path '获取的完整路径名赋值给文件名数组
  27.       iCounter = iCounter + 1
  28.     End If
  29.   Next fldItobject
  30.   
  31.   '通过fldObject.Items的count属性,判断文件夹下是否有文件
  32.    If fldObject.Items.Count = 0 Then
  33.       ReDim Preserve asFileName(1 To 1)
  34.       asFileName(1) = ""
  35.       getfilename = asFileName
  36.       Exit Function '如果没有得到符合条件的文件名,制造一个只含一个元素的数组,元素值为空,然后退出函数过程;
  37.    End If
  38.    
  39.     getfilename = asFileName '将获得的数组赋值给函数名
  40.    
  41.     Set selObject = Nothing
  42.     Set fldObject = Nothing
  43.    
  44. 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.ItemsFolderItem是方法,可以返回文件夹下所有文件与子文件夹对象的集合。
fldItobject是一个FolderItem对象,代表文件夹下1个文件或子文件夹对象。

附件供测试使用,代码在“Shell对象法.xls”文件的模块1中,其他文件为测试辅助文件
获取文件名的方法3-Shell对象.rar (26.64 KB, 下载次数: 130)

评分

参与人数 2 +32 收起 理由
兰色幻想 + 20 字母现在学习方法很对头,go on~~~
9lee + 12 辛苦了,下了好好学习

查看全部评分

发表于 2011-4-28 08:34 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2011-4-28 08:37 | 显示全部楼层
对这个shell对象我确实很理解,关于我写的这个自定义函数有什么不合适的或者需要修改的地方,请大家不吝赐教啊。dri函数法和FSO对象法也是一样的,大家发现有什么不合适的,告诉我啊。
回复

使用道具 举报

发表于 2011-4-28 11:47 | 显示全部楼层
很好啊,字母,这样的学习很对路,继续看到你更多的总结
回复

使用道具 举报

 楼主| 发表于 2011-4-28 14:04 | 显示全部楼层
嘿嘿,谢谢兰版的鼓励。
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-6-4 23:37 , Processed in 0.321065 second(s), 8 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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