ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > Excel VBA > 【原创作品】文件目录生成系统

【原创作品】文件目录生成系统

作者:绿色风 分类: 时间:2022-08-18 浏览:104
楼主
nothingwmm
利用Excel 生成用户指定文件夹下用户指定类型的文件,并可形成自由的超链接,便于查找特定类型的文件或文件整理。程序部分源代码非原创。
------------------------------------------

Thisworkbook里面代码:
  1. Private Sub Workbook_Open()
  2. Worksheets("sheet1").Visible = True
  3. Worksheets("sheet2").Visible = True
  4. Worksheets("sheet3").Visible = True
  5. Call Menudel
  6. Call MenuChoose.Show

  7. End Sub
  8. '以下代码由 James Zhou @tust2010 创建
  9. Sub Menudel()
  10. Dim msg As VbMsgBoxResult
  11.     For Each Sh In ThisWorkbook.Worksheets
  12.         If Sh.Name = "文件清单" Then msg = MsgBox("清单已经存在,是否覆盖", vbYesNo, "请仔细确认是否覆盖清单")
  13.         If msg = vbYes Then
  14.         On Error GoTo 0
  15.         Sheets("文件清单").Cells.Delete
  16.         Else
  17.            Exit For
  18.         End If
  19.     Next
  20. End Sub
  21. ' 以上代码由 James Zhou @tust2010 创建
-------------------------------------------

