Vba 复制并粘贴整行

Vba 复制并粘贴整行,vba,excel,copy,Vba,Excel,Copy,功能:我正在做一个小项目,我需要在列中的每个单元格中搜索单词“Unknown”,如果它包含该单词,然后将整行复制到新的工作表中 问题:我得到“对象不支持此属性方法”。错误。我相信它在复制声明的某个地方(而不是目的地)。这很简单,但我似乎无法解决这个问题 Sub CheckRows() Dim b As Range Dim SrchRng As Range Set b = ActiveWorkbook.Sheets("Sheet 2").Range("A1") Set SrchRng = Act

功能:我正在做一个小项目,我需要在列中的每个单元格中搜索单词“Unknown”,如果它包含该单词,然后将整行复制到新的工作表中

问题:我得到“对象不支持此属性方法”。错误。我相信它在复制声明的某个地方(而不是目的地)。这很简单,但我似乎无法解决这个问题

Sub CheckRows()
Dim b As Range
Dim SrchRng As Range

Set b = ActiveWorkbook.Sheets("Sheet 2").Range("A1")
Set SrchRng = ActiveWorkbook.Sheets("Sheet 1").Range("G1")

Do While SrchRng.Value <> ""     
    If SrchRng.Value = "Unknown" Then
        Worksheets("Sheet 1").SrchRng.EntireRow.Copy _
            Destination:=Worksheets("Sheet 2").b
        Set b = b.Offset(1, 0)
        Set SrchRng = SrchRng.Offset(1, 0)
    Else: Set SrchRng = SrchRng.Offset(1, 0)
    End If
Loop

End Sub
子检查行()
变暗b为范围
变光SrchRng As范围
集合b=ActiveWorkbook.Sheets(“第2页”).范围(“A1”)
设置SrchRng=ActiveWorkbook.Sheets(“第1页”).Range(“G1”)
当SrchRng.Value“”时执行
如果SrchRng.Value=“未知”,则
工作表(“第1页”).srchrn.EntireRow.Copy_
目的地:=工作表(“表2”).b
设置b=b.偏移量(1,0)
设置SrchRng=SrchRng.Offset(1,0)
否则:设置SrchRng=SrchRng.Offset(1,0)
如果结束
环
端接头

尝试
范围.EntireRow.Value
属性

b.EntireRow.Value = SrchRng.EntireRow.Value

Do While srchrn.Value“”
如果SrchRng.Value=“未知”,则
b、 EntireRow.Value=SrchRng.EntireRow.Value
设置b=b.偏移量(1,0)
设置SrchRng=SrchRng.Offset(1,0)
否则:设置SrchRng=SrchRng.Offset(1,0)
如果结束
环

考虑以下情况:

表1
有一个数据块,G列中有“未知”条目,
表2
为空

通过将数据块定义为
范围
对象,并应用识别“未知”条目的
.Autofilter
,我们只需将过滤结果复制到
Sheeet 2
。以下大量注释的脚本正是这样做的:

Option Explicit
Sub CheckRowsWithAutofilter()

Dim DataBlock As Range, Dest As Range
Dim LastRow As Long, LastCol As Long
Dim SheetOne As Worksheet, SheetTwo As Worksheet

'set references up-front
Set SheetOne = ThisWorkbook.Worksheets("Sheet 1")
Set SheetTwo = ThisWorkbook.Worksheets("Sheet 2")
Set Dest = SheetTwo.Cells(1, 1) '<~ this is where we'll put the filtered data

'identify the "data block" range, which is where
'the rectangle of information that we'll apply
'.autofilter to
With SheetOne
    LastRow = .Range("G" & .Rows.Count).End(xlUp).Row
    LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
    Set DataBlock = .Range(.Cells(1, 1), .Cells(LastRow, LastCol))
End With

'apply the autofilter to column G (i.e. column 7)
With DataBlock
    .AutoFilter Field:=7, Criteria1:="=*Unknown*"
    'copy the still-visible cells to sheet 2
    .SpecialCells(xlCellTypeVisible).Copy Destination:=Dest
End With

'turn off the autofilter
With SheetOne
    .AutoFilterMode = False
    If .FilterMode = True Then .ShowAllData
End With

End Sub
选项显式
子检查行swithautofilter()
Dim数据块作为范围,目的地作为范围
调暗LastRow和LastCol一样长
将一张图纸标注为工作表,将二张图纸标注为工作表
“在前面设置引用
Set SheetOne=此工作簿。工作表(“工作表1”)
Set SheetTwo=此工作簿。工作表(“工作表2”)

设置Dest=SheetTwo.Cells(1,1)’当出现错误时,按住CTRL键并按暂停/中断键。它可能会提示您输入调试器。如果是,请按调试按钮。它应该突出显示导致错误的确切代码行。您能告诉我们突出显示哪一行代码吗?尽管使用Excel内置的
,通过
Do-While
循环可以实现复制与G列中“未知”匹配的行的目标。Autofilter
方法可能是更好的选择,因为您可以一次抓取所有匹配的行。这里有一个MSDN链接:SrchRng已经包含了对ActiveWorkbook.Sheets(“Sheet 1”)的引用,所以我认为您可以使用SrchRng.EntireRow.Copy等,与b类似。谢谢您的提示。自从我上次使用VBA已经有一段时间了,所以我已经生锈了,这有助于动摇蜘蛛网。哇,这是一个如此简单的修复!这是我一年来第一次接触VBA,所以我忘记了像这样的小工作。非常感谢。感谢您的深入解释,我对自动过滤功能一无所知。从现在起,我必须把它放在我的工具包里:)很高兴我能帮上忙——这是一个非常方便的工具,因为它的操作方式与许多用户在面临相同挑战时的操作方式相同,并且它允许您在许多情况下跳过循环此代码失败,因为在这一行的sheet1中分配了数据。SpecialCells(xlCellTypeVisible).Copy Destination:=Dest是否有解决方法?(100万行)100万行非常接近Excel的行限制。两个问题:(1)这个大文件是否成功打开,(2)错误是什么?
Option Explicit
Sub CheckRowsWithAutofilter()

Dim DataBlock As Range, Dest As Range
Dim LastRow As Long, LastCol As Long
Dim SheetOne As Worksheet, SheetTwo As Worksheet

'set references up-front
Set SheetOne = ThisWorkbook.Worksheets("Sheet 1")
Set SheetTwo = ThisWorkbook.Worksheets("Sheet 2")
Set Dest = SheetTwo.Cells(1, 1) '<~ this is where we'll put the filtered data

'identify the "data block" range, which is where
'the rectangle of information that we'll apply
'.autofilter to
With SheetOne
    LastRow = .Range("G" & .Rows.Count).End(xlUp).Row
    LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
    Set DataBlock = .Range(.Cells(1, 1), .Cells(LastRow, LastCol))
End With

'apply the autofilter to column G (i.e. column 7)
With DataBlock
    .AutoFilter Field:=7, Criteria1:="=*Unknown*"
    'copy the still-visible cells to sheet 2
    .SpecialCells(xlCellTypeVisible).Copy Destination:=Dest
End With

'turn off the autofilter
With SheetOne
    .AutoFilterMode = False
    If .FilterMode = True Then .ShowAllData
End With

End Sub