エクセルからアクセスの更新クエリをVBAで実行したい

このQ&Aのポイント
  • エクセルからアクセスの更新クエリをVBAで実行する方法について教えてください。
  • アクセスの「テーブル1」の「フィールド」(Yes/No型)がFalseならTrueにする更新クエリをエクセルから実行したいのですが、実行時エラー2147217913が発生しています。どうすれば解決できるでしょうか?
  • エクセルのVBAを使用して、アクセスのテーブル1に対してフィールドの値を更新する方法を教えてください。
回答を見る
  • ベストアンサー

エクセルからアクセスの更新クエリをVBAで実行したい

こんばんは。たびたび失礼します。 http://oshiete1.goo.ne.jp/qa4909202.html の続きです。 アクセスの「テーブル1」の「フィールド」(Yes/No型)がFalseなら Trueにする更新クエリをエクセルから実行したいのですがうまく行きません。 Sub test1() Dim cn As New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "\\Users\ユーザーアカウント名です\Documents" & "\アクセス.mdb" cn.Execute "UPDATE テーブル1 SET フィールド = False WHERE フィールド='" & True & "'" Set cn = Nothing End Sub これを実行すると 実行時エラー2147217913 抽出条件でデータ型が一致しません。 となります。 どうすればいいでしょうか? ご教授よろしくお願いします。

  • 1wer56
  • お礼率100% (538/538)

質問者が選んだベストアンサー

  • ベストアンサー
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.1

> cn.Execute "UPDATE テーブル1 SET フィールド = False WHERE フィールド='" & True & "'" ↓ cn.Execute "UPDATE テーブル1 SET フィールド = True WHERE フィールド = False" > FalseならTrueにする は、全てが True になることと同じと解釈すると cn.Execute "UPDATE テーブル1 SET フィールド = True" でどうなりますか。

1wer56
質問者

お礼

「全てが True になることと同じ」 まさしくそうです! やってみたらできました! ありがとうございます!!!!