模块里面的代码:
  1. Sub MenubyJamesZhou()
  2.     Dim MyName, Dic, Did, I, T, F, TT, MyFileName
  3.     Dim filestyle1, filestyle2, filetype3, rowscount1, pos1 As Integer
  4.     Dim strtest As String
  5.     Set objShell = CreateObject("Shell.Application")
  6.     If Not objFolder Is Nothing Then lj = objFolder.self.Path & "\"
  7.     Set objFolder = Nothing
  8.     Set objShell = Nothing
  9.     T = Timer
  10.     Set Dic = CreateObject("Scripting.Dictionary")
  11.     Set Did = CreateObject("Scripting.Dictionary")
  12.     Dic.Add (lj), ""
  13.     I = 0
  14.     Do While I < Dic.Count
  15.         Ke = Dic.keys
  16.         MyName = Dir(Ke(I), vbDirectory)
  17.         Do While MyName <> ""
  18.             If MyName <> "." And MyName <> ".." Then
  19.                 If (GetAttr(Ke(I) & MyName) And vbDirectory) = vbDirectory Then
  20.                     Dic.Add (Ke(I) & MyName & "\"), ""
  21.                 End If
  22.             End If
  23.             MyName = Dir
  24.         Loop
  25.         I = I + 1
  26.     Loop
  27.     Did.Add ("文件清单"), ""
  28. filestyle1 = InputBox("请选择文件类型:" & Chr(10) & " 输入1:(*.*)" _
  29.     & Chr(10) & "输入2:(*.doc) " & Chr(10) & "输入3:(*.xls) " _
  30.      & Chr(10) & "输入4:(*.txt)" & Chr(10) & "输入5:(自定义类型)", "请输入您的文件类型", 1)
  31.     Select Case filestyle1
  32.     Case 1
  33.     filetype2 = "*.*"
  34.     Case 2
  35.     filetype2 = "*.doc"
  36.        Case 3
  37.     filetype2 = "*.xls"
  38.         Case 4
  39.     filetype2 = "*.txt"
  40.         Case 5
  41.     filetype2 = InputBox("请输入您的文件类型", "自定义文件类型", "*.pdf")
  42.     End Select
  43.     For Each Ke In Dic.keys
  44.         MyFileName = Dir(Ke & filetype2)
  45.         Do While MyFileName <> ""
  46.             Did.Add (Ke & MyFileName), ""
  47.             MyFileName = Dir
  48.         Loop
  49.     Next
  50.     For Each Sh In ThisWorkbook.Worksheets
  51.         If Sh.Name = "文件清单" Then
  52.             Sheets("文件清单").Cells.Delete
  53.             F = True
  54.             Exit For
  55.         Else
  56.             F = False
  57.         End If
  58.     Next
  59.     If Not F Then
  60.     Sheets.Add(After:=Sheets(Sheets.Count)).Name = "文件清单"
  61.     Sheets("文件清单").Move Before:=Sheets(1)
  62.     End If
  63.     Sheets("文件清单").[c1].Resize(Did.Count, 1) = WorksheetFunction.Transpose(Did.keys)
  64.     For I = 1 To Did.Count - 1
  65.         Sheets("文件清单").Cells(I + 1, 2) = "No." & I
  66.     Next I
  67.     ActiveWorkbook.Worksheets("文件清单").Sort.SortFields.Clear
  68.     ActiveWorkbook.Worksheets("文件清单").Sort.SortFields.Add Key:=Range("c1"), _
  69.         SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
  70.     With ActiveWorkbook.Worksheets("文件清单").Sort
  71.         .SetRange Range("c1:c" & Did.Count)
  72.         .Header = xlYes
  73.         .MatchCase = False
  74.         .Orientation = xlTopToBottom
  75.         .SortMethod = xlPinYin
  76.         .Apply
  77.     End With
  78.     Columns("c:c").EntireColumn.AutoFit
  79.     With Range("c1")
  80.         .HorizontalAlignment = xlCenter
  81.         .VerticalAlignment = xlCenter
  82.         .WrapText = False
  83.         .Orientation = 0
  84.         .AddIndent = False
  85.         .IndentLevel = 0
  86.         .ShrinkToFit = False
  87.         .ReadingOrder = xlContext
  88.         .MergeCells = False
  89.     End With
  90.     Selection.Font.Bold = True
  91.     For rowscount1 = 2 To Did.Count
  92.     pos1 = InStrRev(Cells(rowscount1, 3), ".")
  93.     Cells(rowscount1, 4) = Mid(Cells(rowscount1, 3), (pos1 + 1), (Len(Cells(rowscount1, 3)) - pos1))
  94.     Next rowscount1
  95.     Cells(1, 4) = "文件类型"
  96.     Cells(1, 2) = "文件编号"
  97.     Columns("b:d").EntireColumn.AutoFit
  98.     Range("B1:D19").Select
  99.     ActiveSheet.ListObjects.Add(xlSrcRange, Range("$B$1:$D$" & Did.Count), , xlYes).Name = _
  100.         "表7"
  101.     Range("表7[#All]").Select
  102.     ActiveSheet.ListObjects("表7").TableStyle = "TableStyleLight12"
  103.     TT = Timer - T
  104.     MsgBox "整个过程耗时:0" & TT & "秒"
  105.   End Sub
代码毕,运行结果如下图
----------------------------------------1.jpg
 
2.jpg
 
3.JPG
 
4.jpg
 
5.jpg
 
2楼
liuguansky
不错,学习,不过用时多了点。
3楼
海洋之星
进步好快啊,得向你学习了
4楼
罗刚君
Worksheets("sheet1").Visible = True
Worksheets("sheet2").Visible = True
Worksheets("sheet3").Visible = True
这个要处理一下,并非所有用户当前都有三个工作表的
尽量考虑所有可能的情况
-----------------------------------------
Sheets("文件清单").Select
Sheets("文件清单").Move Before:=Sheets(1)

Range("c1").Select
With Selection
等等 不需要使用SELECT方法,可以提速
5楼
Daniel1900
呵呵,好好学习学习!继续加油!
6楼
nothingwmm

谢谢罗版的火眼金睛
7楼
hl34278481
8楼
xihabang
能够上附件更好了
9楼
wjc2090742
学习学习。一出手就是这么系统的东西呢。
10楼
sxzhc123
有没有做好的啊,文章地址打不开啊。
11楼
UXUXUX
版主电脑里咋装不上去啊
12楼
sohoxs
学习~~
13楼
飝嬿尐愺
我只看到几张图片,没看到有源文件呀?我要怎么实现这个呢?求助~~谢谢!
14楼
wudixin96
弱弱地问下,这个有啥用啊?
15楼
有非有_无非无
在哪下载啊
16楼
yuanguiyi
正是我想要的东西,可是在哪下载呢
17楼
qqqwwww6
学习学习。一出手就是这么系统的东西呢。
18楼
lnt1231

能提高效率啊.

19楼
gysegz
怎么无法运行呀**
20楼
gysegz
怎么不能自动链接呀?
21楼
acecrazy
WMM好厉害,一上手就是这么复杂的东西。
22楼
kszcs
楼主:能把附件上传吗?谢谢!

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap