关于"Copy a row in excel if it matches a specific criteria into a new worksheet"



参考:将excel中符合特定条件的行复制到新的工作表中

我尝试将上面的超链接代码应用于我自己工作簿的需要。唯一显著的区别是:对象名称,我的数据以"A2"而不是"A1"开头,并且我的数据被复制到新工作表中的"L"列而不是"a"列

此外。。。你可以假设我在excel中生成了与每个SelectCell.Value.相对应的选项卡

Sub Consolidate_Sheets()
    Dim MyCell As Range
    Dim MyRange As Range
    Dim ws As Worksheet
    Set MyRange = Sheets("Install_Input").Range("A2")
    Set MyRange = Range(MyRange, MyRange.End(xlDown))
Call superSizeMe(MyCell, MyRange)

Sub superSizeMe(SelectCell As Range, SelectRange As Range)
    Dim InstallInput As Worksheet
    Dim strPasteToSheet As String
   'New worksheet to paste into
    Dim DestinationSheet As Worksheet
    Dim DestinationRow As Range
    'Define worksheet with input data
    Set InstallInput = ThisWorkbook.Worksheets("Install_Input")
    For Each SelectCell In SelectRange.Cells
    InstallInput.Select
    If SelectCell.Value <> "" Then
        SelectCell.EntrieRow.Select ''''LOCATION OF RUN-TIME ERROR 438''''
        Selection.Copy
        Set DestinationSheet = Worksheets(SelectCell.Value)
        Set DestinationRow = DestinationSheet.Range("L1:L" & DestinationSheet.Cells(Rows.Count, "L").End(xlUp).Row)
        Range("L" & DestinationRow.Rows.Count + 1).Select
        ActiveSheet.Paste
    End If
    Next SelectCell
InstallInput.Select
InstallInput.Cells(1, 1).Select
If IsObject(InstallInput) Then Set InstallInput = Nothing
If IsObject(SelectRange) Then Set SelectRange = Nothing
If IsObject(SelectCell) Then Set SelectCell = Nothing
If IsObject(DestinationSheet) Then Set DestinationSheet = Nothing
If IsObject(DestinationRow) Then Set DestinationRow = Nothing

End Sub

我收到运行时错误"438"对象不支持此属性或方法"在"SelectCell.EntireRow.Select"上

你的代码有一个打字错误

SelectCell.EntrieRow.Select

应该说完整而不是Entrie。就我个人而言,无论如何我都会使用这种方法,它根据你输入的数字选择整行。仅供参考,还有一个相应的Columns()。如果你在未来的中需要它,请选择

sel_cell_row = SelectCell.Row
Rows(sel_cell_row).select

编辑以评论

你得到1004错误的原因就像上面说的,复制和粘贴区域不匹配。想象一下复制10行,然后试图将其粘贴到2行,这根本不可行。我猜这个问题实际上源于你的destinationrows代码。我不完全确定它试图做什么,但这里有两个通用的修复

1) 保持复制代码的原样,并修改粘贴。选择第一个单元格(如果您的范围是a1:a10,则选择a1就足够了)excel将从第一个单元格开始粘贴所有数据,而不是选择要粘贴的单元格范围。所以在你的代码中做这个

'comment out all this destination row stuff
'Set DestinationRow = DestinationSheet.Range("L1:L" & DestinationSheet.Cells(Rows.Count, "L").End(xlUp).Row)
'Range("L" & DestinationRow.Rows.Count + 1).Select
Range("L1").select   'only referencing the first cell to paste into
ActiveSheet.Paste

2) 与其选择整行,为什么不只选择该行中填充的值,比如

sel_cell_row = SelectCell.Row
lastColumn = ActiveSheet.Cells(2, Columns.Count).End(xlToLeft).Column
range(Cells(sel_cell_row ,1),Cells(sel_cell_row ,lastColumn )).select

然后像往常一样复印。1表示第1列或A。我假设您想要的数据在一行中,从A列开始,一直到lastColumn。也许现在这将匹配您的destinationrows代码。

3) Com,bine选项1和2。因此,只复制已填充的单元格,并粘贴到范围内的第一个单元格

最新更新