`
dingjun1
  • 浏览: 214380 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

自己用的一段用于生成文件目录的Excel宏

阅读更多
转载:http://blog.163.com/weizy@126/blog/static/8450240201051032057311/

'Special Announcement
'CreateCatalog
'V1.0
'Powered by Kenneth
'This program is free and Open Source
'All copyright reserved.

'Edition update list
'V1.0 All basic functions available,
'creates a number of worksheets according to the first level subfolder names
'creates all files catalog of each first level subfolder worksheet
'create relative hyperlinks between worksheets and to every file.


Sub CreateCatalog()
'变量声明
'Program explanation
'This is a VBA program which only can be used under Microsoft Excel environment
'The program is used to create a catalog of all subfolders and files in a specified folder (same as this program position)

Dim MyPath As String, MyFileName As String '路径名和文件名
Dim TempCounterI As Integer, TempCounterJ As Integer  '计数变量
Dim TempStr As String '临时变量用于根据目录表生成不同工作表时中转
Dim TempStr2 As String '临时变量用于生成超链接
Dim ws As Worksheet

'临时关闭屏幕更新和显示报警
Application.ScreenUpdating = False
Application.DisplayAlerts = False
On Error Resume Next

'设置搜索路径
MyPath = ThisWorkbook.Path
TempCounterI = 1
TempCounterJ = 1
'开始搜索路径
 MyFileName = Dir(MyPath & "\*.*", 16) '第一次使用Dir函数时必须带路径,之后不带路径,自动返回该目录中下一个文件值。参数16见函数帮助

'清除原有工作簿中内容
For Each Worksheet In ThisWorkbook.Worksheets
    If Worksheets.Count > 1 Then
        Worksheets(2).Delete
    End If
Next
ThisWorkbook.Worksheets(1).Name = "目录" '更改第一个表名称
   

'取根目录列表放在第一个表中
Do While MyFileName <> ""   '开始循环
 If (MyFileName <> ".") And (MyFileName <> "..") And (GetAttr(MyPath & "\" & MyFileName) And vbDirectory) Then '如果为目录则存在B列
  Range("B" & TempCounterI) = MyFileName
  TempCounterI = TempCounterI + 1
 End If
  MyFileName = Dir(, 16) '继续搜索下一个文件
Loop

'根据根目录列表生成不同的工作表
TempStr = ThisWorkbook.Worksheets(1).Cells(TempCounterJ, 2)
Do While TempStr <> ""
For Each ws In ThisWorkbook.Worksheets
    If LCase(ws.Name) = LCase(TempStr) Then
        MsgBox ("Error") '如果有重名的表则过程终止
        Exit Sub
    End If
Next

Set ws = ThisWorkbook.Worksheets.Add(after:=Sheets(Sheets.Count)) '生成新表
ws.Name = ThisWorkbook.Worksheets(1).Cells(TempCounterJ, 2)      '新表名称为根目录下第一层子目录的名称。为了避免生成太多表,本程序仅针对第一层子目录生成不同的工作表。
Set ws = Nothing

'调用子程序生成每张子表的内容,并生成目录到子表的超链接
Call Sublist(MyPath, TempStr) '子过程内容见下面
Str2 = ThisWorkbook.Sheets(TempCounterJ + 1).Name '生成到每个文件的超链接
ThisWorkbook.Sheets(1).Range("A" & TempCounterJ).hyperlinks.Add Anchor:=ThisWorkbook.Sheets(1).Range("A" & TempCounterJ), Address:="", SubAddress:=Str2 & "!A1", TextToDisplay:="打开"
TempCounterJ = TempCounterJ + 1
TempStr = ThisWorkbook.Worksheets(1).Cells(TempCounterJ, 2)
Loop

'补充内容,将根目录下的文件也列出来
ThisWorkbook.Sheets(1).Cells(TempCounterI, 1).EntireRow.Insert
TempCounterI = TempCounterI + 1
ThisWorkbook.Sheets(1).Cells(TempCounterI, 1).EntireRow.Insert
ThisWorkbook.Sheets(1).Range("A" & TempCounterI) = "以下为根目录下文件列表"
TempCounterI = TempCounterI + 1

MyPath = ThisWorkbook.Path
MyFileName = Dir(MyPath & "\*.*")
Do While MyFileName <> "" ' And TempCounterI <= 1000
  If MyFileName <> "目录整理.xls" Then
  ThisWorkbook.Sheets(1).Range("B" & TempCounterI) = MyFileName
  Str2 = ThisWorkbook.Sheets(1).Name
  ThisWorkbook.Sheets(1).Range("A" & TempCounterI).hyperlinks.Add Anchor:=ThisWorkbook.Sheets(1).Range("A" & TempCounterI), Address:=MyPath & "\" & MyFileName, SubAddress:="", TextToDisplay:="打开"
  TempCounterI = TempCounterI + 1
  End If
 
  MyFileName = Dir()
Loop

'打开屏幕更新和显示报警
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub


'子过程,用于生成每个子目录下所有文件及其下所有子目录内文件的清单和超链接
Sub Sublist(MyPath As String, Myname As String)
    Dim Str1 As String '用于存储目录的临时变量
    Dim Str2 As String '用于存储文件名的临时变量
    Dim Str3 As String '用于生成超链接的临时变量
    Dim i As Integer '计数用临时变量
    Dim j As Integer '计数用临时变量
    Dim m As Integer '计数用临时变量
   
    ThisWorkbook.Sheets(Myname).Range("C1") = MyPath & "\" & Myname '生成当前文件路径
   
    i = 1
    j = 1
    m = 0
   
    '开始循环
    Do
    Str1 = ThisWorkbook.Sheets(Myname).Range("C" & i)
    Str2 = Dir(Str1 & "\*.*", 16) '从当前表C列取临时保存的路径值,在dir函数中,每个路径下只有第一次需要用路径值
   
    Do While Str2 <> "" '循环,依次判断文件类型
    If (Str2 <> ".") And (Str2 <> "..") Then
        If (GetAttr(Str1 & "\" & Str2) And vbDirectory) Then '如果是目录则暂存在C列
            j = j + 1
            ThisWorkbook.Sheets(Myname).Range("C" & j) = Str1 & "\" & Str2
        Else
            m = m + 1
            ThisWorkbook.Sheets(Myname).Range("B" & m) = Str2 '如果不是目录则在B列依次列出
            Range("A" & m).hyperlinks.Add Anchor:=Range("A" & m), Address:=Str1 & "\" & Str2, SubAddress:="", TextToDisplay:="打开"
            '从A列生成到B列文件的超链接
        End If
    End If
        Str2 = Dir(, 16) '继续搜索下一个文件,直到为空
    Loop
    
    i = i + 1 'i+1,开始取下一个子目录的路径,直到所有的子目录被遍历
    Loop While ThisWorkbook.Sheets(Myname).Range("C" & i).Value <> ""
   
    ThisWorkbook.Sheets(Myname).Columns(3).Delete '删除临时保存路径的第C列
    ThisWorkbook.Sheets(Myname).Cells(1, 1).EntireRow.Insert '插入一行
    Str3 = ThisWorkbook.Worksheets(1).Name '在插入的第一行生成到第一个表的超链接
    Range("A1").hyperlinks.Add Anchor:=Range("A1"), Address:="", SubAddress:=Str3 & "!A1", TextToDisplay:="返回"
   
End Sub







执行“工具→宏→录制新宏”命令(如图),按“保存在”右侧的下拉按钮,选中“个人宏工作簿”选项后,“确定”进入“宏”录制状态;不需要进行任何操作,直接单击随后展开的“宏”工具条中的“停止录制”按钮,软件会自动生成一个隐藏的“个人宏工作簿”。以后想在“个人宏工作簿”中编辑宏时,就不需要再进行此步操作了。


执行“工具→宏→VisualBasic编辑器”命令(或直接按“Alt+F11”),进入VBA编辑状态。在左侧“工程资源管理器”中,展开 “VBAProject(PERSONAL.XLSB)”选项(这就是“个人宏工作簿”),双击其中的“模块1”,然后用上述代码替换右侧编辑区中的原有代码.

输入完成后,关闭VBA编辑窗口返回到Excel编辑状态。

把EXCEL放到要生成目录的文件夹下,运行宏就会在EXCEL中生成。
分享到:
评论

相关推荐

    列出当前目录下的所有文件的Excel宏

    "列出当前目录下的所有文件的Excel宏"是一种实用的技术,它能够帮助用户快速整理和管理计算机中的文件信息。以下将详细讲解这一知识点及其应用。 首先,Excel宏(Macros)是Microsoft Excel中的一个功能,它允许...

    Excel宏操作翔实指导

    ### Excel宏操作翔实指导 #### 一、宏的基本概念 宏是一种自动化工具,它可以记录用户的操作步骤,并根据这些步骤自动生成相应的代码。在Excel中,宏能够帮助用户执行重复性的任务,从而大大提高工作效率。 #### ...

    CATIA生成焊点球宏

    宏的代码可能涉及读取Excel表格、解析数据、创建几何体对象以及在3D视图中显示这些对象等一系列步骤。 在实际应用中,"CATIA生成焊点球宏"还可以进一步扩展,例如添加颜色编码以表示不同类型的焊点,或者集成计算...

    excel2003 生成oracle 建表语句

    2. **编写宏**:宏是用Visual Basic for Applications (VBA) 编写的,可以读取Excel中的数据并生成相应的SQL语句。 3. **运行宏**:启用Excel的宏功能后,执行宏会自动生成建表语句,这些语句可以直接复制到SQL...

    excel也能实现自动生成目录

    在Excel中创建自动生成目录的功能,可以通过VBA(Visual Basic for Applications)编程来实现,这是一种内置于Microsoft Office中的脚本语言。以下是如何在Excel中设置和执行这个自动生成目录的详细步骤: 首先,你...

    金山WPS开发工具excel宏VBA插件

    在描述中提到的"金山WPS开发工具excel宏VBA插件"是针对WPS表格(类似于Microsoft Excel)的一个扩展功能,允许用户通过宏和VBA(Visual Basic for Applications)来自动化和自定义工作簿的操作。 **VBA (Visual ...

    EXCEL文档自动切割并转换为多个CSV格式文件的宏

    在使用宏之前,你需要根据自己的需求修改上述代码中的切割条件和新文件名生成规则。例如,如果你希望按照行数切割,你可以添加检查行数的条件;如果你希望按照特定列的值切割,你需要引用该列并设置相应的条件。 在...

    心形动态函数的excel宏实现和Matlab实现(程序文件)

    在本主题中,我们将深入探讨如何使用Excel宏和Matlab来实现一个动态的心形函数,以及如何将这种动态过程转化为视频格式。心形函数是一种视觉上吸引人的图形,常常用于表达情感或者作为数学示例。这里,我们不仅关注...

    Excel-VBA应用:循环将多个工作表另存为PDF的宏代码

    在Excel中,VBA(Visual Basic for Applications)是一种强大的编程工具,可以让我们自动化许多重复性的任务,例如在本例中的“Excel-VBA应用:循环将多个工作表另存为PDF的宏代码”。这个宏功能允许用户批量将工作...

    excel常用的259个宏

    "excel常用的259个宏"这个压缩包文件包含了200多个宏的实例,旨在帮助用户熟悉并掌握Excel宏的应用。以下将详细阐述一些关键的Excel宏知识点。 1. **宏的录制与播放**:Excel提供了一个简单的宏录制功能,用户只需...

    使用自动化生成Excel数据图表

    首先,我们需要安装pandas和openpyxl库,这两个库分别用于读取Excel数据和生成Excel文件。安装命令如下: ``` pip install pandas openpyxl ``` 然后,我们可以使用以下代码读取Excel文件并创建图表: ```python ...

    EXCEL宏表函数大全

    2. **循环语句**: For...Next, Do...Loop, While...Wend,用于重复执行一段代码。 3. **错误处理**: On Error...GoTo,用于捕获和处理运行时错误。 六、宏的安全性与禁用 由于宏可能包含潜在的恶意代码,因此Excel...

    彻底理解Excel中的宏

    1. **共享特性**:每个Excel文件都有自己的VBE界面,但它们共用同一套基本结构和设置。 2. **个性化编辑**:虽然每个文件的VBE界面默认相似,但可以根据需求进行个性化编辑。 3. **界面关联性**:当关闭所有Excel...

    Excel宏-供参考

    Excel宏是一种强大的功能,它是Excel内置的VBA(Visual Basic for Applications)编程语言的应用,允许用户自定义工作簿的行为,实现自动化任务,提高工作效率。在Excel中,宏可以帮助执行一系列复杂的操作,例如...

    excel生成建表SQl

    在"生成建表SQL.xls"这个Excel文件中,我们可能看到每一行代表一个字段,包括字段名、数据类型、是否为主键、是否创建索引、默认值、是否允许为空以及注释等列。通过特定的公式或者VBA宏,我们可以将这些信息整理成...

    利用EXCEL批量修改文件名字

    至于压缩包文件“BFCN1.0”,由于没有提供具体内容,我们可以假设这是一个包含了用于演示或练习如何利用Excel批量改名的样本文件集。在实践中,你可以根据上述步骤,加载这个压缩包中的文件列表到Excel,然后按照...

    Excel-VBA宏编程实例源代码-复制目标文件的同时复制另外的指定文件.zip

    在这个案例中,VBA宏被用来编写一段脚本,自动执行复制操作。 在VBA中,我们可以使用FileSystemObject(FSO)来处理文件和目录。FSO提供了一系列的方法和属性,例如CopyFile用于复制文件,MoveFile用于移动文件,...

    Excel-VBA宏编程实例源代码-显示当前文件大小.zip

    "Excel-VBA宏编程实例源代码-显示当前文件大小.zip"这个文件包提供了一个具体的应用示例,即通过VBA宏来获取并显示Excel文件自身的大小。 首先,让我们了解一下VBA宏的基本概念。宏是一种记录和回放用户操作的机制...

    基于VBA技术实现Excel数据生成CAD对象

    - **打断(同时要删除一段线段)**:`^C^C_break` - **打断(只是切断,一分为二)**:`^C^C_break_f\@` - **复制按钮**:`$M=$(if,$(eq,$(substr,$(getvar,cmdnames),1,4),grip),_copy,^C^C_copy)` - **环形阵列**...

Global site tag (gtag.js) - Google Analytics