Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.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_Loops_For Loop_Do While - Fatal编程技术网

Excel 将各种工作簿和工作表中的值复制到其他工作簿中

Excel 将各种工作簿和工作表中的值复制到其他工作簿中,excel,vba,loops,for-loop,do-while,Excel,Vba,Loops,For Loop,Do While,我试图循环浏览各种工作簿中的工作表并复制值(从单个单元格开始)。我需要将复制的值粘贴到新工作簿中的工作表中,在第一行中一个接一个地粘贴 我用三本作业本工作。每个工作簿有两张纸 我在三本工作簿中循环浏览所有工作表 出现以下问题:仅将第二张图纸中的值复制到主文件中 Sub RunOnAllFilesInFolder() Dim folderName As String, eApp As Excel.Application, fileName As String Dim wb As

我试图循环浏览各种工作簿中的工作表并复制值(从单个单元格开始)。我需要将复制的值粘贴到新工作簿中的工作表中,在第一行中一个接一个地粘贴

我用三本作业本工作。每个工作簿有两张纸

我在三本工作簿中循环浏览所有工作表

出现以下问题:仅将第二张图纸中的值复制到主文件中

Sub RunOnAllFilesInFolder()

    Dim folderName As String, eApp As Excel.Application, fileName As String
    Dim wb As Workbook, ws As Worksheet, currWs As Worksheet, currWb As Workbook
    Dim fDialog As Object: Set fDialog = Application.FileDialog(msoFileDialogFolderPicker)
    Set currWb = ActiveWorkbook: Set currWs = ActiveSheet
    Dim ID As String
    Dim counter As Integer
    Dim i As Integer

    counter = 2
    fDialog.Title = "Select a folder"
    fDialog.InitialFileName = currWb.Path

    If fDialog.Show = -1 Then
        folderName = fDialog.SelectedItems(1)
    End If

    Set eApp = New Excel.Application: eApp.Visible = False
    Set eApp2 = New Excel.Application: eApp.Visible = False
    Set wb2 = eApp2.Workbooks.Add

    fileName = Dir(folderName & "\*.xls")

    Do While fileName <> ""

        Application.StatusBar = "Processing " & folderName & "\" & fileName
        Set wb = eApp.Workbooks.Open(folderName & "\" & fileName)

        For Each ws In wb.Worksheets
            ws.Range("A1").Copy
        Next ws

        wb2.Worksheets(1).Cells(counter, 1).PasteSpecial xlPasteValues

        wb.Close SaveChanges:=False
        Debug.Print "Processed" & folderName & "\" & fileName
        fileName = Dir()
        counter = counter + 1

    Loop

    wb2.SaveAs ("Results.xlsx")
    eApp.Quit
    Set eApp = Nothing
    eApp2.Quit
    Set eApp2 = Nothing

    Application.StatusBar = ""
    MsgBox "Completed executing Macro"

End Sub
子文件信息文件夹()
Dim folderName为字符串,eApp为Excel.Application,文件名为字符串
将wb设置为工作簿、ws设置为工作表、currWs设置为工作表、currWb设置为工作簿
Dim fDialog As Object:设置fDialog=Application.FileDialog(msoFileDialogFolderPicker)
Set currWb=ActiveWorkbook:Set currWs=ActiveSheet
作为字符串的Dim ID
作为整数的Dim计数器
作为整数的Dim i
计数器=2
fDialog.Title=“选择一个文件夹”
fDialog.InitialFileName=currWb.Path
如果fDialog.Show=-1,则
folderName=fDialog.SelectedItems(1)
如果结束
设置eApp=New Excel。应用程序:eApp.Visible=False
设置eApp2=New Excel。应用程序:eApp.Visible=False
设置wb2=eApp2.Workbooks.Add
fileName=Dir(folderName&“\*.xls”)
文件名“”时执行此操作
Application.StatusBar=“Processing”&folderName&“\”文件名
设置wb=eApp.Workbooks.Open(folderName&“\”文件名)
对于wb.工作表中的每个ws
ws.Range(“A1”).副本
下一个ws
wb2.工作表(1).单元格(计数器,1).粘贴特殊值
wb.Close SaveChanges:=False
Debug.Print“Processed”&folderName&“\”文件名
fileName=Dir()
计数器=计数器+1
环
wb2.SaveAs(“Results.xlsx”)
退出
设置eApp=Nothing
eApp2.退出
设置eApp2=无
Application.StatusBar=“”
MsgBox“已完成执行宏”
端接头

看起来问题在于工作表循环。您正在从工作表复制内容,但将值粘贴到工作表循环之后。这就是为什么只从一张图纸中获取值。下面的代码应该适合您

Sub RunOnAllFilesInFolder()

        Dim folderName As String, eApp As Excel.Application, fileName As String
        Dim wb As Workbook, ws As Worksheet, currWs As Worksheet, currWb As Workbook
        Dim fDialog As Object: Set fDialog = Application.FileDialog(msoFileDialogFolderPicker)
        Set currWb = ActiveWorkbook: Set currWs = ActiveSheet
        Dim ID As String
        Dim counter As Integer
        Dim i As Integer

        counter = 2
        fDialog.Title = "Select a folder"
        fDialog.InitialFileName = currWb.Path

        If fDialog.Show = -1 Then
            folderName = fDialog.SelectedItems(1)
        End If

        Set eApp = New Excel.Application: eApp.Visible = False
        Set eApp2 = New Excel.Application: eApp.Visible = False
        Set wb2 = eApp2.Workbooks.Add

        fileName = Dir(folderName & "\*.xls")

        Do While fileName <> ""

            Application.StatusBar = "Processing " & folderName & "\" & fileName
            Set wb = eApp.Workbooks.Open(folderName & "\" & fileName)

            For Each ws In wb.Worksheets
                ws.Range("A1").Copy
                wb2.Worksheets(1).Cells(counter, 1).PasteSpecial xlPasteValues
                counter = counter + 1
            Next ws

            wb.Close SaveChanges:=False
            Debug.Print "Processed" & folderName & "\" & fileName
            fileName = Dir()
        Loop

        wb2.SaveAs ("Results.xlsx")
        eApp.Quit
        Set eApp = Nothing
        eApp2.Quit
        Set eApp2 = Nothing
        Application.StatusBar = ""
        MsgBox "Completed executing Macro"
    End Sub
子文件信息文件夹()
Dim folderName为字符串,eApp为Excel.Application,文件名为字符串
将wb设置为工作簿、ws设置为工作表、currWs设置为工作表、currWb设置为工作簿
Dim fDialog As Object:设置fDialog=Application.FileDialog(msoFileDialogFolderPicker)
Set currWb=ActiveWorkbook:Set currWs=ActiveSheet
作为字符串的Dim ID
作为整数的Dim计数器
作为整数的Dim i
计数器=2
fDialog.Title=“选择一个文件夹”
fDialog.InitialFileName=currWb.Path
如果fDialog.Show=-1,则
folderName=fDialog.SelectedItems(1)
如果结束
设置eApp=New Excel。应用程序:eApp.Visible=False
设置eApp2=New Excel。应用程序:eApp.Visible=False
设置wb2=eApp2.Workbooks.Add
fileName=Dir(folderName&“\*.xls”)
文件名“”时执行此操作
Application.StatusBar=“Processing”&folderName&“\”文件名
设置wb=eApp.Workbooks.Open(folderName&“\”文件名)
对于wb.工作表中的每个ws
ws.Range(“A1”).副本
wb2.工作表(1).单元格(计数器,1).粘贴特殊值
计数器=计数器+1
下一个ws
wb.Close SaveChanges:=False
Debug.Print“Processed”&folderName&“\”文件名
fileName=Dir()
环
wb2.SaveAs(“Results.xlsx”)
退出
设置eApp=Nothing
eApp2.退出
设置eApp2=无
Application.StatusBar=“”
MsgBox“已完成执行宏”
端接头