ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

vba管理自己的文件

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-5-12 22:26 | 显示全部楼层 |阅读模式
本帖最后由 605407217 于 2020-5-12 22:58 编辑

    Excel 的功能真的太强大了,不仅可以管理数据,还可以用来管理你的文件。   大家有没有这种体会——当我们去一家小书店找一本书的时候,总是先找书架上的标签,然后在相应的书架上找书;当我们去一个大型图书馆找一个书的时候,总是先在终端机上查找书名,然后到对应的位置找书。
    当磁盘里文件太多的时候,我们总喜欢用文件夹给它们分类,这样可以方便我们查找。但是文件超级多的时候,翻文件夹都不方便的时候,该如何应对呢?有人会说文件浏览器可以查找文件。对,是查找。可是我今天说的不是用浏览器查找,而是用excel查找。因为excel的查找速度比浏览器快很多。
   excel的查找功能大家都了解吧,了解的人会说“它只能查数据,不能查文件呀”。下面详细介绍如何用excel来查找文件。分为两步:1,为所有的文件建一个目录;2,创建超链接与各个文件关联。
   1,我们可以用表格为所有的文件做一个目录,把所有文件的路径和名称存放的表格中。相信这项工作大家一定都会,但是对于一些人来讲,工程浩大,做起来非常困,简直是本末倒置、舍近求远。
   2,上一步我们已经为所有的文件做好了目录,然后为每一条目录建立一个超链接,链接地址指定对应的文件。觉得上一步非常困难的同学,这一步也会相当的困难。
  历史书里最轻描淡写,却又最触目惊心的一句话是:“我们走了一些弯路……” 不要再说:“成功是没有捷径的” 我们已经被欺骗过无数次了。那么捷径何在?待我缓缓道来。
    下面是VBA代码:
‘提取所有子文件夹路径
Sub FsoGetFolderList()
Dim rowIndex As Integer, mypath As String, wjj As Object
rowIndex = 1
mypath = ThisWorkbook.Path
Set wjj = Application.FileDialog(msoFileDialogFolderPicker)
wjj.Show
mypath = wjj.SelectedItems(1)
Do
    If rowIndex = 1 Then
        GetFolderPath (mypath)
        Cells(rowIndex, 1).Value = mypath
    Else
        GetFolderPath (Cells(rowIndex, 1).Value)
    End If
    rowIndex = rowIndex + 1
Loop Until Cells(rowIndex, 1).Value = ""
End Sub

Function GetFolderPath(mainFolderPath)
Dim mainFolder As Object, childFolders As Object, childfolder As Object
Dim index As Integer
Dim fso As New FileSystemObject
Set mainFolder = fso.GetFolder(mainFolderPath)
Set childFolders = mainFolder.SubFolders
index = Cells(4 ^ 8, 1).End(xlUp).Row + 1
For Each childfolder In childFolders
    Cells(index, 1).Value = childfolder.Path
    index = index + 1
Next
Set fso = Nothing
Set mainFolder = Nothing
Set childFolders = Nothing
Set childfolder = Nothing
End Function
‘提取对应文件夹内所有文件名称
Sub fsogetfilelist()
On Error Resume Next
Dim childfile As Object, childfiles As Object, fol As Object
Dim col As Integer, n As Integer, pat As String
Dim fso As New FileSystemObject
Cells.Clear
Call FsoGetFolderList
For n = 1 To Range("a1").End(xlDown).Row
    pat = Cells(n, 1).Value
    Set fol = fso.GetFolder(pat)
    Set childfiles = fol.Files
    col = 2
    For Each childfile In childfiles
        Cells(n, col).Value = childfile.Name
        col = col + 1
    Next
Next
Set childfile = Nothing
Set childfiles = Nothing
Set fol = Nothing
Set fso = Nothing
Columns.AutoFit
End Sub
‘建立超链接
Sub jlclj()
Dim m As Integer, rg As Range, rge As Range, r As Integer, st As String
For r = 1 To Range("a1").End(xlDown).Row
    st = Cells(r, 1).Value
    ActiveSheet.Hyperlinks.Add Cells(r, 1), st
Next r
Set rg = ActiveSheet.UsedRange.Offset(0, 1).SpecialCells(xlCellTypeConstants)
For Each rge In rg
    st = Cells(rge.Row, 1).Value2 & "\" & rge.Value2
    ActiveSheet.Hyperlinks.Add rge, st
Next
Set rg = Nothing: Set rge = Nothing
End Sub
以上是全部VBA代码,运行fsogetfilelis()完成第1步操作创建目录;运行jlclj()
完成第2步操作建立超链接。
以上两步操作的效果是这样的:
image.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-5-14 11:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
OFFICE2016

获取文件夹.zip

55.21 KB, 下载次数: 53

TA的精华主题

TA的得分主题

发表于 2020-5-15 18:46 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢分享

TA的精华主题

TA的得分主题

发表于 2020-8-9 21:16 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-25 23:14 , Processed in 0.039127 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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