ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 三级目录如何批量创建超链接?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2010-3-22 16:49 | 显示全部楼层 |阅读模式
有三级文件的目录该怎么去做呢?
┣数学  
┃  ┣第一章 集合  
┃  ┃  ┣1.1 子集.doc  
┃  ┃  ┣1.2 子集二.doc  
┃  ┃  ┣1.3并集  
┃  ┃  ┃  ┣1.3.1并集1.doc  
┃  ┃  ┃  ┣1.3.2 并集2.doc  
┃  ┣第二章 函数概念与基本初等函数  
┃  ┃  ┣2.6函数模型及其应用.xls  
┃  ┃  ┣2.1函数的概念和图象.doc  
┃  ┃  ┣2.4幂函数.doc  
┃  ┃  ┣2.5函数与方程.xls  
┃  ┃  ┣2.3习题  
┃  ┃  ┃  ┣2.3.1 习题一.doc  
┃  ┃  ┃  ┣习题二.doc
含DOC 或EXCEL的全部 建立了超链接,全部是用鼠标
右键点击建立超链接找到该文件,操作费时。
我工作处理的文件多,可能远远不止两章,第一章,可能远远
不止三个文件,一个一个地用鼠标去建超链接太费时间了。
因此我想是否可以编程序写超链接:目录可以用文件目录生成树
生成,跟文件名是一一对应的,是相同的,因此是否可以这个目录
的1.1  的文字 然后与文件夹的文件名进行比较,相同则到这个
目录下写超链接,不相同则继续与下一个文件比较,相同则写
超链接。这样我就可以省很多时间,节约很多工作量。
谢谢帮忙思考

数学三级文件.rar

20.47 KB, 下载次数: 64

TA的精华主题

TA的得分主题

发表于 2010-3-22 17:09 | 显示全部楼层
记号、等高手解答

TA的精华主题

TA的得分主题

发表于 2010-3-22 17:34 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
你可以先写一个决断文件是否存在的自定义函数,然后=if(自定义函数(文件名),hyperlink(,),文件名)

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-3-23 11:52 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-3-25 15:08 | 显示全部楼层
楼主,请查看附件,所有的代码都在附件。测试一下,看看是否满足你的要求。

主要是使用DIR函数+递归,但是DIR函数没有排序的功能,所以程序还对文件和文件夹进行排序,并将WORD文档和EXCEL 文档分开显示。

第一层文件夹,本程序只支持对类似(第1章,第2章,,,)的排序,不支持对类似(第一章,第二章,,,,),所以楼主如果

采用这个程序,要将文件夹中的一、二、三、、、等改为阿拉伯数字。

以下是主要的递归部分:
  1. Sub Recsive(ByVal currentPath As String, ByVal Censhu As Integer)
  2.     '存储currentPath 目录下的文件夹数组
  3.     Dim DirShuzu() As String
  4.     '存储currentPath 目录下的.DOC 文件数组
  5.     Dim DocShuzu() As String
  6.     '存储currentPath 目录下的.XLS 文件数组
  7.     Dim XlsShuzu() As String
  8.     '搜索字串
  9.     Dim MyName$, temp$, i&, j&, k&, xh1&, xh2&
  10.     i = 0
  11.     j = 0
  12.     k = 0
  13.     MyName = Dir(currentPath, vbNormal + vbDirectory)
  14.    
  15.     Do While MyName <> ""
  16.         If MyName <> "." And MyName <> ".." Then
  17.             '搜索currentPath 目录下的所有文件夹
  18.             If (GetAttr(currentPath & MyName) And vbDirectory) = vbDirectory Then
  19.                 ReDim Preserve DirShuzu(i)
  20.                 DirShuzu(i) = currentPath + MyName + ""
  21.                 i = i + 1
  22.             '搜索currentPath 目录的所有word 文档
  23.             ElseIf MyName Like "*.doc" Or MyName Like "*.docx" Then
  24.                 ReDim Preserve DocShuzu(j)
  25.                 DocShuzu(j) = currentPath + MyName
  26.                 j = j + 1
  27.             '搜索currentPath 目录下的所有Excel 文档
  28.             ElseIf MyName Like "*.xls" Or MyName Like "*.xlsx" Then
  29.                 ReDim Preserve XlsShuzu(k)
  30.                 XlsShuzu(k) = currentPath + MyName
  31.                 k = k + 1
  32.             End If
  33.         End If
  34.         MyName = Dir
  35.     Loop
  36.     If j > 1 Then
  37.         ShuzuSort DocShuzu, Censhu, currentPath
  38.     End If
  39.     '将Word 文档显示在Excel 中
  40.     For xh1 = 0 To j - 1
  41.         temp = "┣"
  42.         For xh2 = 1 To Censhu
  43.             temp = "|  " + temp
  44.         Next
  45.         temp = temp + Mid(DocShuzu(xh1), Len(currentPath) + 1, Len(DocShuzu(xh1)))
  46.         ActiveSheet.Hyperlinks.Add Anchor:=Range("A65536").End(xlUp).Offset(1, 0), Address:=DocShuzu(xh1), TextToDisplay:=temp
  47.         Range("A65536").End(xlUp).Font.ColorIndex = 49
  48.     Next
  49.     If k > 1 Then
  50.         ShuzuSort XlsShuzu, Censhu, currentPath
  51.     End If
  52.     '将Excel 文档现在是工作表中
  53.     For xh1 = 0 To k - 1
  54.         temp = "┣"
  55.         For xh2 = 1 To Censhu
  56.             temp = "|  " + temp
  57.         Next
  58.         temp = temp + Mid(XlsShuzu(xh1), Len(currentPath) + 1, Len(XlsShuzu(xh1)))
  59.         ActiveSheet.Hyperlinks.Add Anchor:=Range("A65536").End(xlUp).Offset(1, 0), Address:=XlsShuzu(xh1), TextToDisplay:=temp
  60.         Range("A65536").End(xlUp).Font.ColorIndex = 49
  61.     Next
  62.     If i > 1 Then
  63.         ShuzuSort DirShuzu, Censhu, currentPath
  64.     End If
  65.     '递归搜索currentPath目录下的文件夹,所包含的文件夹和文件
  66.     For xh1 = 0 To i - 1
  67.         '先显示在进入递归
  68.         temp = "┣"
  69.         For xh2 = 1 To Censhu
  70.             temp = "|  " + temp
  71.         Next
  72.         temp = temp + Mid(DirShuzu(xh1), Len(currentPath) + 1, Len(DirShuzu(xh1)))
  73.         temp = Mid(temp, 1, Len(temp) - 1)
  74.         Range("A65536").End(xlUp).Offset(1, 0).Value = temp
  75.         Range("A65536").End(xlUp).Font.ColorIndex = 1
  76.         '进入递归
  77.         Recsive DirShuzu(xh1), (Censhu + 1)
  78.     Next
  79. End Sub
复制代码

[ 本帖最后由 clarkldq 于 2010-3-25 15:10 编辑 ]

数学三级文件.rar

33.19 KB, 下载次数: 163

TA的精华主题

TA的得分主题

发表于 2011-11-21 02:20 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-12-6 10:59 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
clarkldq 发表于 2010-3-25 15:08
楼主,请查看附件,所有的代码都在附件。测试一下,看看是否满足你的要求。

主要是使用DIR函数+递归,但 ...

请问一下,如何文件夹里还有PDF文件也想放到目录怎么做?

TA的精华主题

TA的得分主题

发表于 2021-1-23 11:52 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-15 20:56 , Processed in 0.024311 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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