ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 怎样用宏批量超链接!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-12-6 13:58 | 显示全部楼层
zhaogang1960 发表于 2012-12-6 13:03
你得先告诉我下图中的前4列数据是从哪里来的,从文件夹“分公司-文件1”和文件9999.txt中无法获得

GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory 这句为什么要用and?我把And vbDirectory) 去了好像也没有影响。这句是用来判断是不是文件夹的吧?属性是vbdirectory就可以判断是文件夹?

TA的精华主题

TA的得分主题

发表于 2012-12-6 14:11 | 显示全部楼层
zhaogang1960 发表于 2012-12-6 13:03
你得先告诉我下图中的前4列数据是从哪里来的,从文件夹“分公司-文件1”和文件9999.txt中无法获得

老师.第四列数据是手工写的.以前做都是加好前四列.再逐个去找链接路径.现在想能不能去找包含第四项名称的文件去.不会有重名称文件.例如,那个路径下只有一个包含文件1的文件或文件夹.不知道请教明白没有,还请老师帮忙啊.

TA的精华主题

TA的得分主题

发表于 2012-12-6 14:27 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
关于我的问题在书上找到答案了,一个点和两个点分别代表当前文件夹和上层文件夹{:soso_e128:}

TA的精华主题

TA的得分主题

发表于 2012-12-6 16:55 | 显示全部楼层
无限趋向 发表于 2012-12-6 14:11
老师.第四列数据是手工写的.以前做都是加好前四列.再逐个去找链接路径.现在想能不能去找包含第四项名称的 ...
  1. Sub Macro1()
  2.     Dim Fso As Object, arr, a, b, s$, t, i&
  3.     Dim arrf$(), mf&, d As Object
  4.     Application.ScreenUpdating = False
  5.     Set d = CreateObject("scripting.dictionary")
  6.     arr = Range("E1:E" & Range("E65536").End(xlUp).Row)
  7.     For i = 3 To UBound(arr)
  8.         d(arr(i, 1)) = i
  9.     Next
  10.     Set Fso = CreateObject("Scripting.FileSystemObject")
  11.     p = ThisWorkbook.Path & "\河北分公司制度目录"
  12.     Call GetFolders(p, Fso, arrf, mf)
  13.     With ActiveSheet
  14.         For i = 1 To mf
  15.             a = Split(arrf(i), "")
  16.             s = a(UBound(a))
  17.             b = Split(s, "-")
  18.             t = d(b(UBound(b)))
  19.             If t <> "" Then .Hyperlinks.Add Anchor:=Cells(t, 10), Address:=arrf(i)
  20.         Next
  21.     End With
  22.     Set Fso = Nothing
  23.     Application.ScreenUpdating = True
  24. End Sub

  25. Private Sub GetFolders(ByVal sPath$, Fso As Object, ByRef arrf$(), ByRef mf&)
  26.     Dim Folder As Object
  27.     Dim SubFolder As Object
  28.     Set Folder = Fso.GetFolder(sPath)
  29.     mf = mf + 1
  30.     ReDim Preserve arrf(1 To mf)
  31.     arrf(mf) = sPath
  32.     If Folder.SubFolders.Count > 0 Then
  33.         For Each SubFolder In Folder.SubFolders
  34.             Call GetFolders(SubFolder.Path, Fso, arrf, mf)
  35.         Next
  36.     End If
  37.     Set Folder = Nothing
  38.     Set SubFolder = Nothing
  39. End Sub

复制代码

TA的精华主题

TA的得分主题

发表于 2012-12-6 16:56 | 显示全部楼层
请看附件
VBA批量建立链接.rar (689.88 KB, 下载次数: 73)

TA的精华主题

TA的得分主题

发表于 2012-12-6 17:11 | 显示全部楼层
chengyu92102 发表于 2012-12-6 12:59
想自动生成如附件中的目录
文件名有日文,特殊字符

