问题描述
我有一个包含多个电子表格的工作簿。其中一些电子表格的名称中包含单词“ Hawk”。例如,“ 12345-HAWK”和“ ABCDE-Hawk”。我需要从第38行开始将这些表中的数据复制到Hawk表包含的许多行,然后将其粘贴到新的电子表格中。
我有从另一个线程获得的这段代码,但是它只是粘贴了包含单词“ Hawk”的最后一张表中的行。我需要它从每个工作表中粘贴,该工作表的名称中不仅包含最后一个,而且还包含“鹰”。
我对VBA没有任何经验,所以我不确定出什么问题了。任何建议将不胜感激。
Option Explicit
Sub compile()
SelectSheets "Hawk",ThisWorkbook
'Some other bits and pieces here
End Sub
Sub SelectSheets(sht As String,Optional wbk As Workbook)
Dim wks As Worksheet
Dim ArrWks() As String
Dim i As Long
If wbk Is nothing Then Set wbk = ActiveWorkbook
ReDim ArrWks(0 To Worksheets.Count - 1)
For Each wks In Worksheets
If InStr(1,wks.Name,sht) > 0 Then
ArrWks(i) = wks.Name
i = i + 1
End If
Next wks
ReDim Preserve ArrWks(i - 1)
Dim ws As Long
For ws = LBound(ArrWks) To UBound(ArrWks)
Worksheets(ArrWks(ws)).Range("A37:AC100").copy
Worksheets("VBA").Cells(Rows.Count,1).End(xlUp).Offset(1,0).PasteSpecial (xlPasteValues)
Next ws
Application.CutcopyMode = False
Application.ScreenUpdating = True
End Sub
解决方法
Public Sub compile()
Dim sh As Worksheet,lastrow As Long,lastcol As Long,i As Long
i = 1 'For paste data in first row in MasterSheet.
Sheets("MasterSheet").Cells.ClearContents 'Clear previous data.
For Each sh In ThisWorkbook.Worksheets
If InStr(1,UCase(sh.Name),UCase("HAWK")) > 0 Then
'IF your data is inconsistent then use find function to find lastrow an lastcol.
lastrow = sh.Cells(Rows.Count,1).End(xlUp).Row
lastcol = sh.Cells(38,Columns.Count).End(xlToLeft).Column
'Here we collect data in master sheet.
Sheets("MasterSheet").Range("A" & i).Resize(lastrow - 38 + 1,lastcol).Value = sh.Range("A38",sh.Cells(lastrow,lastcol)).Value
i = i + lastrow - 38 + 1
End If
Next sh
End Sub
使用此代码代替您的代码。它将收集从“ A38”到最后一行和最后一列的所有数据,并粘贴到母版表中。检查并让我知道它是否有效。