ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 3677|回复: 9

[求助] 请求帮助-根据文件夹目录生成菜单(已解决)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2011-8-26 08:13 | 显示全部楼层 |阅读模式
本帖最后由 huanglicheng 于 2011-9-3 15:43 编辑

请求帮助,根据某一个文件夹目录结构.用VBA在点击一个按钮时生成一个菜单,菜单的目录级别与文件夹一样
最终实现效果如下图类似
截图00.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-8-26 09:47 | 显示全部楼层
本帖最后由 huanglicheng 于 2011-8-26 23:47 编辑

请问有人可以帮我看一下.{:soso_e114:}

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-8-30 10:46 | 显示全部楼层
再次求助一下。实在很需要这一项功能。希望哪位大师能帮忙看看

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-9-1 19:57 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 huanglicheng 于 2011-9-1 21:04 编辑

求助了多个地方没有解决,自已组织了些代码效果还是实现了。可能还有些不足,先分享给大家参考参考
Sub Test()    '使用双字典,旨在提高速度
    Dim MyName$, I, MyFileName$, rr$
    Dim d As Object, Dic As Object
    Set d = CreateObject("scripting.dictionary")
    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.BrowseForFolder(0, "选择文件夹", &H10, 0)
    If Not objFolder Is Nothing Then lj = objFolder.self.Path & "\" Else MsgBox "没有选择文件夹": Exit Sub
    Set objFolder = Nothing
    Set objShell = Nothing
    On Error Resume Next

    CommandBars("tmpContextMenu").Delete
    Dim m As CommandBar
    Set m = CommandBars.Add("tmpContextMenu", msoBarPopup)
    Set regex1 = CreateObject("VBSCRIPT.REGEXP")    'RegEx为建立正则表达式
    With regex1
        .Global = True    '设置全局可用
        .Pattern = "[^\\]+"
    End With
    Set oSubMenu = m.Controls.Add(msoControlPopup)
    oSubMenu.Caption = lj
    Set oSubMenu2 = oSubMenu
    Set Dic = CreateObject("Scripting.Dictionary")    '创建一个字典对象
    Set d = CreateObject("Scripting.Dictionary")   '创建一个字典对象
    Dic(lj) = 0
    I = 0
    Do While I < Dic.Count
        Ke = Dic.keys   '开始遍历字典
        MyName = Dir(Ke(I), vbDirectory)    '查找目录
        Do While MyName <> ""
            If MyName <> "." And MyName <> ".." Then
                If (GetAttr(Ke(I) & MyName) And vbDirectory) = vbDirectory Then    '如果是次级目录
                    Dic(Ke(I) & MyName & "\") = 0    '就往字典中添加这个次级目录名作为一个条目
                End If
            End If
            MyName = Dir    '继续遍历寻找
        Loop
        I = I + 1
    Loop
For Each Ke In Dic.keys
        MyFileName = Dir(Ke & "*.*")
        Do While MyFileName <> ""
            If MyFileName <> "." And MyFileName <> ".." Then
                Set c1 = regex1.Execute(lj)
                Set c = regex1.Execute(Ke & MyFileName)
                If c.Count > c1.Count Then
                    For j = c1.Count To c.Count - 1
                        q = c.Item(j)
                        rr = rr & c.Item(j)
                        If Not d.exists(rr) Then
                            d(rr) = 0
                            If InStr(q, ".") = 0 Then
                                Set d(rr) = oSubMenu.Controls.Add(msoControlPopup)
                                Set oSubMenu = d(rr)
                                d(rr).Caption = q
                            Else
                                Set d(rr) = oSubMenu.Controls.Add(msoControlButton)
                                d(rr).Caption = q
                            End If
                        Else
                            Set oSubMenu = d(rr)
                        End If
                    Next j
                    Set oSubMenu = oSubMenu2
                    rr = ""
                End If
            End If
            MyFileName = Dir
        Loop
    Next
    m.ShowPopup
    Set c1 = Nothing
    Set c = Nothing
    Set Dic = Nothing
    Set d = Nothing
    Set m = Nothing
    Set oSubMenu = Nothing
    Set oSubMenu2 = Nothing
    Set regex1 = Nothing
End Sub生成效果图:
截图00.jpg



TA的精华主题

TA的得分主题

发表于 2011-9-1 20:52 | 显示全部楼层
http://club.excelhome.net/thread-724566-1-1.html
这里的代码库里面有一个完全动态创建菜单的例子,你可以直接拿去用,修改下根目录就可以了

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-9-2 08:04 | 显示全部楼层
本帖最后由 huanglicheng 于 2011-9-2 08:54 编辑

谢谢楼上的朋友,我想用这个代码和我其他功能连合一起,之间想改的地方也挺多了。你这个比我那要快好多{:soso_e181:}我的实现的一次性把目录全部建完。你的代码是一次性建一级目录。

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-9-3 15:44 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

TA的精华主题

TA的得分主题

发表于 2012-10-8 22:36 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
楼主的思路,完成的怎么样了,这几天我正在研究这个问题!{:soso_e121:}

TA的精华主题

TA的得分主题

发表于 2015-12-26 21:48 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-12-27 08:20 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-22 09:02 , Processed in 0.036194 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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