2016-11-16 13 views
0

Excel 2010を使用して、あるシート(「データベース」)から別のシート(「検索」)に値をコピーするVBAスクリプトを作成していますIF Statementによって満たされた特定の基準が検証されます。VBAでIFステートメントを使用してシートから別のシートに値をコピー

私は次のコードを書いたモジュール作成しました: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 

を、私は変数「国」の中の細胞と一致するかどうかを確認したいことを参照しています"データベース"シートと、もしそうなら、それを "検索"シートにコピーしてください。しかし、コードは、私は、コードと参照異なるシートを変更しようとしましたが、エラーがこの依然に関連すると思わ問題を解決するために、エラー

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

を返し、動作していないようです。

私は間違っていますか?

はこのラインであなたの

答えて

3

問題があるありがとう:

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

あなたが検索スプレッドシートからそれを実行すると、それは「検索」からの細胞を意味する「セル」と解釈します。代わりにこれを使用します。

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

をあなたは* * '、') '(細胞()'、 '行()'、 '列の範囲(範囲を限定していない少し余分な情報については、()'等)をスプレッドシートと比較すると、VBAはあなたが 'ActiveSheet 'が何であれ、それを実行したいと考えます。 OP、あなたは 'Sheets(" Search ")がアクティブなシートなのでエラーが出ますが、Sheets(" Database ")を使って範囲を紹介しています。 – BruceWayne

関連する問題