VBA宏查找目录中的工作表计数

VBA宏查找目录中的工作表计数,vba,excel,Vba,Excel,我对VBA一点也不擅长,但我很想知道是否有方法可以计算工作簿中的工作表数量,该工作簿循环用于文件夹中的所有文件 例如,A1列出文件名,B1显示图纸数量 A1 B1 book1 5 book2 6 在for循环中,打开文件(假设它们都是excel)并获取工作表的计数 比如: For Each objFile In objFolder.Files writeCell = ws.Cells(ws.UsedRange.Rows.Count + 1, 1) writ

我对VBA一点也不擅长,但我很想知道是否有方法可以计算工作簿中的工作表数量,该工作簿循环用于文件夹中的所有文件

例如,A1列出文件名,B1显示图纸数量

A1 B1 book1 5 book2 6
在for循环中,打开文件(假设它们都是excel)并获取工作表的计数

比如:

For Each objFile In objFolder.Files
    writeCell = ws.Cells(ws.UsedRange.Rows.Count + 1, 1)
    writeCell.Value = objFile.Name
    'ADD A WORKSHEET AND PASTE "=SHEETS()" in A1 the copy value of a1 in to list
    'close files with out saving

    Set wb = Workbooks.Open(objFile.Name)
    writeCell.Offset(,1).value = wb.Worksheets.Count()
    wb.Close(false)

Next

上面的UDF应打开指定文件夹中的所有文件,并在新工作表上为您提供每个工作簿中的工作表数

请查看下面的内容-注意,您应在空白工作表中运行此操作

Set CurrentWB = ActiveWorkbook

Dim folderPath As String
Dim Filename As String
Dim wb As Workbook
Dim J As Long
Dim N As Long
Dim lc As Long
Dim lr As Long

'UPDATE FOLDER PATH OF WHERE XLS FILES ARE LOCATED
folderPath = "C:\Users\username\Desktop\test\" 'change to suit

J = 2

'   Column Headers
    CurrentWB.Sheets(1).Range("A1").Value = "Filename"
    CurrentWB.Sheets(1).Range("B1").Value = "# of Sheets"

If Right(folderPath, 1) <> "\" Then folderPath = folderPath + "\"

'YOU CAN CHANGE TO BE ANY FILE TYPE BUT CURRENTLY SET TO .XLSX
Filename = Dir(folderPath & "*.xlsx")
Do While Filename <> ""
  Application.ScreenUpdating = False
    Set TempWB = Workbooks.Open(folderPath & Filename)



'       Counts Per Worksheet
    N = ActiveWorkbook.Worksheets.Count
    CurrentWB.Sheets(1).Range("A" & J).Formula = Filename
    CurrentWB.Sheets(1).Range("B" & J).Formula = N


'       Close Temporary Workbook
    TempWB.Close False

    J = J + 1
    Filename = Dir
Loop
Set CurrentWB=ActiveWorkbook
将folderPath设置为字符串
将文件名设置为字符串
将wb设置为工作簿
Dim J尽可能长
长
如长
变暗lr为长
'更新XLS文件所在位置的文件夹路径
folderPath=“C:\Users\username\Desktop\test\”,根据需要进行更改
J=2
'列标题
CurrentWB.Sheets(1).Range(“A1”).Value=“文件名”
当前工作表(1).范围(“B1”).Value=“#工作表”
如果正确(folderPath,1)“\”则folderPath=folderPath+“\”
'您可以更改为任何文件类型,但当前设置为.XLSX
Filename=Dir(folderPath&“*.xlsx”)
文件名“”时执行此操作
Application.ScreenUpdating=False
设置TempWB=Workbooks.Open(文件夹路径和文件名)
'每个工作表的计数
N=ActiveWorkbook.Worksheets.Count
CurrentWB.Sheets(1).Range(“A”&J).公式=文件名
当前工作表(1).范围(“B”和“J”).公式=N
'关闭临时工作簿
TempWB.Close假
J=J+1
Filename=Dir
环

不添加页面的可能副本,然后运行“工作表”功能并复制它。唯一的相似之处是在文件中循环,我在这一部分没有问题。您可以使用
工作表.add
添加工作表,然后打开文件并读取
工作表.count()
来添加计数。您在这一部分也不太好,因为您在VBA中不必要地使用了
脚本.FileSystemObject
,而在VBA中它是绝对不需要的,由于VBA具有本机功能,可以检索文件夹中的文件列表并打开工作簿。
writeCell.Value=objFile.Name
表示存在错误,请确保检查文件是否为“*.xls”在尝试打开它之前,请确保在代码顶部声明WriteCell为范围并将WriteCell作为工作簿。这将有助于识别错误。
Sub ListallFiles()
    Dim sFileName As String
    Dim sFolderPath As String: sFolderPath = "C:\Temp\"     ' Change folder path. Ensure that folder path ends with "\"
    Dim oWB As Workbook
    Dim oWS As Worksheet

    ' Get the first excel file name from specified folder
    sFileName = Dir(sFolderPath & "*.xls*")

    ' Add a worksheet
    Set oWS = ThisWorkbook.Worksheets.Add

    With oWS

        ' Set folder name in the new sheet
        .Range("A1").Value = "The file found in " & sFolderPath & " are:"

        ' Loop through all excel files in the specified folder
        Do While Len(Trim(sFileName)) > 0

            ' Open workbook
            Set oWB = Workbooks.Open(sFolderPath & sFileName)

            ' Set workbook details in the file
            .Range("A" & .Cells(.Rows.Count, "A").End(xlUp).Row + 1).Value = sFileName
            .Range("B" & .Cells(.Rows.Count, "B").End(xlUp).Row + 1).Value = oWB.Worksheets.Count

            ' Close workbook
            oWB.Close False

            ' Clear workbook object
            Set oWB = Nothing

            ' Get next excel file
            sFileName = Dir()
        Loop

    End With

End Sub
Set CurrentWB = ActiveWorkbook

Dim folderPath As String
Dim Filename As String
Dim wb As Workbook
Dim J As Long
Dim N As Long
Dim lc As Long
Dim lr As Long

'UPDATE FOLDER PATH OF WHERE XLS FILES ARE LOCATED
folderPath = "C:\Users\username\Desktop\test\" 'change to suit

J = 2

'   Column Headers
    CurrentWB.Sheets(1).Range("A1").Value = "Filename"
    CurrentWB.Sheets(1).Range("B1").Value = "# of Sheets"

If Right(folderPath, 1) <> "\" Then folderPath = folderPath + "\"

'YOU CAN CHANGE TO BE ANY FILE TYPE BUT CURRENTLY SET TO .XLSX
Filename = Dir(folderPath & "*.xlsx")
Do While Filename <> ""
  Application.ScreenUpdating = False
    Set TempWB = Workbooks.Open(folderPath & Filename)



'       Counts Per Worksheet
    N = ActiveWorkbook.Worksheets.Count
    CurrentWB.Sheets(1).Range("A" & J).Formula = Filename
    CurrentWB.Sheets(1).Range("B" & J).Formula = N


'       Close Temporary Workbook
    TempWB.Close False

    J = J + 1
    Filename = Dir
Loop