人生最悪の忘れ物

エクセルからアクセスヘADOで接続し、レコードをエクセルに書き出しています。

アクセスのTPWIDには、
「URL」フィールド(テキスト型)
「終了」フィールド(YesNo型)
があります。
(主キーは他のフィールド)

エクセルVBAで
---------------------------------------------------------
Sub test()
Dim CN As New ADODB.Connection
Dim RS As New ADODB.Recordset

CN.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\テーブルのみ.mdb"

RS.Open "SELECT * FROM TPWID", CN, adOpenStatic, adLockOptimistic
RS.Filter = "終了 = " & False

RS.Close: Set RS = Nothing
End Sub
---------------------------------------------------------
とする分には問題なくできますが、実際行いたい行為は下記なのですが
RS.Filter の部分で、
「実行時エラー 3001 引数が間違った型、許容範囲外、又は競合しています」
と言うエラーになってしまいます。
---------------------------------------------------------
Sub test()
Dim CN As New ADODB.Connection
Dim RS As New ADODB.Recordset

CN.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\テーブルのみ.mdb"
RS.Open "SELECT * FROM TPWID", CN, adOpenStatic, adLockOptimistic
RS.Filter = "URL = '" & "www.yahoo.co.jp" & "' or URL = '" & "www.google.co.jp" & "' And 終了 = " & False

RS.Close: Set RS = Nothing
End Sub
---------------------------------------------------------

RS.Filter = "URL = '" & "www.yahoo.co.jp" & "' or URL = '" & "www.google.co.jp" & "' And 終了 = " & False

RS.Filter = "URL = '" & "www.yahoo.co.jp" & "' and URL = '" & "www.google.co.jp" & "' And 終了 = " & False
にすれば、エラーは発生しませんが
その次のコードを実行しようとすると
「実行時エラー'3021' BOFとEOFのいずれかTRUEになっていか、または現在のレコードが削除されています。要求された操作には、現在のレコードが必要です。」
となってしまいます。

MsgBox RS.RecordCount
で件数を取得したら0件なので、それでエラーになります。

条件としては、
URLフォールドでは
・www.yahoo.co.jp
・www.google.co.jp
のどちらかの文字列を含み、なおかつ
終了フィールドにチェックがついてない(値は0)
です。

ご教授よろしくお願いします。

A 回答 (3件)

フィルターに文字列として渡さなくてはいけないので


RS.Filter = ("URL = 'www.yahoo.co.jp' And 終了 = " & False) Or ("URL = 'www.google.co.jp' And 終了 = " & False)

RS.Filter = "(URL = 'www.yahoo.co.jp' And 終了 = " & False & ") Or (URL = 'www.google.co.jp' And 終了 = " & False & ")"
じゃないですか?未検証です。
    • good
    • 0
この回答へのお礼

RS.Filter = "(URL = 'www.yahoo.co.jp' And 終了 = " & False & ") Or (URL = 'www.google.co.jp' And 終了 = " & False & ")"

で出来ました!!!ありがとうございました。

お礼日時:2012/07/07 22:42

Officeのバージョンはいくつでしょう。


2010ではAccessでもExcelでもVBEの画面でヘルプ(F1キー)で
論理演算子で調べると、『演算子の優先順位』の説明が有ります。
算術演算子(+-*/)の
1+2*3 ≠ 9 、1+2*3 = 7 と同様に
論理演算子ではAnd が先に評価されその後で Or を評価します。
なので
・www.yahoo.co.jp
・www.google.co.jp
のどちらかの文字列を含み、なおかつ
終了フィールドにチェックがついてない(値は0)
はイメージ的には(手抜き回答ですが)
yahoo OR google AND false では、
google AND false の評価を行い、
『それから得たもの』 OR yahoo の評価に進みます。
ですので、
(yahoo AND false) OR (google AND false) のように組み立てる必要が有ります。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

説明不足ですいません。バージョンは2007です。

演算子の優先順位をよく見て考えるべきでしたね。

ちなみに
RS.Filter = ("URL = 'www.yahoo.co.jp' And 終了 = " & False) Or ("URL = 'www.google.co.jp' And 終了 = " & False)

にしてみたのですが
「型が一致しません。(Error 13)」になってしまいます。
何が間違ってるのでしょうか?

再度ご回答頂ければ幸いです。よろしくお願いします。

お礼日時:2012/05/21 21:08

こちらが参考になると思われます。



ADOでFilter
http://oshiete.goo.ne.jp/qa/3818384.html
    • good
    • 0
この回答へのお礼

私の質問と同じような内容ですね。
よく見てみます
ありがとうございました。

お礼日時:2012/05/21 21:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報