Excel精英培训网

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

获得文件名的几种方法之二:FSO对象

[复制链接]
发表于 2011-4-27 00:16 | 显示全部楼层 |阅读模式
上次写了用dir函数可以获取某个文件夹下的某类扩展名的文件名,经过学习发现FSO对象也可以,而且还更好理解,试着写了一个,不过这次和上次有所不同,可以试着提供带路径的文件名啦。FSO的这个经典用法也很多,兰版很早就写过,
http://www.excelpx.com/thread-5934-1-1.html
我用fso对象写个函数,也是获取某个文件夹下的扩展名,是熟悉FSO对象的过程,也算是对知识的巩固吧:

详见代码与解释

  1. '下面这个函数具有获取给定路径下文件名或者路径名的功能;
  2. '函数有二个参数sPathName,NameOrPath
  3. 'sPathName 必选参数,用来传递路径;
  4. 'NameOrPath 可选参数,用来提供参数,决定返回文件名还是路径名,只有1,2两个值,默认是1
  5. '本函数返回一个下标从1开始的字符串数组;
  6. '如果没有得到文件名,得到仅含有1个元素的数组,元素值为空值


  7. Function getFileName(sPathName As String, Optional NameOrPath As Byte = 1)

  8.   Dim iCounter As Integer '定义iCounter变量作为计数器
  9.   Dim asFileName() As String '定义数组变量asFileName储存获得的文件名
  10.   Dim fsoFSO As Object '定义fsoFSO对象存储FileSystemObject对象
  11.   Dim flFile As File '定义flFile对象储存文件夹下每个文件
  12.   Dim bFdExist As Boolean 'bFdExist变量用来储存是否存在文件夹

  13.   Set fsoFSO = CreateObject("Scripting.FileSystemObject") '创建FileSystemObject对象,就是用这个对象来操作
  14.   
  15.   'FolderExists是FileSystemObject的一个方法,主要用来判断是否存在该文件夹,返回布尔变量;
  16.   '通过这一步来判断给出的路径是否在系统里存在,从而为下一步返回文件名数组做准备;
  17.    bFdExist = fsoFSO.FolderExists(sPathName)
  18.   
  19.    iCounter = 1 '给计数器赋初值
  20.    
  21.    If Not bFdExist Then
  22.       ReDim Preserve asFileName(1 To 1)
  23.       asFileName(1) = ""
  24.       getFileName = asFileName
  25.       Exit Function '如果没有该路径,制造一个只含一个元素的数组,元素值为空,然后退出函数过程;
  26.    End If
  27.    
  28.    '对NameOrPath参数进行判断,如果NameOrPath不是1或2的话,直接赋值为1;
  29.    If NameOrPath <> 1 And NameOrPath <> 2 Then
  30.       NameOrPath = 1
  31.    End If
  32.    
  33.    '以下语句得到文件名数组
  34.    If NameOrPath = 1 Then '判断是需要文件名还是路径名
  35.       '通过fsoFSO.GetFolder(sPathName).Files得到Files对象,File对象在Files对象中循环,获取文件名
  36.       For Each flFile In fsoFSO.GetFolder(sPathName).Files
  37.          ReDim Preserve asFileName(1 To iCounter) '利用计数器,重新定义数组asFileName
  38.          asFileName(iCounter) = flFile.Name '获取的文件名赋值给文件名数组
  39.          iCounter = iCounter + 1
  40.       Next flFile
  41.    Else
  42.       '获取路径名
  43.       For Each flFile In fsoFSO.GetFolder(sPathName).Files
  44.          ReDim Preserve asFileName(1 To iCounter) '利用计数器,重新定义数组asFileName
  45.          asFileName(iCounter) = flFile.Path '获取的完整路径名赋值给文件名数组
  46.          iCounter = iCounter + 1
  47.       Next flFile
  48.    End If
  49.    
  50.    '通过fsoFSO.GetFolder(sPathName).Files的count属性,判断文件夹下是否有文件名
  51.    If fsoFSO.GetFolder(sPathName).Files.Count = 0 Then
  52.       ReDim Preserve asFileName(1 To 1)
  53.       asFileName(1) = ""
  54.       getFileName = asFileName
  55.       Exit Function '如果没有得到符合条件的文件名,制造一个只含一个元素的数组,元素值为空,然后退出函数过程;
  56.    End If
  57.    
  58.    getFileName = asFileName '将获得的数组赋值给函数名
  59.       
  60. End Function
复制代码



这个需要解释一下:
fsoFSO.GetFolder(sPathName).Files
(1)fsoFSO是一个FileSystemObject对象;
(2)GetFolderFileSystemObject的一个方法,用来返回一个Folder对象,这里就是通过fsoFSO.GetFolder(sPathName)返回了一个文件夹对象;
(3)Files作为Folder对象的一个属性,返回一个Files对象;
fsoFSO.GetFolder(sPathName).Files就是返回了一个Files对象;Files对象就是我们所需要的文件夹下所有文件的集合;

简单点说
fsoFSO变量(FileSystemObject对象)------ fsoFSO.GetFolder(sPathName)(Folder对象)------- fsoFSO.GetFolder(sPathName).Files(Files对象

附件供测试使用,代码在“FSO对象法.xls”文件的模块1中,其他文件为测试辅助文件


获取文件名的方法2-FSO对象.rar (26.62 KB, 下载次数: 120)
发表于 2011-4-27 08:37 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-7 09:28 , Processed in 0.363032 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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