获取目录中所有.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