これを変更してみてください:
If InStr(1, Worksheets("Spiff Download Reporting").Range(Cells(n, 6)).Value, text Or text2 Or text3, vbTextCompare = 1) = 0 Then
に:
If InStr(1, Worksheets("Spiff Download Reporting").Range(Cells(n, 6)).Value, text, vbTextCompare) < 1 And _
InStr(1, Worksheets("Spiff Download Reporting").Range(Cells(n, 6)).Value, text2, vbTextCompare) < 1 And _
InStr(1, Worksheets("Spiff Download Reporting").Range(Cells(n, 6)).Value, text3, vbTextCompare) < 1 Then
は論理演算子であり、変数とをブール値として処理しようとするため、この式text Or text2 Or text3
はエラーを引き起こします。それらをブール値に変換できない場合、文句を言います。Or
text
text2
text3
さらに、vbTextCompare = 1
-1 の数値を持つ True に評価されます。これを の 3 番目の引数として入力することInStr
は無効です。InStr
ここでは 0、1、または 2 のみを受け入れます。vbTextCompare
は値 1vbBinaryCompare
の変数、 は値 0 の変数vbDatabaseCompare
、値 2 を保持します。
また、次のように変更することをお勧めします。
Rows(n).EntireRow.Copy
Worksheets("Vendor Paid").Activate
NextRow = Sheets("Vendor Paid").Range("A" & Rows.Count).End(xlUp).Row + 1
Rows(NextRow).EntireRow.Select
ActiveSheet.Paste
Worksheets("Spiff Download Reporting").Activate
Rows(n).EntireRow.Delete Shift:=xlUp
に:
With Worksheets("Spiff Download Reporting")
.Rows(.Range("A:A").End(xlUp).Row+1).Value = Worksheets("Vendor Paid").rows(n).value
End With
Worksheets("Vendor Paid").Rows(n).EntireRow.Delete
注意: コード モジュールの先頭で Option Explicit を使用することをお勧めします。モジュールの一番上に移動して、(それ自体の行に) Option Explicit と入力するだけです。これは、n で行ったように、最初に変数を宣言しないと変数を使用できないことを意味します。
ところで、SOへようこそ:)。あなたの質問はまったく問題ありませんが、次のことを行うと回答を得るのに役立ちます。
- エラーが発生した行を示します
- エラーメッセージの内容を教えてください
- 問題を再現しながら、できる限りコードを削減します (人々があなたを助けるために行うことは少なくなります!)
ここにはたくさんの情報があります。質問がある場合は、コメントで質問することをお勧めします:)。また、イミディエイト ウィンドウ (エディターから Ctrl+G) を使用して、私が説明したことのいくつかを評価してください。入力してエンター? vbTextCompare = 1
を押して、結果を確認してください。または、2 番目の引数を InStr: にエミュレートして、文字列? "a" Or "b" Or "c"
を使用したときに何が起こるかを確認Or
します。
編集
エラーが発生したら、デバッグを押します。次に、ctrl+g を押して即時ウィンドウを表示します。次の行を 1 つずつ入力して、Enter キーを押してみてください。
? Worksheets("Spiff Download Reporting") Is Nothing
? Cells(n, 6) Is Nothing
? Worksheets("Spiff Download Reporting").Range(Cells(n, 6)) Is Nothing
これらの行のうち、少なくとも 2 行でエラーが発生するはずです。どちらの行か教えてください。
ステートメント付き
with ステートメントは、コード内の単一オブジェクトのメソッドとプロパティに主にアクセスする場合に使用されます。そのオブジェクトは、キーワードの後に指定されますWith
。次に、そのオブジェクトの名前を使用せずに、そのオブジェクトのメソッドとプロパティにアクセスできます。基本的な例:
' We are working with the Spiff Download Reporting sheet
With Worksheets("Spiff Download Reporting")
'Because we've used the With statement we don't need to
'specify the target object's name each time we access a
'property (e.g. the name) or method of that object
MsgBox(.Name)
End With
' End with is essentially stating that we are no longer
' predominantly working with the object we specified
' earlier