使用VBA中的IF语句将值从工作表复制到另一个工作表

时间:2016-11-16 23:44:49

标签: excel vba excel-vba

我正在使用Excel 2010来编写VBA脚本,我希望将值从一个工作表("数据库")复制到另一个工作表("搜索"),因为某个标准通过IF声明履行,已经过验证。

我已经创建了一个模块,我已经编写了以下代码:

  Sub searchdatabase()

'1. declare variables
'2. clear old search results
'3. Find records that match criteria and paste them

Dim country As String
Dim category As String
Dim subcategory As String
Dim finalrow As Integer
Dim i As Integer 'row counter

Sheets("Search").Range("E11:P1000").ClearContents 'E11:P1000 e o range de celulas que ele vai apagar antes de correr o script. Se quiser mudar ou adicionar headers, tenho de mudar este range tambem.

country = Sheets("Search").Range("E5").Value
finalrow = Sheets("Database").Range("A200000").End(xlUp).Row

For i = 2 To finalrow
    If Sheets("Database").Cells(i, 1) = country Then
        Sheets("Database").Range(Cells(i, 1), Cells(i, 9)).Copy
        Sheets("Search").Range("E600").End(xlUp).Offset(1, 0).PasteSpecial xlPasteFormulasAndNumberFormats

        End If

Next i

End Sub

在IF声明中,我引用了我想查看变量' Country'匹配"数据库"中的单元格表格,如果是,请将其复制到"搜索"片。但代码似乎不起作用,返回错误

Run-time error '1004':
Application-defined or object-defined error

为了解决这个问题,我试图更改代码并引用不同的工作表,但错误似乎与此有关。

我做错了什么?

谢谢

1 个答案:

答案 0 :(得分:3)

问题在于这一行:

Sheets("Database").Range(Cells(i, 1), Cells(i, 9)).Copy

当您从搜索电子表格中运行它时,它会解释" Cells"来自"搜索"的细胞。请改用:

    With Sheets("Database")
        .Range(.Cells(i, 1), .Cells(i, 9)).Copy
    End With