对象必需错误使用条件循环复制值

时间:2014-09-16 22:43:57

标签: vba excel-vba excel

我正在尝试编写一个寻找特定值的循环" Fund"在一张纸上,复制以下范围,在另一张纸上找到该值,然后将其粘贴到它旁边。我不断收到语法错误,例如对象需要和下标超出范围。有人可以帮忙吗?

提前致谢!

Dim wkb As Workbook
Dim b As Long
Dim c As Long
Dim LCellP As Long
Dim LCellCopy As Long

Set wkb = Application.ActiveWorkbook
Set IandC = wkb.Sheets("Instructions and CrossRef")
Set Comparison = wkb.Sheets("Comparison")
Set Previous = wkb.Sheets("Previous")

'Move Previous Flows to Comparison Sheet
With Comparison
LCellCopy = Cells(Rows.Count, "A").End(xlUp).Row
End With

Cells(1, 4) = "Good"
Cells(1, 5) = "Not on Previous"

For b = 1 To LCellP
    v = Cells(b, 1).Value
        If Left(v, 4) = "Fund" Then
                For c = 1 To LCellCopy
                u = Comparison.Cells(c, 1).Value
                    If u = Cells(b, 1).Value Then
                        Comparision.Range(Cells(c, 4), Cells(c + 15, 5)) = Previous.Range(Cells(b, 1), Cells(b + 15, 2)).Value
                    End If
                Next c
        End If
Next b

2 个答案:

答案 0 :(得分:1)

您的With Comparison块实际上并未将任何内容解析回该工作表。试试这个(注意.Cells之前的Rows,这意味着它们属于With Comparison对象。

'Move Previous Flows to Comparison Sheet
With Comparison
    LCellCopy = .Cells(.Rows.Count, "A").End(xlUp).Row
End With

该片段不应该导致任何错误,但我想指出它。

在相关说明中,任何时候您引用的是不合格的RangeCells对象,它始终默认为ActiveSheet,因此:

Range("A1")

相当于:

ActiveSheet.Range("A1")

同样地:

Cells(1, 3)

相当于:

ActiveSheet.Cells(1,3)

当你混合你的资格时,这就成了一个问题。如果Sheet1处于活动状态,则始终会出现错误:

Worksheets("Sheet2").Range(Cells(1,1), Cells(1,3)).Value

为什么?? 因为即使Cells在括号内,它也会在ActiveSheet的上下文中进行评估,这可能与排位赛的内容不同“Sheet2”,它基本上是在说:

Worksheets("Sheet2").Range(Worksheets("Sheet1").Cells(1,1), Worksheets("Sheet1").Cells(1,3)).Value

由于Sheet1上定义的范围没有,并且在Sheet2上不存在,因此引发了熟悉的1004错误。

所以,虽然我不确切地知道哪条线路会给你造成问题,但我怀疑它是否适用于质量不合格或不合格的范围对象。

答案 1 :(得分:0)

让它与下面的工作,可能不是最好的,但谢谢!

If u = Cells(b, 1).Value Then
    Sheets("Previous").Select
    Range(Cells(b, 1), Cells(b + 15, 2)).Select
    Selection.Copy
    Sheets("Comparison").Select
    Range("D" & c).Select
    ActiveSheet.Paste
    Sheets("Previous").Select
End If