我收到类型匹配错误的错误消息

时间:2018-09-09 23:56:23

标签: excel vba excel-vba

Sub copydata()
    A = Worksheets("sheet1").Cells(Rows.Count, 1).End(xlUp).Row

    For i = 2 To A
        If Worksheets("sheet1").Cells(i, 2).Value = Worksheets("sheet1").Range("a20:a25") Then
            Worksheets("sheet1").Rows(i).Copy
            Worksheets("sheet2").Activate
            b = Worksheets("sheet2").Cells(Rows.Count, 1).End(xlUp).Row
            Worksheets("sheet2").Cells(b + 1, 1).Select
            ActiveSheet.Paste
        End If  
    Next

End Sub

我认为我的值集有问题,我不知道如何解决。

2 个答案:

答案 0 :(得分:2)

您遇到的问题似乎与以下行有关:

process_request

用通俗易懂的英语,我对您要在此处执行的操作的理解是检查cell(i,2)的值是否等于Range(“ a20:a25”)的总和,执行一些操作。

但是,您的问题是,您实际上是在检查单元格值是否等于工作表对象(工作表和范围)。无论如何,您从未真正转换过工作表对象,以使其可以与cell(i,2)的值进行比较

我假设您要比较总和,便提出了一个快速解决方案。

If Worksheets("sheet1").Cells(i, 2).Value = Worksheets("sheet1").Range("a20:a25") 

如果您要比较此范围内的每个单元格的值与每个项目,那么我们将不得不采用其他方法,请随时告诉我,我们很乐意为您提供帮助。

代码的一个侧面说明是,我建议始终将Option Explicit放在代码的顶部。这是一个好习惯,因为它将始终需要您定义变量并帮助防止这些类型的混淆。

鉴于在这种情况下,您没有比较变量,所以这次可能没有帮助,但在其他时候肯定会有所帮助。

答案 1 :(得分:1)

您不能直接将单个单元格与某个范围进行比较。使用工作表的“匹配”来查找另一个范围内的值。

Sub copydata()

    dim i as long, b as long

    with Worksheets("sheet1")

        For i = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
            If not iserror(application.match(.Cells(i, "B").Value, .Range("a20:a25"), 0)) Then
                b = Worksheets("sheet2").Cells(Rows.Count, 1).End(xlUp).Row
                .Rows(i).Copy destination:=Worksheets("sheet2").Cells(b + 1, "A")
            End If  
        Next

    end with

End Sub