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

我有一个文本框,获取input目录并计算.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等,

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

看起来你有所需要的一切,你只需要添加一些行来创build一个包含所有你需要的数据的对象,然后你就可以使用这个对象来提取任何你想要的东西,我想不出比字典对象更好的东西。

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

 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