• 締切済み

エクセルVBAでアクセスの更新クエリを実行

エクセルVBAでアクセスの更新クエリを実行する方法はありますか? アクセスもエクセルも常に起動している状態です。 エクセルからアクセスの更新クエリを実行するコードを教えてください。 アクセスで実行するとしたら Sub test1() DoCmd.OpenQuery "更新クエリ" End Sub というコードになります。 できれば、ADODBを使ったやり方がいいのですが、 エクセルからアクセスのプロシージャーのtest1を呼ぶしかないのでしょうか?

みんなの回答

回答No.1

そちらの環境が不明なので、Office2010だとこんな風? Sub test() Dim cN As Object 'ADODB.Connection '←参照設定してある場合はこっち Dim sSql As String Dim rS As ADODB.Recordset On Error GoTo errH Set cN = CreateObject("adodb.connection") With cN .Provider = "Microsoft.ACE.OLEDB.12.0" .Properties("Data Source").Value = "E:tmp\祝日DB.accdb" .Properties("Jet OLEDB:Database Password").Value = "" End With cN.Open sSql = "UPDATE 祝日 SET 名称='おとなの日' WHERE 名称 Like 'こども%' ;" cN.BeginTrans cN.Execute sSql cN.CommitTrans errH: If Err.Number <> 0 Then cN.RollbackTrans Debug.Print Err.Number & " " & Err.Description MsgBox Err.Number & vbNewLine & Err.Description Else MsgBox "終了しました" End If cN.Close: Set cN = Nothing End Sub 余計?な解説 ADOで接続してAccessのクエリをそのまんま流用は出来ないかと。 上記のようにワイルドカード * ⇔ % の問題もありますし。 クエリのSQL文を少し手直しする必要も出て来るかと。 たまたまAccess側でデータ編集中・・を考えてエラー処理を入れてはいますが、 トランザクション処理に関しては自信がありません。。。

