7,763
社区成员
发帖
与我相关
我的任务
分享
Dim FilesCount As Long
Dim MaxCount As Long
Private Sub Command1_Click()
Msgbox "最大的数是:" & GetFolderMaxCount("C:\ttt", 0) '只查询单层的效果
Msgbox "最大的数是:" & GetFolderMaxCount("C:\ttt", 2) '最多深入查询三层目录查询的效果
Msgbox "最大的数是:" & GetFolderMaxCount("C:\ttt") '查询指定目录里(包含全部子目录)的效果
End Sub
Public Function GetFolderMaxCount(FolderPath As String, Optional RecursionLayer As Long = -1) As Long
MaxCount = 0
GetFolderMaxCount = RecursionFolder(FolderPath, RecursionLayer)
End Function
Private Function RecursionFolder(FolderPath As String, Optional RecursionLayer As Long = -1) As Long
Dim ReturnString As String, ReadAttrib As Long, TempString As String
Dim FolderList() As String, FolderListCount As Long, X As Long
Dim NowNumeric As Long
If Right(FolderPath, 1) <> "\" Then
FolderPath = FolderPath & "\"
End If
ReturnString = Dir(FolderPath, vbDirectory + vbHidden + vbSystem + vbReadOnly)
Do
ReturnString = Dir(, vbHidden + vbSystem + vbReadOnly)
If ReturnString <> "" Then
ReadAttrib = GetAttr(FolderPath & ReturnString)
ReadAttrib = ReadAttrib / (2 ^ 4)
ReadAttrib = ReadAttrib And 1
If ReadAttrib = 1 Then
'属于目录
If ReturnString <> "." And ReturnString <> ".." Then
If IsNumeric(ReturnString) = True Then
'目录属于数字名称
NowNumeric = Int(ReturnString)
If MaxCount < NowNumeric Then
MaxCount = NowNumeric
End If
End If
On Error GoTo NewArray
FolderListCount = UBound(FolderList)
FolderListCount = FolderListCount + 1
ReDim Preserve FolderList(1 To FolderListCount)
GoTo SetArrayValue
NewArray:
FolderListCount = 1
ReDim FolderList(1 To FolderListCount)
SetArrayValue:
FolderList(FolderListCount) = FolderPath & ReturnString
End If
Else
'属于文件
If Len(ReturnString) > 4 Then
If UCase(Right(ReturnString, 4)) = ".TXT" Then
TempString = Left(ReturnString, Len(ReturnString) - 4)
If IsNumeric(TempString) = True Then
'文件名属于数字名称
NowNumeric = Int(TempString)
If MaxCount < NowNumeric Then
MaxCount = NowNumeric
End If
End If
End If
End If
End If
End If
Loop While ReturnString <> ""
On Error GoTo NoFolder
FolderListCount = UBound(FolderList)
For X = 1 To FolderListCount
If RecursionLayer <> -1 Then
If RecursionLayer > 0 Then
Call RecursionFolder(FolderList(X), RecursionLayer - 1)
End If
Else
Call RecursionFolder(FolderList(X), RecursionLayer)
End If
Next X
NoFolder:
RecursionFolder = MaxCount
End Function