脚本使用vb查找特定文件夹下excel中的行数

时间:2013-08-05 12:02:40

标签: vb.net visual-studio vba excel-vba vb6

我需要找出文件夹下每个excel表格中的行数.Google搜索显示以下脚本有效..但是对vb知之甚少,我无法解决它。脚本包含''Wscript对象。我认为这也适用于这个对象

事情在“c:\ temp”下,我有100张excel表(.xls)。需要找出每个文件中的行数。 vb专家需要帮助

 Dim objFSO, strFolder, objFolder, objFile, objExcel, objSheet, objRange, objRows As Object

        Dim strExtension As String
        Dim V_FilePath As String = " "

        ' Specify folder.
        strFolder = "c:\\temp"    -----

        objExcel = CreateObject("Excel.Application")

        ' Enumerate files in the folder.
        objFSO = CreateObject("Scripting.FileSystemObject")
        objFolder = objFSO.GetFolder(strFolder)

        For Each objFile In objFolder.Files
            ' Select only Excel spreadsheet file.
            strExtension = objFSO.GetExtensionName(objFile.Path)

            If (strExtension = "xls") Or (strExtension = "xlsx") Then
                ' Open each spreadsheet and count the number of rows.
                objExcel.Workbooks.Open(objFile.Path)
                objSheet = objExcel.ActiveWorkbook.Worksheets(1)
                objRange = objSheet.UsedRange
                objRows = objRange.Rows

      ' Display spreadsheet name and the number of rows.

                MsgBox(objExcel.ActiveWorkbook + CStr(objRows.Count))
                ''Wscript.Echo(objFile.Path & " (" & objRows.Count & ")")

 ' Close the spreadsheet.

                objExcel.ActiveWorkbook.Close()
            End If

        Next

        ' Clean up.
        objExcel.Application.Quit()

        Dts.TaskResult = ScriptResults.Success
    End Sub

3 个答案:

答案 0 :(得分:2)

确保您使用“Sub _ ()”声明顶部的子例程。此外,我认为有一些事情在语法上是不正确的。试试这个:

Sub blah()
Dim objFSO, strFolder, objFolder, objFile, objExcel, objSheet, objRange, objRows As Object

        Dim strExtension As String
        Dim V_FilePath As String

        V_FilePath = " "
        ' Specify folder.
        strFolder = "c:\\temp"

        objExcel = CreateObject("Excel.Application")

        ' Enumerate files in the folder.
        objFSO = CreateObject("Scripting.FileSystemObject")
        objFolder = objFSO.GetFolder(strFolder)

        For Each objFile In objFolder.Files
            ' Select only Excel spreadsheet file.
            strExtension = objFSO.GetExtensionName(objFile.Path)

            If (strExtension = "xls") Or (strExtension = "xlsx") Then
                ' Open each spreadsheet and count the number of rows.
                objExcel.Workbooks.Open (objFile.Path)
                objSheet = objExcel.ActiveWorkbook.Worksheets(1)
                objRange = objSheet.UsedRange
                objRows = objRange.Rows

      ' Display spreadsheet name and the number of rows.

                MsgBox (objExcel.ActiveWorkbook + CStr(objRows.Count))
                ''Wscript.Echo(objFile.Path & " (" & objRows.Count & ")")

 ' Close the spreadsheet.


            objExcel.ActiveWorkbook.Close

            End If

        Next

        ' Clean up.

        objExcel.Application.Quit

        Dts.TaskResult = ScriptResults.Success
    End Sub

答案 1 :(得分:1)

如果您在Excel宏中使用VBA执行此操作,可能会更好一点:

Sub LoopThroughFiles()
    Dim strFile As String
    Dim strPath As String
    Dim colFiles As New Collection
    Dim i As Integer
    Dim rowCount As Integer

    strPath = "C:\Users\[windows_username]\Documents\" 'Your path here
    strFile = Dir(strPath)

    While strFile <> ""
        colFiles.Add strFile
        strFile = Dir
    Wend

    'List filenames in Column A of the active sheet
    If colFiles.Count > 0 Then
        For i = 1 To colFiles.Count
            ActiveSheet.Cells(i, 1).Value = colFiles(i)

            Workbooks.Open strPath & colFiles(i)
            rowCount = ActiveSheet.UsedRange.Rows.Count
            Workbooks(colFiles(i)).Close
            'Workbooks.Close
            'ThisWorkbook.Close
            ActiveSheet.Cells(i, 2).Value = rowCount


        Next i
    End If

End Sub

答案 2 :(得分:0)

这样可行   MsgBox(objFile.name + CStr(objRows.Count))