【发布时间】:2016-02-23 03:34:34
【问题描述】:
我有两本工作簿和三张工作表。为简单起见,称它们为wb1Sheet1、wb1Sheet2 和wb2Sheet1。我的代码是:
- 在
wb1Sheet2的列中查找任何(非零)值以用作条件 (Crit)。 - 对于每个条件,它都会搜索
wb1Sheet1的特定列。 - 匹配的行被复制到另一个工作簿:
wb2Sheet1。
当我为一个定义的标准编写此代码时,它工作正常。 但是,当我尝试将其修改为循环中的循环(将每个标准与每一行进行比较)时,它不起作用。
Dim wb1 As Workbook
Dim wb2 As Workbook
Dim src As Worksheet
Dim Dst As Worksheet
Dim src2 As Worksheet
Dim Crit As Range
Set wb1 = ActiveWorkbook '
Set wb2 = Workbooks.Open(Filename:="C:\Test.xlsx")
Set src = wb1.Sheets("wb1Sheet1")
Set Dst = wb2.Sheets("wb2Sheet1")
Set src2 = wb1.Sheets("wb1Sheet2")
Dim LastRow As Long, r As Range
Dim CopyRange As Range
LastRow = src.Cells(Cells.Rows.Count, "P").End(xlUp).Row
For Each Crit In src2.Range("G10:G")
For Each r In src.Range("P2:P" & LastRow)
If r.Value = Crit Then
If CopyRange Is Nothing Then
Set CopyRange = r.EntireRow
Else
Set CopyRange = Union(CopyRange, r.EntireRow)
End If
End If
Next Crit
Next r
If Not CopyRange Is Nothing Then
CopyRange.Copy Dst.Range("A1")
End If
End Sub
【问题讨论】:
-
你得到什么错误?在哪里?
-
只是一个小指针,将您的
LastRow = src. ...行更改为:src.Cells(src.Cells.Rows.Count, "P").End(xlUp).Row。否则,rows.count将来自任何活动工作表。最好指定要使用哪个工作表Rows.Countfrom。 -
您是否考虑过使用
Autofilter查找符合条件的行并使用SpecialCells仅在过滤后复制可见单元格? -
这不会立即给你一个错误,因为它是一个无效的范围吗?
src2.Range("G10:G")