ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-12-11 15:37 | 显示全部楼层
zhaogang1960 发表于 2012-12-7 17:23
请测试:

Sub Macro1()
    Dim Fso As Object, arr, a, b, s$, t, i&
    Dim arrf$(), mf&, d As Object
    Application.ScreenUpdating = False
    Set d = CreateObject("scripting.dictionary")
    arr = Range("E1:E" & Range("E65536").End(xlUp).Row)
    For i = 3 To UBound(arr)
        d(arr(i, 1)) = i
    Next
    Set Fso = CreateObject("Scripting.FileSystemObject")
    p = ThisWorkbook.Path & "\河北分公司制度目录"
    Call GetFolders(p, Fso, arrf, mf)
    With ActiveSheet
        For i = 1 To mf
            a = Split(arrf(i), "\")
            s = a(UBound(a))
            a = Split(s, "(")
            s = a(0)
            b = Split(s, "-")
            s = b(UBound(b))
            b = Split(s, ".")
            s = b(0)
            t = d(s)
            If t <> "" Then .Hyperlinks.Add Anchor:=Cells(t, 10), Address:=arrf(i)
        Next
    End With
    Set Fso = Nothing
    Application.ScreenUpdating = True
End Sub
Private Sub GetFolders(ByVal sPath$, Fso As Object, ByRef arrf$(), ByRef mf&)
    Dim Folder As Object
    Dim SubFolder As Object
    Set Folder = Fso.GetFolder(sPath)
    mf = mf + 1
    ReDim Preserve arrf(1 To mf)
    arrf(mf) = sPath
    For Each File In Folder.Files
            mf = mf + 1
            ReDim Preserve arrf(1 To mf)
            arrf(mf) = sPath & "\" & File.Name
    Next
    If Folder.SubFolders.Count > 0 Then
        For Each SubFolder In Folder.SubFolders
            Call GetFolders(SubFolder.Path, Fso, arrf, mf)
        Next
    End If
    Set Folder = Nothing
    Set SubFolder = Nothing
End Sub


用了很好用. 真想学习一下啊.但VBA懂得非常少.  哪位老师能给解释一下这段代码吗

TA的精华主题

TA的得分主题

发表于 2012-12-11 16:44 | 显示全部楼层
无限趋向 发表于 2012-12-11 15:37
Sub Macro1()
    Dim Fso As Object, arr, a, b, s$, t, i&
    Dim arrf$(), mf&, d As Object
  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) 'E列数据写入数组
  7.      For i = 3 To UBound(arr) '逐行
  8.          d(arr(i, 1)) = i '用字典把E列内容和行号关联起来
  9.      Next
  10.      Set Fso = CreateObject("Scripting.FileSystemObject") '创建Fso对象
  11.      p = ThisWorkbook.Path & "\河北分公司制度目录" '路径
  12.      Call GetFolders(p, Fso, arrf, mf) '调用GetFolders子程序
  13.      With ActiveSheet '当前工作表
  14.          For i = 1 To mf '逐个文件或文件夹
  15.              a = Split(arrf(i), "") '""分开
  16.              s = a(UBound(a)) '最后一个
  17.              a = Split(s, "(") '再用"("分开
  18.              s = a(0) '第一个
  19.              b = Split(s, "-") '再用"-"分开
  20.              s = b(UBound(b)) '最后一个
  21.              b = Split(s, ".") '再用"."分开
  22.              s = b(0) '第一个
  23.              t = d(s) '求出该字符串在E列的行号
  24.              If t <> "" Then .Hyperlinks.Add Anchor:=Cells(t, 10), Address:=arrf(i) '如果这个行号存在,则创建超级链接
  25.          Next
  26.      End With
  27.      Set Fso = Nothing '释放内存
  28.      Application.ScreenUpdating = True '开启屏幕刷新
  29. End Sub
  30. Private Sub GetFolders(ByVal sPath$, Fso As Object, ByRef arrf$(), ByRef mf&) '求出子文件夹和子文件的子程序
  31.      Dim Folder As Object
  32.      Dim SubFolder As Object
  33.      Set Folder = Fso.GetFolder(sPath)
  34.      mf = mf + 1
  35.      ReDim Preserve arrf(1 To mf)
  36.      arrf(mf) = sPath '子文件夹写入数组
  37.      For Each File In Folder.Files
  38.         mf = mf + 1
  39.         ReDim Preserve arrf(1 To mf)
  40.         arrf(mf) = sPath & "" & File.Name '子文件写入数组
  41.      Next
  42.      If Folder.SubFolders.Count > 0 Then '如果还有子文件夹,则再调用本子程序(递归)
  43.          For Each SubFolder In Folder.SubFolders
  44.              Call GetFolders(SubFolder.Path, Fso, arrf, mf)
  45.          Next
  46.      End If
  47.      Set Folder = Nothing
  48.      Set SubFolder = Nothing
  49. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2012-12-14 23:14 | 显示全部楼层
本帖最后由 无限趋向 于 2012-12-14 23:15 编辑
zhaogang1960 发表于 2012-12-11 16:44


太感谢老师的耐心指导了。再请教您。代码中的这部分:
With ActiveSheet '当前工作表
         For i = 1 To mf '逐个文件或文件夹
             a = Split(arrf(i), "\") '"\"分开
             s = a(UBound(a)) '最后一个
             a = Split(s, "(") '再用"("分开
             s = a(0) '第一个
             b = Split(s, "-") '再用"-"分开
             s = b(UBound(b)) '最后一个
             b = Split(s, ".") '再用"."分开
             s = b(0) '第一个
         


是把每个文件夹都拆解成E列可能有的部分了。如果我不拆解,或者只拆到这一步:
For i = 1 To mf '逐个文件或文件夹
             a = Split(arrf(i), "\") '"\"分开
             s = a(UBound(a)) '最后一个

然后判断s 中是否包含E列中的某一个值,能否实现。
比如:拆解完 s="2012年费用政策讲解"   而E12单元格为   “费用政策讲解” ,只要判断出E12是包含当前路径值的,则建立链接,能做到吗?

TA的精华主题

TA的得分主题

发表于 2012-12-14 23:22 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
无限趋向 发表于 2012-12-14 23:14
太感谢老师的耐心指导了。再请教您。代码中的这部分:
With ActiveSheet '当前工作表
         For i ...

这都是根据你的奇特要求写出来的,不要再变化了,否则就乱套了,代码没有那么聪明

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2012-12-26 14:14 | 显示全部楼层
感谢zhaogang1960 ,找这个很久了

TA的精华主题

TA的得分主题

发表于 2013-4-22 08:47 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2013-9-29 16:31 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
我的出现问题了

TA的精华主题

TA的得分主题

发表于 2013-12-4 10:40 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
这个留纪念了。实用

TA的精华主题

TA的得分主题

发表于 2014-1-25 10:35 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
zhaogang1960 发表于 2012-12-7 17:01
请看附件

赵老师我是你的忠实粉丝。你的这个附件做得太好了。能否在B列列数每个文件夹里面有多少个文件呢。谢谢

法律法规原文.rar (268.4 KB, 下载次数: 67)

如图:黄色区域
2014-01-25-103100.jpg

TA的精华主题

TA的得分主题

发表于 2014-3-26 14:57 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
mark......................
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-15 14:26 , Processed in 0.027177 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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