ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 遍历文件夹,添加超链接

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-4-18 17:03 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
http://club.excelhome.net/thread-1391369-3-1.html看到ivccav分享的《获取指定文件夹及其子文件夹下所有文件信息、并做成超链接》一文,下载试了一下,很好用。但ivccav分享的用数组提取信息文件中,未加超链接代码。
本人学习VBA时间短,比葫芦画了一个瓢,效果不理想(无法在A列添加超链接,只能在B列添加)。
本人目的:在A列添加超链接。
求大师指导,谢谢!

求援文件.rar

37.88 KB, 下载次数: 64

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-4-18 17:04 | 显示全部楼层
本帖最后由 盘尼西林99 于 2019-4-18 18:38 编辑

Sub GetAllFiles()
Rem 下载自http://club.excelhome.net/thread-1391369-3-1.html
    Dim pth$, arr
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = -1 Then
            pth = .SelectedItems(1)
        Else
            MsgBox "您没有选择任何文件夹!", vbCritical: Exit Sub
        End If
    End With
    ReDim arr(1 To 6, 1 To 1)
    arr(1, 1) = "文件名称"
    arr(2, 1) = "文件位置"
    arr(3, 1) = "创建日期"
    arr(4, 1) = "修改日期"
    arr(5, 1) = "文件类型"
    arr(6, 1) = "文件大小"
    Getfd pth, arr
    arr = Application.WorksheetFunction.Transpose(arr) '文件信息已保存在arr数组中
    '实际使用时可不输出到工作表,直接在数组arr中查询需要的文件信息。以下10行可删除
    Application.ScreenUpdating = False
    With ActiveSheet
        .UsedRange.Clear
        .Cells(1, 1).Resize(UBound(arr, 1), UBound(arr, 2)) = arr
        r = .Range("a" & Rows.Count).End(3).Row
  
Rem 添加链接  2019-4-17 15时测试,在B列可以添加超链接,并省略后面的代码
        For Each c In .Range("b2:b" & r)
'            .Hyperlinks.Add Anchor:=c, Address:=c.Value, TextToDisplay _
'            :=Split(c, "\")(UBound(Split(c, "\")))
       .Hyperlinks.Add Anchor:=c, Address:=c.Value


rem 请大师修改上面的代码。本人试了一下,如将For Each c In .Range("b2:b" & r)修改为For Each c In .Range("A2:A" & r),貌似加上了超链接,但无法打开文件。
            
        Next
               
        .Range("a1:f" & r).Borders.LineStyle = xlContinuous
        .Range("a1:f" & r).Borders.Weight = xlThin
    End With
    Application.ScreenUpdating = True
    MsgBox "文件已全部获取!点『确定』键结束"
End Sub

Sub Getfd(ByVal pth As String, arr)
    Dim fso As Object, f, fd, ff
    Set fso = CreateObject("scripting.filesystemobject")
    Set ff = fso.getfolder(pth)
    For Each f In ff.Files
        ReDim Preserve arr(1 To 6, 1 To UBound(arr, 2) + 1)
        u = UBound(arr, 2)
        arr(1, u) = f.Name
        arr(2, u) = f
        arr(3, u) = f.DateCreated
        arr(4, u) = f.DateLastModified
'        arr(5, u) = f.Type
Rem 将文件类型修改为文件后缀名     2019-4-15  19:35
       arr(5, u) = Mid(f.Name, InStrRev(f.Name, ".", -1, 1) + 1)
       arr(6, u) = Format(f.Size / 1048576, "0.00MB")
    Next
    For Each fd In ff.subfolders: Getfd fd, arr: Next
End Sub

TA的精华主题

TA的得分主题

发表于 2019-4-18 17:55 | 显示全部楼层
  1. Sub GetAllFiles()
  2. Rem 下载自http://club.excelhome.net/thread-1391369-3-1.html
  3.     Dim pth$, arr
  4.     With Application.FileDialog(msoFileDialogFolderPicker)
  5.         If .Show = -1 Then
  6.             pth = .SelectedItems(1)
  7.         Else
  8.             MsgBox "您没有选择任何文件夹!", vbCritical: Exit Sub
  9.         End If
  10.     End With
  11.     ReDim arr(1 To 6, 1 To 1)
  12.     arr(1, 1) = "文件名称"
  13.     arr(2, 1) = "文件位置"
  14.     arr(3, 1) = "创建日期"
  15.     arr(4, 1) = "修改日期"
  16.     arr(5, 1) = "文件类型"
  17.     arr(6, 1) = "文件大小"
  18.     Getfd pth, arr
  19.     arr = Application.WorksheetFunction.Transpose(arr) '文件信息已保存在arr数组中
  20.     '实际使用时可不输出到工作表,直接在数组arr中查询需要的文件信息。以下10行可删除
  21.     For i = 2 To UBound(arr)
  22.         arr(i, 1) = "=hyperlink(""" & arr(i, 2) & """,""" & arr(i, 1) & """)"
  23.     Next i
  24.     Application.ScreenUpdating = False
  25.     With ActiveSheet
  26.         .UsedRange.Clear
  27.         .Cells(1, 1).Resize(UBound(arr, 1), UBound(arr, 2)) = arr
  28.         r = .Range("a" & Rows.Count).End(3).Row
  29.         .Range("a1:f" & r).Borders.LineStyle = xlContinuous
  30.         .Range("a1:f" & r).Borders.Weight = xlThin
  31.     End With
  32.     Application.ScreenUpdating = True
  33.     MsgBox "文件已全部获取!点『确定』键结束"
  34. End Sub

  35. Sub Getfd(ByVal pth As String, arr)
  36.     Dim fso As Object, f, fd, ff
  37.     Set fso = CreateObject("scripting.filesystemobject")
  38.     Set ff = fso.getfolder(pth)
  39.     For Each f In ff.Files
  40.         ReDim Preserve arr(1 To 6, 1 To UBound(arr, 2) + 1)
  41.         u = UBound(arr, 2)
  42.         arr(1, u) = f.Name
  43.         arr(2, u) = f
  44.         arr(3, u) = f.DateCreated
  45.         arr(4, u) = f.DateLastModified
  46. '        arr(5, u) = f.Type
  47. Rem 将文件类型修改为文件后缀名     2019-4-15  19:35
  48.        arr(5, u) = Mid(f.Name, InStrRev(f.Name, ".", -1, 1) + 1)
  49.        arr(6, u) = Format(f.Size / 1048576, "0.00MB")
  50.     Next
  51.     For Each fd In ff.subfolders: Getfd fd, arr: Next
  52. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-4-18 22:29 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-7-4 09:56 | 显示全部楼层

求问,可否同目录刷新超链接,不用每次都一级一级选择。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-16 20:30 , Processed in 0.039252 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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