関連するQ&A

  • Excel VBA について教えて下さい

    Excel VBA でAccess接続します 今までは Sub aaa() Set cn = CreateObject("ADODB.Connection") cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=aaa.mdb;" End Sub のように使っていましたが(単一プロシージャ) Set cn = CreateObject("ADODB.Connection") の部分をパブリックにして Sub bbb() cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=aaa.mdb;" End Sub 別のプロシージャからも、使えるためには パブリックにするための方法を教えて下さい

  • 実行時エラー'-2147467259(80004005)':

    エクセルからADOでアクセスに繋ごうとしたときに 実行時エラー'-2147467259(80004005)': マシン'マシン名'のユーザー'Admin'がデータベースを開けない状態、またはロックできない状態にしています。 というエラーが出てしまいます。 書いているコードは以下です。 Public cn As ADOdb.Connection Set cn = New ADOdb.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb" test.mdb自体はテーブルもクエリもフォームも何も開いていない状態です。 一度アクセスを終了させて再起動させればうまくできるのですが、何が原因でこのメッセージが出るのでしょうか? もしわかれば教えてください。 よろしくお願いします。

  • ADO1とADO2は意味は同じですか?

    Private Sub ADO1() Dim cn As New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & CurrentProject.FullName cn.Close: Set cn = Nothing End Sub Private Sub ADO2() Dim cn As ADODB.Connection Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & CurrentProject.FullName cn.Close: Set cn = Nothing End Sub は、 Dim cn As ADODB.Connection Set cn = New ADODB.Connection を簡素化したものが Dim cn As New ADODB.Connection になるのでしょうか?

  • 【ADO】「Filter」を使うか「WHERE」を使うか

    こんばんは。 アクセス2003です。 「Filter」を使うか「WHERE」を使うかべきかわからないので教えてください。 Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Sub test1() cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & アクセスファイル名 rs.Open "SELECT * FROM Tテーブル WHERE 'フィールド1'='りんご", cn, adOpenKeyset, adLockOptimistic rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub Sub test2() cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & アクセスファイル名 rs.Open "SELECT * FROM Tテーブル", cn, adOpenKeyset, adLockOptimistic rs.Filter = "フィールド1 = " & "'" & "りんご" & "'" rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub 以上のふたつのステートメントは Tテーブルのフィールド1にりんごの文字が入力されているレコート゛を抽出します。 いくつかこのような動作をするプログラムを書くのですが どちらのほうがコート゛として適していますか? WHEREを使うtest1の方がコート゛が短くなるからいいのでしょうか? というのもいつかこのファイルを引き継ぐので他人が見てもわかりやすくしたいです。 よろしくお願い致します。

  • アクセス2003 「ODBC--リンク テーブル'テーブル1'での更新に失敗しました。」となる。

    Sub test() Public cn As New ADODB.Connection Public rs As New ADODB.Recordset cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & CurrentProject.FullName rs.Open "Qクエリ", cn, adOpenStatic, adLockPessimistic rs("進捗") = "" rs.Update  ←ここでエラー rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub のコードを実行すると アクセスが「応答なし」になり、その後 「ODBC--リンク テーブル'テーブル1'での更新に失敗しました。」となります。 Qクエリはテーブル1とテーブル2でできています。 毎回発生するエラーではなく、エラーにならない時もあります。 何か原因がわかる方いらっしゃいますか? ご教授よろしくお願い致します。

  • エクセルVBAでアクセスのテーブルインポート

    VBA初心者です。 エクセルのVBAでデータベースA.mdbのテーブルAをデータベースb.mdbにインポートするプログラムお教えて下さい。 '================================================ sub インポート () Set cn = New Connection'データベース接続 cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source="C:\A.mdb" ●ここにPG書くような感じだと思いますが。   cn.Close: Set cn = Nothing'後処理 End Sub '================================================ もし難しい場合、アクセスのVBAでインポートをするが、この実行をエクセルでするよなのでもいいです。この場合は、インポートされるb.mdb側のプログラムをエクセルで実行するようにしたいです。(A.mdbは多数あるため、変更が大変なため) よろしくお願い致します。

  • Newがどのような役割をしているのかわからない

    エクセルからアクセスの更新クエリを実行する際に エクセル側のコードで Sub ACCESSのアクションクエリを実行する() Dim cn As ADODB.Connection Dim myCmd As ADODB.Command Set cn = New ADODB.Connection Set myCmd = New ADODB.Command cn.Open "Provider = Microsoft.ACE.OLEDB.12.0;Data Source=" & strPath & ".accdb;Jet OLEDB:Database" だとうまくいきませんでしたが、 Dim cn As New ADODB.Connection にしたらうまくいきました。 Newを付けることによって成功したのですが、 Newがどのような役割をしているのかわからないので教えてください。

  • ADOでレコードの値を一部変更したい

    アクセスのテーブル1には 番号(主キー) 内容1 内容2 というフィールドがあります。 エクセルからアクセスへADOを使って内容1フィールドだけを変更したのですがうまく行きません。 もともと 番号には「1」、内容1には「あああ」と入力されているとして 内容1を「いいい」に変更したい場合下記のコードを実行すると 「主キーが重複している」というエラーになるか、 全然関係ない番号の値が変わってしまい、テーブルがぐちゃぐちゃになってしまいます。 Sub test() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\○○○\Desktop\test1.mdb" Set rs = New ADODB.Recordset rs.Open "テーブル1", cn, adOpenStatic, adLockPessimistic 番号 = 1 rs("番号") = 番号 rs("内容1") = "いいい" rs.Update '保存 Set rs = Nothing Set cn = Nothing End Sub どうすれば「番号1の内容1の値を変更する」ことが可能なのでしょうか? よろしくお願いします。

  • 【ADO】「Execute」を使うときは「Update」は不要?

    Sub test() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Desktop\test1.mdb" Set rs = New ADODB.Recordset rs.Open "テーブル1", cn, adOpenStatic, adLockPessimistic cn.Execute "DELETE FROM テーブル1" rs.Update '保存 Set rs = Nothing Set cn = Nothing End Sub を実行したとき テーブル1にデータがあるときはエラーにはならないのですが 何もデータがないときは「rs.Update」でエラーになります。 なので「Update」は消して実行していますが 「Update」がなくても「Execute」を実行した後は自動的に保存されるのでしょうか? よろしくお願いします。

  • ADOでアクセスのレコードに複数のフィルタをかけるには?

    Sub ADO() Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & アクセスファイル名 Set rs = New ADODB.Recordset rs.Open "テーブル1", cn, adOpenKeyset, adLockOptimistic rs.Filter = ("フィールド1 = " & "'" & 変数1 & "'") rs.Filter = ("フィールド2 = " & "'" & 変数2 & "'") Debug.Print rs.RecordCount Set rs = Nothing Set cn = Nothing End Sub だと最終的にはフィールド2のフィルタ後の個数しか取得できません。 rs.Filter = ("案件CD = " & "'" & 案件CD & "'" And "プロセス = " & "'" & プロセス & "'") だと「型が一致しません」になります。 どうすれば変数1と変数2のフィルタ後のレコードの個数を取得できるのでしょうか? ご教授よろしくお願い致します。

専門家に質問してみよう