ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 彭希仁

递归 搜索文件(搜索目录及子目录)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2008-5-29 20:29 | 显示全部楼层
本帖已被收录到知识树中,索引项:递归

我指的ID是唯一的行号(地址),可样可以快速的找到地址.

TA的精华主题

TA的得分主题

发表于 2008-5-29 20:36 | 显示全部楼层
QUOTE:
以下是引用43379677在2008-5-29 20:29:47的发言:

我指的ID是唯一的行号(地址),可样可以快速的找到地址.

一时还没明白您的意思!父子关系怎样体现!

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-5-30 09:23 | 显示全部楼层
QUOTE:
以下是引用丸究阵引在2008-5-29 20:36:09的发言:

一时还没明白您的意思!父子关系怎样体现!

e8anumAQ.rar (34.53 KB, 下载次数: 68)
内容ID老父ID弟弟ID长子ID
F:\11-12-1.mdb102
F:\DSC03059.jpg203
F:\EXCEL常用工具及说明.rar304
F:\DSC03061.jpg405
F:\DSC05928.jpg506
F:\DSC05930.jpg607
F:\新建文件夹70248
F:\新建文件夹\3月.xls879
F:\新建文件夹\75C750009710
F:\新建文件夹\75C75000.xls10711
F:\新建文件夹\维修单4-1-10.XLS11712
F:\新建文件夹\维修单4-11-20.XLS12713
F:\新建文件夹\维修单4-21-30.XLS13714
F:\新建文件夹\重复维修率.xls14715
F:\新建文件夹\维修量.XLS15716

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-5-30 09:24 | 显示全部楼层

Public arr1, y%
Sub peng()
    ReDim arr1(1 To 65536, 1 To 5)
    y = 0
    Call xi(ActiveWorkbook.Path, 0)
    Cells(2, 1).Resize(y, 5) = arr1
End Sub

'a查询文件条件设置
'pt路径设置

Sub xi(pt, ByVal f)
    On Error GoTo ren
    Dim x%, i%, z%
    ReDim arr(1 To 100)
    dirs = Dir(pt & "\", vbDirectory)
    Do While dirs <> ""
        If dirs <> "." And dirs <> ".." Then
            x = x + 1
            If x > UBound(arr) Then ReDim Preserve arr(1 To UBound(arr) + 100)
            arr(x) = pt & "\" & dirs
        End If
        dirs = Dir
    Loop
    For i = 1 To UBound(arr)
        If arr(i) = "" Then Exit Sub
        y = y + 1
        arr1(y, 1) = arr(i)
        arr1(y, 2) = y  '自已ID
        arr1(y, 3) = f  '父ID
        If i = 1 And f > 0 Then arr1(f, 5) = y   '长子
        If z > 0 Then arr1(z, 4) = y   '弟
        z = y
        Call xi(arr(i), y)
    Next i
ren:
End Sub

自动生成树形存储结构代码

TA的精华主题

TA的得分主题

发表于 2008-5-30 10:37 | 显示全部楼层
QUOTE:
以下是引用彭希仁在2008-5-30 9:23:27的发言:


内容ID老父ID弟弟ID长子ID
F:\11-12-1.mdb102
F:\DSC03059.jpg203
F:\EXCEL常用工具及说明.rar304
F:\DSC03061.jpg405
F:\DSC05928.jpg506
F:\DSC05930.jpg607
F:\新建文件夹70248
F:\新建文件夹\3月.xls879
F:\新建文件夹\75C750009710
F:\新建文件夹\75C75000.xls10711
F:\新建文件夹\维修单4-1-10.XLS11712
F:\新建文件夹\维修单4-11-20.XLS12713
F:\新建文件夹\维修单4-21-30.XLS13714
F:\新建文件夹\重复维修率.xls14715
F:\新建文件夹\维修量.XLS15716

明白了!

MDB 列有256的限制,当然在实际应用中超过256的可能没有,可不能那样做。也想到用一个单位格存储路径,可想象中麻烦事也可能不小。

还有路径文件名都一样,也是个麻烦事,当然这应该能处理!

TA的精华主题

TA的得分主题

发表于 2008-5-30 10:39 | 显示全部楼层
对于我的问题看谁有奇思妙想!

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-5-30 11:04 | 显示全部楼层

我的方法列只需5列就足够了,只要行够就可以了.

我重新开一下贴子,讨论这个话题,也许能更深入.

http://club.excelhome.net/viewthread.php?tid=325846&px=0

[此贴子已经被作者于2008-5-30 11:40:09编辑过]

TA的精华主题

TA的得分主题

发表于 2008-5-30 13:44 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
QUOTE:
以下是引用彭希仁在2008-5-30 11:04:12的发言:

我的方法列只需5列就足够了,只要行够就可以了.

我重新开一下贴子,讨论这个话题,也许能更深入.

http://club.excelhome.net/viewthread.php?tid=325846&px=0


粗看起来没问题!晚上再说!

TA的精华主题

TA的得分主题

发表于 2008-5-30 16:43 | 显示全部楼层
QUOTE:
以下是引用丸究阵引在2008-5-30 13:44:53的发言:

粗看起来没问题!晚上再说!

可用字典实现:

Sub macro1()
Dim arr, i, dic, d
Set dic = CreateObject("scripting.dictionary")
arr = [a1].CurrentRegion
ReDim brr(2 To UBound(arr))
For i = 2 To UBound(arr)
dic(arr(i, 2) & " ") = arr(i, 2)
If Not dic.exists(arr(i, 2)) Then
dic(arr(i, 1)) = " " & arr(i, 2) & " " & arr(i, 1)
Else
dic(arr(i, 1)) = dic(arr(i, 2)) & " " & arr(i, 1)
End If
For Each d In dic.keys
If d <> arr(i, 2) And dic(d) Like " " & arr(i, 1) & " #*" Then dic(d) = Replace(dic(d), " " & arr(i, 1) & " ", dic(arr(i, 1)) & " ")
Next
Next
Debug.Print Join(dic.items, vbCrLf)
End Sub

Returns:

23
 0 23 1
 0 23 2
11
 0 22 11 3
22
 0 22 4
 0 22 11 5
 0 22 6
 0 22 7
1
 0 23 1 8
 0 22 9
0
 0 10
 0 22 11
 0 22 12
 0 22 13
 0 22 14
26
 0 23 24 25 26 15
 0 23 24 25 26 16
 0 22 17
 0 23 24 25 26 18
 0 22 19
 0 22 20
 0 21
 0 22
 0 23
 0 23 24
24
 0 23 24 25
25
 0 23 24 25 26
 0 23 24 27

TA的精华主题

TA的得分主题

发表于 2008-5-30 16:44 | 显示全部楼层
QUOTE:
以下是引用彭希仁在2008-5-30 11:04:12的发言:

我的方法列只需5列就足够了,只要行够就可以了.

我重新开一下贴子,讨论这个话题,也许能更深入.

http://club.excelhome.net/viewthread.php?tid=325846&px=0


仔细看了看,其实你的ID 、老父ID就是我的ID、GID。

实际应用中,有这两例数足够了。

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

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-19 16:12 , Processed in 0.050179 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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