fso统计文件数量

  • fso统计文件数量,如果不区分文件类型,可以非常方便  fso.getfolder().files.count
  • 但是fso统计某种类型的文件数量,需要遍历才行
  • 可以用 for each 遍历
  • 最准的方法是用  fso.getExtensionName() = "" 来判断
  • 用 right(filename,3)=""  得明确的知道 后缀名位数,一般是知道是哪种 后缀名才行
  • 比如要统计 xls  xlsx  xlsm 就必须用 fso.getExtensionName( 完整filepath)

 

代码1:使用后缀名匹配 fso.getextensionName

Sub jackma101()
Dim path1
path1 = "C:\Users\Administrator\Desktop\test1"

Call ponyma101(path1)

End Sub



Function ponyma101(path1)
' 先查某类型的文件数量

Dim fso As Object
Dim fd1 As Object
Dim f1 As Object


Set fso = CreateObject("scripting.filesystemobject")
Set fd1 = fso.getfolder(path1)

x1 = fd1.Files.Count
Debug.Print "所有文件数为:" & x1

For Each f1 In fd1.Files
  If fso.getextensionname(path1 & "\" & f1.Name) = "txt" Then
'  fso.getfile(path1).getextensionname
'  f1.getextensionname
'只有一种语法可这么用
  y1 = y1 + 1
  End If
Next

Debug.Print ".txt文件数为:" & y1

End Function

代码2 简单方法  if filename like "*.txt" then

Sub jackma101()
Dim path1
path1 = "C:\Users\Administrator\Desktop\test1"

Call ponyma101(path1)

End Sub



Function ponyma101(path1)
' 先查某类型的文件数量

Dim fso As Object
Dim fd1 As Object
Dim f1 As Object


Set fso = CreateObject("scripting.filesystemobject")
Set fd1 = fso.getfolder(path1)

x1 = fd1.Files.Count
Debug.Print "所有文件数为:" & x1

For Each f1 In fd1.Files
  If f1.Name Like "*.txt" Then
'只有一种语法可这么用
'  If fso.getextensionname(path1 & "\" & f1.Name) = "txt" Then
'  fso.getfile(path1).getextensionname
'  f1.getextensionname
  y1 = y1 + 1
  End If
Next

Debug.Print ".txt文件数为:" & y1

End Function

 

 

代码3  局限性

  • UCase(Right(Item, 3))
  • 大小写转换函数  ucase 和 lcase
  • 别人写的这个,right(filename,3) 这个我觉得不准,比如 后缀名是 xlsm 这个就识别不了,不如 fso.getextensionname()
Private Sub Command1_Click()
    Dim fso As Object, fpath As String
    Dim myfolder As Object
    fpath = "E:\初中同学"
    Set fso = CreateObject("scripting.filesystemobject")
    Set myfolder = fso.getfolder(fpath)
    For Each Item In myfolder.Files
       If UCase(Right(Item, 3)) = "TXT" Then Print Item
    Next
    Set fso = Nothing
End Sub

 

LCase 函数
语法:LCase(string)
说明:返回转成小写的 String。
必要的 string 参数可以是任何有效的字符串表达式。如果 string 包含 Null,将返回 Null。
只有大写的字母会转成小写;所有小写字母和非字母字符保持不变。

UCase 函数
语法:UCase(string)
说明:返回 Variant (String),其中包含转成大写的字符串。
必要的 string 参数为任何有效的字符串表达式。如果 string 包含 Null,将返回 Null。
只有小写的字母会转成大写;原本大写或非字母之字符保持不变。

 

StrConv 函数
语法:StrConv(string, conversion, LCID)
说明:返回按指定类型转换的 Variant (String)。
StrConv 函数的语法有下面的命名参数:
string 必要参数。要转换的字符串表达式。
conversion 必要参数。Integer。其值的和决定转换的类型。
LCID 可选的。如果与系统LocaleID不同,则为LocaleID(系统LocaleID为缺省值。)
conversion 参数的设置值为:
vbUpperCase 值为1 将字符串文字转成大写。
vbLowerCase 值为2 将字符串文字转成小写。
vbProperCase 值为3 将字符串中每个字的开头字母转成大写。
vbWide* 值为4* 将字符串中单字节字符转成双字节字符。
vbNarrow* 值为8* 将字符串中双字节字符转成单字节字符。
vbKatakana** 值为16** 将字符串中平假名字符转成片假名字符。
vbHiragana** 值为32** 将字符串中片假名字符转成平假名字符。
vbUnicode 值为64 根据系统的缺省码页将字符串转成 Unicode。 (在Macintosh中不可用。)
vbFromUnicode 值为128 将字符串由 Unicode 转成系统的缺省码页。 (在Macintosh中不可用。)

 

注意 这些常数是由 VBA 指定的。可以在程序中使用它们来替换真正的值。其中大部分是可以组合的,

例如 vbUpperCase + vbWide,互斥的常数不能组合,例如 vbUnicode + vbFromUnicode。当在不适用

的区域使用常数 vbWide、vbNarrow、vbKatakana,和 vbHiragana 时,就会导致运行时错误。
下面是一些一般情况下的有效分界符:Null (Chr$(0)),水平制表符 (Chr$(9)),换行 (Chr$(10)),

垂直制表符 (Chr$(11)),换页 (Chr$(12)) ,回车 (Chr$(13)),空白 (SBCS) (Chr$(32))。在 DBCS

中,空白的实际值会随国家/地区而不同。
说明:在把 ANSI 格式的 Byte 数组转换为字符串时,您应该使用 StrConv 函数。当您转换 Unicode

格式的这种数组时,使用赋值语句。

补充: VBA函数Lcase相对应的 函数为Lower
      VBA函数Ucase相对应的函数为Upper