関連するQ&A

  • エクセルからアクセスの更新クエリを実行するコード

    アクセスなら 自身のデータベースの更新クエリを実行する場合は DoCmd.OpenQuery "Q更新クエリ" で出来ますが、 エクセルから、 D:\Access.mdbの"Q更新クエリ"を実行するには どうすればいいのでしょうか? ADOを使うのでしょうか? ヴァージョンは2003です。 よろしくお願いします。

  • アクセス2000でVBAを使ってクエリを実行したいのです

    Access2000でVBAを使っています。 Docmdでクエリを実行させたいのですが、 DoCmd.OpenQuery stDocName1, acNormal, acHidden とするとクエリの実行結果が表示されます。 クエリだけ実行されて実行結果を非表示にする方法は ありますでしょうか? Form1のコマンドボタンを押下後、クエリが実行されて 別のFormにデータ表示させたいので、なるべくクエリの実行結果を表示させたくないのです。 よろしくお願いいたします

  • 「クエリが閉じてるなら」「クエリが開いてるなら」

    Sub test() If クエリが閉じてるなら Then  DoCmd.OpenQuery "クエリ1" ElseIf クエリが開いてるなら Then  DoCmd.Close acQuery, "クエリ1" End If End Sub という事をやりたいのですが、 「クエリが閉じてるなら」 「クエリが開いてるなら」 のコードがわかりません。 よろしくお願い致します。

  • エクセルからアクセスの更新クエリを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 抽出条件でデータ型が一致しません。 となります。 どうすればいいでしょうか? ご教授よろしくお願いします。

  • アクセスVBAでの別アクセス呼び出しの記述について

    作成したいテーブルが大きすぎて、2Gをあっという間に超えてしまいます。 なので、別のアクセスMDBも併用しつつ処理を実行しようかと思うのですが、 下記のように書いています。すると、まず、一つ目のDB(VBAを書いているほうのDB)でのtestクエリは実施され、TEST1DBが呼び出されるところまではいくのですが、TEST1DBにのっているtest2というクエリはうごきません。 どのように記述すればよいのでしょうか??ど素人でもうしわけありませんが、 どうぞよろしくお願いします。 Option Compare Database Sub test() DoCmd.OpenQuery "test" fl_name = "MSAccess C:\xx\test1.mdb" Call Shell(fl_name, 1) DoCmd.OpenQuery "test2" End Sub また、あわせて質問なのですが、 テーブル作成クエリなので、「テーブルが削除されます」とかがでます。 自動バッチにしたいので、いちいち確認しないでサクサクと次へ進んでほしいのですが 解決策はあるのでしょうか? よろしくお願いします あと、いつも迷うのですが、、アクセスのフォームとかを書くときに使っているVBAは、 カテゴリー選択にないので、、VisualBasicを選んでいいんでしょうか??

  • EXCEL vbaからACCESSのクエリを開く

    EXCEL2010 WEBを参照してEXCEL VBAでACCESSのクエリを開くマクロを流用しました。 下記がマクロの内容です。 Private Sub Import() Dim db As ADODB.Connection Dim rs As ADODB.Recordset 'ACCDBファイルに接続します Set db = New ADODB.Connection db.Provider = "Microsoft.Ace.OLEDB.12.0" db.Open "C:\work\TEHAI.accdb" 'レコードセットを開きます Set rs = New ADODB.Recordset 'Accessのクエリを開く rs.Open Source:="TEHAI", ActiveConnection:=db If rs.EOF Then MsgBox "抽出した結果、レコードが見つかりません。" Else ' レコードをシートへ貼り付ける Range("A1").CopyFromRecordset rs End If rs.Close Set rs = Nothing Set db = Nothing End Sub これを実行すると、 抽出した結果、レコードが見つかりません。 が表示されます。 ACCESS単体でTEHAIクエリを実行したら、約3万件くらいヒットします。 EXCELマクロから実行したらACCESSからデータをもってこられません。 なぜレコードが見つかりません、 となるのでしょうか? マクロのどこがおかしいのか、教えていただきたく。 ちなみに、もともとの内容から変更したのは db.Open "C:\work\TEHAI.accdb" rs.Open Source:="TEHAI", の2ヶ所だけです。

  • エクセルからアクセスのプロシージャーを実行する

    エクセルからアクセスのプロシージャーを実行する方法を教えてください。 アクセスファイル名→ファイル1.accdb プロシージャー名→test1 なのですが、 エクセルで Sub ACCESSのプロシージャーを実行する() Dim OBJ As Object Set OBJ = GetObject("C:\Users\Desktop\ファイル1.accdb") OBJ.Application.Run OBJ.Name & "!test1" Set OBJ = Nothing End Sub としたら、 実行時エラー 2517 ’Microsoft Access!test1’プロシージャーが見つかりません。 になります。 test1は、アクセスの標準モジュール内に記載しています。 モジュール名も指定しないとだめなのでしょうか? その場合のコードの書き方がわからないので教授ください。 該当のアクセスファイルは既に起動しているときもあるし、してない時もあります。

  • アクセスからエクセルのプロシージャーを実行させたい

    オフィス2007です。 ////////////////////////////////////////////////////////// ‘Excel側の標準モジュール ////////////////////////////////////////////////////////// Sub Excelのプロシージャー() MsgBox "Excelです" End Sub ////////////////////////////////////////////////////////// ‘Access側の標準モジュール ////////////////////////////////////////////////////////// Sub Accessのプロシージャー() Dim xlsWB As Object Dim MyFileName As String MyFileName = "D:\Accessからプロシージャーの実行テスト用ファイル.xlsm" Set xlsWB = GetObject(MyFileName) xlsWB.Application.Run xlsWB.Name & "!Excelのプロシージャー" Set xlsWB = Nothing End Sub の状態で、アクセス側から Accessのプロシージャー実行すると、 ////////////////////////////////////////////////////////// マクロ'Accessからプロシージャーの実行テスト用ファイル.xlsm!Excelのプロシージャー' を実行できません。 このブックでマクロが使用できないか、 またはすべてのマクロが無効になっている可能性があります。 ////////////////////////////////////////////////////////// となります。 エクセル側は、「すべてのマクロを有効にする」にしているし、エクセルファイルを単独で開き、 Excelのプロシージャーを実行すると問題なく動きます。 同じ条件で、2003で検証すると問題なく動きます。(拡張子は適宜変えてます) エクセルのパスが間違ってるのかな?と思い、適当なパスに変えたところ、 「オートメーション操作中にファイル名またはクラス名を見つけられませんでした。(Error 432)」 というエラーがでたので、パスは合ってます。 原因がわかる方、ご回答よろしくお願いします。

  • Access2000でVBAからパラメータクエリを実行

    Access2000でフォームからの値を参照して実行するクエリを作りました。 SQLで表すと、以下のようなものです。 クエリ名:test SELECT TEST.HAKKODTE FROM TEST WHERE (((TEST.HAKKODTE)=Format([Forms]![F_メニュー]![txtNyukinDate],"yyyymmdd"))); このクエリをダブルクリックで実行すると問題なく実行できます。 これを、VBAからレコードを参照したいと思い、 以下のように記述しました。 Dim cn As ADODB.Connection Set cn = CurrentProject.Connection Dim rs1 As ADODB.Recordset Set rs1 = New ADODB.Recordset Dim sqlstr As String sqlstr = "SELECT * FROM test;" rs1.Open sqlstr, cn, adOpenKeyset, adLockOptimistic しかし、Open処理で、「1つ以上の必要なパラメータの値が設定されていません」 というエラーになってしまいます。 VBAを実行するときに、[Forms]![F_メニュー]![txtNyukinDate]に きちんと値は入力されています。 これを実行する方法はあるでしょうか?

  • エクセルからアクセスのアクションクエリ エラー

    今までできてたコードが急にできなくなりました。 エクセルからアクセスのアクションクエリを実行するvbaコードなのですが Sub 削除クエリを実行する () Dim cmd As New ADODB.Command Dim MySQL As String cn.Open "Provider = Microsoft.ACE.OLEDB.12.0;Data Source=" & "D:\(test).accdb" MySQL = "DELETE Tローカル.* FROM Tローカル;" cmd.ActiveConnection = cn cmd.CommandText = MySQL cmd.Execute MySQL cn.Close: Set cn = Nothing End Sub を、今までやっていたのに、 昨日からできなくなりました。 cn.Open "Provider の部分で、 実行時エラー、-2147467259(80004005) エラーを特定できません。 となります。 環境は、win7、オフィス2010です。

専門家に質問してみよう