获取目录中所有.xlsx工作簿的工作表名称

时间:2017-11-13 12:46:16

标签: excel vba excel-vba

我有一个文本框,我在其中获取输入目录并计算.xlsx报告的数量以及这些报告中的工作表总数。

我想获取每个报告的报告名称和工作表名称。

最快的方法是什么。

因为有些情况下可能有100个工作簿,而且里面总共有1000个工作表。

这是我的代码,只需获取这些报告中的报告和工作表的数量。

Private Sub FL_TextBox_Change()


Dim FolderPath As String
Dim path As String
Dim count As Integer
Dim Wk As Workbook

Dim Ws As Workbook
Set Ws = ActiveWorkbook

FolderPath = NewTask.FL_TextBox.Value

MsgBox ("Click Ok & Wait for the Total Number of Reports and Worksheets" & vbNewLine & vbNewLine & "to be calculated.")

If FolderPath = "" Then

     NewTask.Num_Rpt_TextBox.Value = ""

     Ws.Sheets("Config").Range("I1").Value = ""

Else

    path = FolderPath & "\*.xlsx"
    Filename = Dir(path)
    File = (FolderPath & "\" & Filename)
    wkcount = 0
    Shcount = 0
    shtcount = 0
    RptSheets = ""
    Do While Filename <> ""
        wkcount = wkcount + 1
        File = FolderPath & "\" & Filename
        Set Wk = Workbooks.Open(File, ReadOnly:=True)
        Shcount = Wk.Sheets.count
        If RptSheets <> "" Then
           RptSheets = RptSheets & "," & Shcount
        Else
           RptSheets = Shcount
        End If
        Wk.Close
        shtcount = shtcount + Shcount
        Filename = Dir()
    Loop

Ws.Sheets("Config").Range("I1").Value = RptSheets
XlsxFilesPresent = wkcount & " / " & shtcount
NewTask.Num_Rpt_TextBox.Value = XlsxFilesPresent
End If

End Sub

因此,简而言之 - 我希望以结构化的方式获取.xlsx报告的数量以及这些报告中的报告名称和工作表数量以及工作表名称。

这样的东西
Number of workbooks = 3

Number of Worksheets = 100

ReportNames = TestFile1, TestFile2, TestFile3.

SheetNames = TestFile1:TestSheet1, TestFile1:TestSheet2, TestFile1:TestSheet3, TestFile1:TestSheet4等,

请分享您的想法,让这个过程更快地运行。

1 个答案:

答案 0 :(得分:1)

看起来你有你需要的一切,你只需要添加一些线来制作一个包含你需要的所有数据的对象,然后你可以使用那个对象来提取你想要的任何东西,我想不出比字典对象。

工作表的所有信息都存储在名为worksheets的集合对象中,因此您可以简单地存储该对象并遍历它以访问工作表名称以及可能的任何其他信息。所以首先要创建一个集合对象和一个字典对象:

Dim coll As Object
Dim dict As Object

Set dict = CreateObject("scripting.dictionary")

do while循环中,将工作簿名称用作键,将该工作簿的工作表对象用作项目。请注意,密钥应该是唯一的,我假设您将在一个目录中运行它,因此操作系统必须强制使用文件名。

要在打开工作簿后在循环内添加键和项,请使用以下命令:

set coll=wk.Worksheets
dict.add Wk,coll

一旦执行离开循环,您就会拥有所有工作簿及其工作表对象的字典。现在,您可以遍历字典并根据需要形成数据。例如,假设您要打印工作簿名称,然后打印工作表:

dim i as integer
dim key as variant
Dim sht As Worksheet

for each key in dict.keys
    set coll=dict(key) 'sets the item of the dict=worksheets
    For i = 1 To coll.Count 'loop through worksheets object and print their names
        Set sht = coll(i)
        Debug.Print key & ":" & sht.Name
    Next
next key