Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 解析文件夹中的所有工作簿并创建主工作表_Excel_Vba - Fatal编程技术网

Excel 解析文件夹中的所有工作簿并创建主工作表

Excel 解析文件夹中的所有工作簿并创建主工作表,excel,vba,Excel,Vba,我有许多excel文件,每个文件只有一个工作表,在一个包含5个来源数据的文件夹中。源文件位于L列。我想通读所有文件的每一行,并创建5个主工作表。我认为源的数量不应该仅限于5个源,宏应该只读取所有文件中的所有行,并根据单元格L中的值将行复制到主工作表。开始行是3,用于读取和写入。我想我有阅读每个文件和工作表的工作代码,但在读和写行方面有问题 Sub ParseByDevice() Dim Path As String Dim FileName As String Dim Wkb As Workb

我有许多excel文件,每个文件只有一个工作表,在一个包含5个来源数据的文件夹中。源文件位于L列。我想通读所有文件的每一行,并创建5个主工作表。我认为源的数量不应该仅限于5个源,宏应该只读取所有文件中的所有行,并根据单元格L中的值将行复制到主工作表。开始行是3,用于读取和写入。我想我有阅读每个文件和工作表的工作代码,但在读和写行方面有问题

Sub ParseByDevice()

Dim Path As String
Dim FileName As String
Dim Wkb As Workbook
Dim wbThis As Workbook
Dim ws As Worksheet
Dim Pws As Worksheet 'Parsed Worksheet based on Column L (i, 12)
Dim a As Range
Dim b As Range
Dim rw As Range
Dim cl As Range 
Dim MyBook As Workbook
Dim newBook As Workbook
Dim FileNm As String

Application.EnableEvents = False
Application.ScreenUpdating = False

Path = "C:\xml\vac" 'Change as needed
FileName = Dir(Path & "\livevalues*.xls", vbNormal)

'
'ALL FILES IN FOLDER LOOP
'
Do Until FileName = ""
Set Wkb = Workbooks.Open(FileName:=Path & "\" & FileName)

'
'ALL EACH WORKSHEET IN WORKBOOK LOOP
'
'next worksheet in file;
'only expect one worksheet but maybe more in the future
'
For Each ws In Wkb.Worksheets

    '
    ' FOR EACH ROW IN WORKSHEET LOOP
    '
        rw = 3  'first row after header
        For Each rw In ws

        MsgBox Wkb.Sheets(ws).row(rw, 12).Value 'this is temporary, just a visual check that things are going well
        cl = Wkb.Sheets(ws).row(rw, 12).Value
        Wkb.Sheets(ws).row(rw, 12).Copy Pws.Sheets(cl)

    Next rw 'next row in worksheet

Next ws 'next worksheet in file;

    Wkb.Close False
    FileName = Dir()

Loop 'Do next file in folder

Application.EnableEvents = True
Application.ScreenUpdating = True

End Sub
一种方法:

Application.EnableEvents = False
Application.ScreenUpdating = False

Path = "C:\xml\vac" 'Change as needed
FileName = Dir(Path & "\livevalues*.xls", vbNormal)

Set MyBook = ThisWorkbook

Do Until FileName = ""

    Set Wkb = Workbooks.Open(FileName:=Path & "\" & FileName)

    For Each ws In Wkb.Worksheets

        rw = 3  'first row after header
        Do
            tmp = ws.Cells(rw, 12).Value
            If Len(tmp) = 0 Then Exit Do

            Set Pws = Nothing

            On Error Resume Next
            Set Pws = ThisWorkbook.Sheets(tmp)
            On Error GoTo 0

            If Pws Is Nothing Then
                Set Pws = MyBook.Worksheets.Add( _
                   after:=MyBook.Sheets(MyBook.Sheets.Count))
                Pws.Name = tmp
            End If

            ws.Rows(rw).Copy Pws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)

            rw = rw + 1
        Loop

    Next ws 'next worksheet in file;

    Wkb.Close False
    FileName = Dir()

Loop 'Do next file in folder

Application.EnableEvents = True
Application.ScreenUpdating = True

你的问题是?有人能帮我处理工作表循环吗?我想读很多工作簿,在第3行之后阅读每一行,单元格L的内容将是我想写这一行的主工作表的名称。工作表循环用于读取由Pws.Sheetsc1标识的行,并将行写入主工作表。