从另一个Excel工作簿复制数据 – 而不是一张表复制所有的数据

我有几个Excel文件,我想合并。 每个文件有17张,分别命名为00,01,02,03等。现在,我打开每个工作簿,并尝试将数据复制到一个文件,也有16张,在表x我想从工作表x的所有其他工作簿中获得信息。

现在,我打开文件,并为每个文件,我有这个代码:

For i = 0 To 16 Workbooks(nazwaPliku).Activate zakladka = Right("0" & CStr(i), 2) Sheets(zakladka).Activate ileWierszy = Application.WorksheetFunction.Max(Sheets(zakladka).Range("B:B")) wierszMin = Application.WorksheetFunction.Match("1", Sheets(zakladka).Range("B:B"), 0) zakresDoKop = "A" & wierszMin + 1 & ":" & "I" & wierszMin + ileWierszy + 1 '1 wiecej dla bezpieczenstwa Sheets(zakladka).Range(zakresDoKop).Resize(ileWierszy, 1).Value = rok & "_" & czesc Sheets(zakladka).Range(zakresDoKop).Copy ThisWorkbook.Sheets(zakladka).Activate ThisWorkbook.Sheets(zakladka).Range("A" & wsk(i)).PasteSpecial wsk(i) = wsk(i) + ileWierszy + 2 Next i 

对于第一个文件,一切正常(对于所有表单,wsk = 2),但是当我打开下一个工作簿时,发生了一些奇怪的事情。 例如,当i = 2时,代码将复制02-16页的数据并粘贴到工作簿中。 更重要的是,我已经通过删除工作簿中的工作表16进行了testing,当我<> 16时发生了一个错误(因为它缺less一个工作表)。 我想也许我不太了解这里的循环?

有任何想法吗? 我知道我怎样才能以不同的方式写出来,但是因为我花了最后4个小时试图弄明白,我真的很想知道为什么会这样。

尝试这样的事情:

未经testing

 Dim wb As Workbook Dim ws As Worksheet Dim desWs As Worksheet Dim firstRow As Long Dim lastRow As Long Dim lastColumn As Long Dim pasteRow As Long 'I'm assuming you're looping through your workbooks... so set each open workbook to _ 'the wb variable once you've opened it/when you open it. 'This will loop through each sheet in the workbook you just opened and paste the _ 'values in the corresponding ThisWorkbook sheet. For Each ws In wb.Sheets 'Since the sheet names in ThisWorkbook are the same as in the other wb, we can _ 'use the current worksheet name for the destination sheet. (ws.Name) set desWs = ThisWorkbook.Sheets(ws.Name) firstRow = ws.Range("B:B").Find("*", searchdirection:=xlNext).Row + 1 lastRow = ws.Range("B:B").Find("*", searchdirection:=xlPrevious).Row lastColumn = ws.Rows("1:1").Find("*", searchdirection:=xlNext).Column pasteRow = desWs.Range("A:A").Find("*", searchdirection:=xlPrevious).Row + 1 desWs.Range(desWs.Cells(pasteRow, 1).Resize(lastRow-firstRow, lastColumn) = _ ws.Range(ws.Cells(firstRow, 1), ws.Cells(lastRow, lastColumn)).Value Next ws 

请记住,此方法只复制值,而不是格式。