参考"如果excel中的行符合特定条件,则将其复制到新工作表中#34;

时间:2015-02-06 16:51:17

标签: excel-vba dynamic row copy-paste worksheet

参考:Copy a row in excel if it matches a specific criteria into a new worksheet

我尝试将上述超链接代码应用于我自己的工作簿的需求。唯一值得注意的区别是:对象名称,我的数据开始于" 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

我收到运行时错误&#39;&#39;&#39; &#34;对象不支持此属性或方法&#34; on&#34; SelectCell.EntireRow.Select&#34;

1 个答案:

答案 0 :(得分:0)

你的代码有错字

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.因此只复制填充的单元格,并粘贴到范围内的第一个单元格