【问题标题】:Copy values from a sheet to another sheet with IF Statement in VBA [duplicate]使用VBA中的IF语句将值从工作表复制到另一个工作表[重复]
【发布时间】:2017-03-31 08:55:37
【问题描述】:

我正在使用 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 语句中,我提到我想查看变量“国家/地区”是否与“数据库”表中的单元格匹配,如果匹配,请将其复制到“搜索”表中。但是代码似乎不起作用,返回错误

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

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

我做错了什么?

谢谢

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    问题出在这一行:

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

    当您从搜索电子表格运行它时,它会将“单元格”解释为来自“搜索”的单元格。改用这个:

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

    【讨论】:

    • 有关一些额外信息,当您限定范围(Range(),Cells(),Rows(),Columns() 等)时在电子表格中,VBA 将假定您希望在 ActiveSheet 上运行它。 OP,您遇到了一个错误,因为 Sheets("Search") 是活动工作表,但您使用 Sheets("Database") 来“引入”范围,这会发生冲突。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    相关资源
    最近更新 更多