请测试:
  1. Dim ary(), m&

  2. Sub Macro1()
  3.     Dim s, a, cel, b, arr, brr(), n&, i&, l&
  4.     s = Array("┃  ┣", "┃  ┃  ┣", "┃  ┃  ┃  ┣", "┃  ┃  ┃  ┃  ┣", "┃  ┃  ┃  ┃  ┃  ┣")
  5.     Application.ScreenUpdating = False
  6.     m = 2
  7.     ReDim ary(1 To m)
  8.     ary(1) = ThisWorkbook.Path & ""
  9.     l = UBound(Split(ary(1), ""))
  10.     i = 1
  11.     Do While ary(i) <> ""
  12.         dirdir (ary(i))
  13.         If i > 1 Then
  14.             n = n + 1
  15.             ReDim Preserve brr(1 To 2, 1 To n)
  16.             brr(1, n) = ary(i)
  17.             brr(2, n) = Split(ary(i), "")(l)
  18.         End If
  19.         i = i + 1
  20.     Loop
  21.     With [z1].Resize(n, 2)
  22.         .Value = WorksheetFunction.Transpose(brr)
  23.         .Sort Key1:=Range("AA1"), Order1:=xlAscending
  24.         arr = .Value
  25.         .Clear
  26.     End With
  27.     n = 1
  28.     [A1].CurrentRegion.Clear
  29.     [A1] = "┣" & Split(ThisWorkbook.Name, ".")(0)
  30.     With ActiveSheet
  31.         For i = 1 To UBound(arr)
  32.             n = n + 1
  33.             a = Split(arr(i, 1), "")
  34.             Cells(n, 1) = s(UBound(a) - l - 1) & a(UBound(a) - 1)
  35.             MyFilename = Dir(arr(i, 1) & "*.*")
  36.             Do While MyFilename <> ""
  37.                 n = n + 1
  38.                 .Hyperlinks.Add Anchor:=.Cells(n, 1), Address:=arr(i, 1) & MyFilename, TextToDisplay:=s(UBound(a) - l) & MyFilename
  39.                 MyFilename = Dir
  40.             Loop
  41.         Next
  42.     End With
  43.     m = 0
  44.     Erase ary
  45.     Application.ScreenUpdating = True
  46.     MsgBox "完毕"
  47. End Sub

  48. Sub dirdir(MyPath)
  49.     Dim MyName
  50.     MyName = Dir(MyPath, vbDirectory)
  51.     Do While MyName <> ""
  52.         If MyName <> "." And MyName <> ".." Then
  53.             If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then
  54.                 m = m + 1
  55.                 ReDim Preserve ary(1 To m)
  56.                 ary(m - 1) = MyPath & MyName & ""
  57.             End If
  58.         End If
  59.         MyName = Dir
  60.     Loop
  61. End Sub





复制代码

TA的精华主题

TA的得分主题

发表于 2012-12-6 17:12 | 显示全部楼层
请看附件
01 法律法规原文.rar (273.62 KB, 下载次数: 43)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2012-12-7 08:57 | 显示全部楼层
本帖最后由 无限趋向 于 2012-12-7 08:57 编辑
zhaogang1960 发表于 2012-12-6 16:55


多谢zhaogang1960  老师的帮助. 不过,还有一些地方没有实现效果,文件3,文件11 ,这样的没有链接上,这个链接的目标文件夹中包含这样的文件,但不完全相等,当然,不会重复. 另外,最重要的.文件12,文件13,文件15 这样直接链到文件而不是目录上的能做到吗?

TA的精华主题

TA的得分主题

发表于 2012-12-7 10:02 | 显示全部楼层
无限趋向 发表于 2012-12-7 08:57
多谢zhaogang1960  老师的帮助. 不过,还有一些地方没有实现效果,文件3,文件11 ,这样的没有链接上,这个链 ...

我没有理解,请上传附件说明

TA的精华主题

TA的得分主题

发表于 2012-12-7 10:54 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
请老师帮看一下,在目录的第二个工作表里写了自己想要的样子,谢谢了

01 文件夹从属关系.rar

284.6 KB, 下载次数: 29

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

本版积分规则

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

GMT+8, 2025-1-15 13:48 , Processed in 0.029334 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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