INSERT INTOステートメント構文エラーについて

このQ&Aのポイント
  • office365(ExcelとAccess)を使用して、ExcelのデータをAccessに書き込む作業を行っています。
  • エラーメッセージ「INSERT INTO ステートメントの構文エラーです。」が表示され、原因がわかりません。
  • VBAの基本的な知識しかなく、修正方法がわからないため質問しています。
回答を見る
  • ベストアンサー

INSERT INTOステートメント構文エラーにつ

初めましてご教授よろしくお願いします。 ■環境 office365(ExcelとAccess) INSERT INTOステートメント構文エラーについての質問です。 著:今村ゆうこさんの『Excel&Access連携 実践ガイド』を読みながら現在作業を しています。 やりたいことはExcelのデータをaccessに書き込むことです。 エラー内容は「INSERT INTO ステートメントの構文エラーです。」と表示されます。 しかし、何度も見直して見ましたが、どこがエラーの原因かわかりません。 VBAは基本的部分が分かる程度で、現在勉強中です。 正直手詰まりといった感じで何を修正すれば良いかわからないというのが現状でこちらに質問させていただきました。 皆様の知恵を貸してください。どうかよろしくお願い致します。 ▼Excelデータ Product Name / Merchant SKU / ASIN / Condition / qty ○○(商品名) / テキスト / テキスト / テキスト / 個数 strSQL = _ "INSERT INTO テーブル(" & _ "Product Name, " & _ "Merchant SKU, " & _ "ASIN, " & _ "Condition, " & _ "qty) " & _ "VALUES(" & _ "'" & Cells(n, 1) & "', " & _ "'" & Cells(n, 2) & "', " & _ "'" & Cells(n, 3) & "', " & _ "'" & Cells(n, 4) & "', " & _ Cells(n, 5) & ");" ▼書籍に記載のあった例(添付CDのデータを丸々コピペしています) strSQL = _ "INSERT INTO 販売管理(" & _ "商品コード, " & _ "商品名, " & _ "売上日, " & _ "数量, " & _ "売価, " & _ "製造場所, " & _ "定価, " & _ "原価, " & _ "取引先, " & _ "営業所, " & _ "社員名) " & _ "VALUES(" & _ "'" & Cells(n, 1) & "', " & _ "'" & Cells(n, 2) & "', " & _ "#" & CDate(Cells(n, 3)) & "#, " & _ Cells(n, 4) & ", " & _ Cells(n, 5) & ", " & _ "'" & Cells(n, 6) & "', " & _ Cells(n, 7) & ", " & _ Cells(n, 8) & ", " & _ "'" & Cells(n, 9) & "', " & _ "'" & Cells(n, 10) & "', " & _ "'" & Cells(n, 11) & "');" ▼全体の文 Option Explicit '変数の宣言を強制する '---ACCESS接続用 Private adoCn As Object 'ADOコネクションオブジェクト Private adoRs As Object 'ADOレコードセットオブジェクト Private strSQL As String 'SQL文 Sub DBconnect(flg As Boolean) 'DB接続プロシージャ Dim DBpath As String DBpath = ThisWorkbook.Path Set adoCn = CreateObject("ADODB.Connection") 'ADOコネクションオブジェクトを作成 If flg = True Then Set adoRs = CreateObject("ADODB.Recordset") 'ADOレコードセットオブジェクトを作成 adoCn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _ "Data Source=" & DBpath & "\SampleData.accdb;" 'Accessファイルを開く End Sub Sub DBcut_off(flg As Boolean) 'DB切断プロシージャ If flg = True Then adoRs.Close 'レコードセットのクローズ adoCn.Close 'コネクションのクローズ Set adoRs = Nothing 'オブジェクトの破棄 Set adoCn = Nothing End Sub Sub DBinsert_all() 'DB一括書込 Dim start_i As Long, end_i As Long, n As Long If MsgBox("一括書込を実行しようとしています。続けますか?", vbOKCancel) <> 1 Then 'メッセージ Exit Sub 'OK以外なら終了 End If If MsgBox( _ "Accessの「販売管理」テーブルのデータを一度削除し、" & vbCrLf & _ "現在このシートにある情報のみが書き込まれます。" & vbCrLf & _ vbCrLf & _ "実行してよろしいですか?", vbOKCancel + vbExclamation, "一括書込み") <> 1 Then 'メッセージ Exit Sub 'OK以外なら終了 End If start_i = 2 'スタート行 end_i = Range("A1").End(xlDown).Row '最終行を取得 Call DBconnect(False) 'DB接続 On Error GoTo Err_Handler 'エラーが起きたら"Err_Handler"へ adoCn.BeginTrans 'トランザクション開始 strSQL = "DELETE FROM 販売管理;" 'テーブル内データを全削除 adoCn.Execute strSQL '削除実行 For n = start_i To end_i 'データのある行を繰り返す strSQL = _ adoCn.Execute strSQL '書込実行 Next n adoCn.CommitTrans 'トランザクション終了(確定処理) Call DBcut_off(False) 'DB切断 MsgBox "正常に完了しました" Exit Sub

  • MySQL
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
回答No.1

> "Product Name, " & _ > "Merchant SKU, " & _ ここ↑ですが、フィールド名に空白があるなら、 "[Product Name], " & _ "[Merchant SKU], " & _ という具合にしないとダメかと。

sakusakuraaa
質問者

お礼

ありがとうございます!!ここ最近ずっとこれで悩んでいましたが解決できました!!

関連するQ&A

  • VBA データセットした後にその一部をLOCK

    こんばんは。 お世話になります。 エクセルVBAにてアクセスからデータを取得し、その一部をロックしたいです。 (取得方法には色々あるかと思います。 経験が浅いためどう表現すれば適切か自信がありませんが 「ADOコネクションオブジェクトとADOレコードセットオブジェクトにて実施しています。」) 【VBAの仕様の説明】 「読込」ボタンを押すと、B12~AA1000のエリアのデータを一掃して、 そこに条件によりレコード数が変わりますが、アクセスのデータをセットしています。 その後、これらの出力されたレコードについてエクセル上にて値を書き換えたのちに 「更新」ボタンを押すと、アクセスに更新に行くというものです。 このときB,C,D,E列については、更新処理時に重要なものであり、F列以降と異なり 書き換えてはいけないものです。 【実現したいこと】 このエクセルを開いてから閉じるまでの間、いつでもB12~E1000は手入力不可にしたいです。 ただし、エクセルを開いていきなりロックをしてしまうと、「読込」を押したときに アクセスのデータを出力するときにエラーになってしまいますので 読込ボタンを押した後はB12~E1000のロックを外したいです。 これが難しいようであれば、エクセルを開いてから「読込」を押すまでの間は ロックをかけなくてもよいです。 ある程度ググったので シートを保護する & 特定のセルのLOCKをfalseにする を適切なタイミングで 実施するのだとは理解していますが、実装しようとすると 「RangeクラスのLockedプロパティを設定できません」というエラーが出てしまって 詰まってしまっています。 よろしくお願いいたします。 ↓↓↓↓ソースです。↓↓↓↓ Private adoCn As Object 'ADOコネクションオブジェクト Private adoRs As Object 'ADOレコードセットオブジェクト Private strSQL As String 'SQL文 Private Const DBpath As String = "C:\zaiko.accdb" '接続するファイル(2007~)のフルパス '---------ファイルが開けない場合のエラーを追加 Private file_error As String '--------- Sub DBconnect(flg As Boolean) 'DB接続プロシージャ '---------ファイルが開けない場合のエラーを追加 On Error GoTo Err_Handler 'エラーが起きたら"Err_Handler"へ file_error = 0 'エラーが起きない正常な間はエラーをオフにする。 '--------- Set adoCn = CreateObject("ADODB.Connection") 'ADOコネクションオブジェクトを作成 If flg = True Then Set adoRs = CreateObject("ADODB.Recordset") 'ADOレコードセットオブジェクトを作成 'adoCn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DBpath & ";" 'Accessファイル(~2003)を開く adoCn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & DBpath & ";" 'Accessファイル(2007~)を開く '---------ファイルが開けない場合のエラーを追加 Exit Sub '正常ならここで終了 Err_Handler: 'エラーが起きたらここへ飛ぶ MsgBox "「C:\」フォルダの下にエクセルとアクセスファイルを置いてください。" file_error = 1 '--------- End Sub Sub DBcut_off(flg As Boolean) 'DB切断プロシージャ If flg = True Then adoRs.Close 'レコードセットのクローズ adoCn.Close 'コネクションのクローズ Set adoRs = Nothing 'オブジェクトの破棄 Set adoCn = Nothing End Sub Sub DBread() '読み込み Dim shouhinbangou As String, dy As String, txt As String Call DBconnect(True) 'DB接続 If file_error = 1 Then file_eroor = 0 '初期化してから Exit Sub '処理終了 End If With UserForm1 .show 'ユーザーフォーム表示 If .TextBox1 = "" Then '商品番号欄が空欄の場合 shouhinbangou = "" Else '商品番号欄が記入済 shouhinbangou = "WHERE item_no LIKE '%" & .TextBox1 & "%' " '~を含む End If End With strSQL = _ "SELECT * " & _ "FROM zaiko_table " & _ shouhinbangou adoRs.Open strSQL, adoCn 'SQLを実行して対象をRecordSetへ Range("B12:Z1000").ClearContents '前のデータクリア Range("B12:Z1000").Font.ColorIndex = xlAutomatic 'フォント色を初期化 Range("B12:AA1000").Borders.LineStyle = xlLineStyleNone Application.EnableEvents = False 'イベントオフ(ワークシートチェンジが反応しないように) i = 12 'スタート行 Do Until adoRs.EOF 'レコードセットが終了するまで処理を繰り返す Cells(i, 2) = adoRs!ID Cells(i, 3) = adoRs!item_no Cells(i, 4) = adoRs!color_no Cells(i, 5) = adoRs!item_name Cells(i, 6) = adoRs!~~~ ~中略~ Cells(i, 26) = adoRs!~~~ i = i + 1 '行をカウントアップする adoRs.MoveNext '次のレコードに移動する Loop '下から数える With Range("B12") .Resize(Cells(Rows.Count, .Column).End(xlUp).Row - .Row + 1, 26).Borders.LineStyle = xlContinuous End With Application.EnableEvents = True 'イベントオン Call DBcut_off(True) 'DB切断 End Sub

  • 可変の検索条件件数でAccessデータを抽出

    http://okwave.jp/qa/q8790348.html ここで質問をさせて頂いたのですが 私の質問方法が下手で、違う意味合いになっていましたので再度投稿させてください。 ■ やりたい事 ADOを用いて、Accessのテーブル内のフィールドに「指定の数値」がある場合 その行を全てExcelに抽出したい ■ 特徴 「指定の数値」は複数あり、なおかつ可変。  → VBAで作成したコンボボックス(Accessから読込)にて選択し、F45から下に好きな個数だけ追加 ■ つまづき点 「指定の数値」全てを検索対象に(OR検索)して SQLのSelect文で取得しようとしてもやり方が分からない ■ 現在のコード '宣言 Private adoCn As Object Private adoRs As Object Private strSQL As String Private Const DBpath = "\Access.mde" Sub DBconnect(flg As Boolean) 'DB呼出 Set adoCn = CreateObject("ADODB.Connection") If flg = True Then Set adoRs = CreateObject("ADODB.Recordset") adoCn.Open "Provider=Microsoft.jet.OLEDB.4.0;Data Source=" & DBpath & ";" End Sub Sub 対象() Dim tmpFldCnt As Variant Dim tmpRecCnt As Integer Dim buf() As Variant Call DBconnect(True) m = Worksheets("選択").Range("B47") Dim i As Long Dim j As Long i = 45 j = 44 + Worksheets("選択").Range("B47") 'B47:コンボボックスで選んだ個数分の数値 On Error GoTo err_hander adoCn.BeginTrans 'トランザクション処理開始 strSQL = _ "select * from TBL where コード = [選択$F" & i & ":F" & j & "]" 'F45より下に取得した値が入っていく adoRs.Open strSQL, adoCn, adOpenKeyset 'SQLを実行して、対象をadoRsへ tmpFldCnt = adoRs.Fields.Count tmpRecCnt = adoRs.RecordCount Range("M28:DG31").ClearContents ReDim buf(tmpFldCnt - 1, tmpRecCnt - 1) buf = adoRs.GetRows Range(Cells(28, 13), Cells(28 + tmpFldCnt - 1, 13 + tmpRecCnt - 1)) = buf adoCn.CommitTrans 'トランザクション終了 Call DBcut_off(True) 'DB切断呼び出し Exit Sub 色々と調べてみたものの、解決する気配がせず、どなたか知恵をお貸しください。

  • excelからAccessのDBを更新でエラー

    excel2016 excelでaccessへのデータ登録はできたのですが、登録したaccessデータの更新でエラーが発生します。 構成 MENUシートのD4に表示されたシート名でaccessへ登録を実施。 このシート名はaccessのテーブル名になっている。 accesssのファイル名は Machine.accdbでサーバに登録している(サーバ名の実名は伏せて***にしてます) accessファイルは単独で編集できない様にパスワード付きでexcelからのみ追加更新を可能にする。 excelの題目 A1:ref_serial C1:result1 D1:result2 他にも題目ありますが、関係する部分とします。 データは A2セルに数字4桁 C2セル整数2桁小数点3桁 D2セル整数2桁小数点3桁 accessで ref_serial、オートナンバー、長整数型 result1,数値型、単精度浮動小数点型 result2,数値型、単精度浮動小数点型 としてます addのマクロで追加した内容を、そのままrenewのマクロ実行すると 実行時エラー424 オブジェクトが必要です とのポップアップエラーが発生します。 エラーが発生するのは strSQL = _ "UPDATE '" & sheet_name & "' " & _ "SET " & _ ws.Worksheets(sheet_name).Range("C1").Value & "=" & ws.Worksheets(sheet_name).Range("C2").Value & "," & _ ws.Worksheets(sheet_name).Range("D1").Value & "=" & ws.RWorksheets(sheet_name).ange("D2").Value & "," & _ "WHERE ref_serial =" & ws.Worksheets(sheet_name).Range("A2").Value の部分。 web等でも調べたのですが、何が悪いのかわからず、このエラーが出ない様に修正いただきたく、よろしくお願いします。 データ登録のマクロ Sub add() Dim strFileName As String strFileName = "Machine.accdb" Dim DBpath As String DBpath = "***" 'accdbファイルパス Dim password As String password = "AAAA" 'InputBox("パスワードを入力してください") If password = "" Then Exit Sub Dim adoCn As Object 'ADOコネクションオブジェクト Set adoCn = CreateObject("ADODB.Connection") 'ADOコネクションオブジェクトを作成 adoCn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & DBpath & "\" & strFileName & ";" & _ "Jet OLEDB:Database Password=" & password & ";" 'Accessファイルに接続 Dim adoRS As Object 'ADOレコードセットオブジェクト Set adoRS = CreateObject("ADODB.Recordset") 'ADOレコードセットオブジェクトを作成 Dim day As String day = Worksheets("MENU").Cells(1, 2) Dim sheet_name As String sheet_name = Worksheets("MENU").Cells(4, 4) With adoRS .Open sheet_name, adoCn, adOpenKeyset, adLockOptimistic 'レコードセットを開く" Dim adoCON As New ADODB.Connection .AddNew !ref_serial = Worksheets(sheet_name).Cells(2, 1) !result1 = Worksheets(sheet_name).Cells(2, 3) !result2 = Worksheets(sheet_name).Cells(2, 4) !result_update = Worksheets("MENU").Cells(1, 2) .update .Close 'レコードセットのクローズ End With adoCn.Close 'コネクションのクローズ Set writeSht = Nothing Set adoRS = Nothing Set adoCON = Nothing End Sub 更新のマクロ Sub renew() Dim strFileName As String strFileName = "Machine.accdb" Dim DBpath As String DBpath = "***" 'accdbファイルパス Dim password As String password = "AAAA" 'InputBox("パスワードを入力してください") If password = "" Then Exit Sub Dim adoCn As Object 'ADOコネクションオブジェクト Set adoCn = CreateObject("ADODB.Connection") 'ADOコネクションオブジェクトを作成 adoCn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & DBpath & "\" & strFileName & ";" & _ "Jet OLEDB:Database Password=" & password & ";" 'Accessファイルに接続 Dim day As String day = Worksheets("MENU").Cells(1, 2) Dim sheet_name As String sheet_name = Worksheets("MENU").Cells(4, 4) Dim strSQL As String strSQL = _ "UPDATE '" & sheet_name & "' " & _ "SET " & _ ws.Worksheets(sheet_name).Range("C1").Value & "=" & ws.Worksheets(sheet_name).Range("C2").Value & "," & _ ws.Worksheets(sheet_name).Range("D1").Value & "=" & ws.RWorksheets(sheet_name).ange("D2").Value & "," & _ "WHERE ref_serial =" & ws.Worksheets(sheet_name).Range("A2").Value adoCn.Execute strSQL 'SQLを実行 adoCn.Close 'コネクションのクローズ Set adoCn = Nothing 'オブジェクトの破棄 End Sub

  • Excel VBA : Accessのデータを検索

    Excel VBA を使って、Accessのデータを検索したい。 除外テーブルには「管理ID」レコードが在り、ユニークな番号を登録してあります。 やりたいことは、除外テーブルの管理IDに在るであろう、"E003"の有無を確認したいと思います。 作ってみたソースコードは、以下の通り。 Private Sub aSearch_Click() DB.TableOpen ("db_name.mdb") 'Accessのファイル DB.FindRecode ("E003")  ' 検索対象文字列 DB.TableClose End Sub ------------------------------ここから、標準モジュール Public adoCn As ADODB.Connection Public adoRs As ADODB.Recordset Public fSql As String Public fRow As Integer 'データ ソースへの接続と、レコードセットへの接続 Sub TableOpen(ByVal mdb_name As String) Set adoCn = New ADODB.Connection 'データ ソースへの接続 adoCn.Provider = "Microsoft.Jet.OLEDB.4.0" 'Accessへ接続プロバイダ名 adoCn.Open mdb_name '接続するmdbファイル名" fSql = "select 管理ID from 除外テーブル" Set adoRs = New ADODB.Recordset 'レコードセットへの接続 adoRs.Open fSql, adoCn, adOpenKeyset, adLockReadOnly 'クエリーの実行 ' adoRs.Open "除外テーブル", adoCn, adOpenKeyset, adLockReadOnly 'クエリーの実行 End Sub 'レコード(管理ID)の検索 Function FindRecode(ByVal findName As String) As String adoRs.Find adoRs.Fields("管理ID") & "=" & findName     '← ここでエラーとなる  If adoRs.RecordCount = 0 Then MsgBox "該当するレコードは存在しません" FindRecode = "" Exit Function Else Do     ' Doループは、要らないかも??? Debug.Print adoRs.Fields("管理ID") & "/" & adoRs.Fields("登録日") adoRs.MoveNext Loop Until adoRs.EOF End If FindRecode = adoRs.Fields("管理ID") End Function 'データ ソースへの接続と、レコードセットを切断する Sub TableClose() adoRs.Close 'クエリーを閉じる adoCn.Close 'データ接続を閉じる Set adoRs = Nothing Set adoCn = Nothing End Sub ------------- ここまで データのソースから、検索する方法が良く判っておらず、Open / find の使い方はこれで良いのでしょうか。 以上、よろしくお願いします。

  • INSERT INTOステートメント構文エラー

    はじめまして。 急遽VB6.0、Accessで開発を行うことになりまして、小さなアプリを練習がてら作成したのですが、上記エラーが出てしまい、困っています。当方まったくの初心者で本を片手にコーディングしております。。 機能:CSVからデータを取り出して、DBにINSERTする コード Private cn As New ADODB.Connection Private Rs As New ADODB.Recordset Private Sub フォームフッター_Click() End Sub Private Sub トグル27_Click() Dim filPath As String ' [ファイルを開く]ダイアログ WizHook.Key = 51488399 damy = WizHook.GetFileName(0, "", "", "", filPath, "", "すべてのファイル (*.*)|*.*", 0, 0, 0, True) Me!fp = filPath WizHook.Key = 0 End Sub Private Sub トグル28_Click() Set cn = CurrentProject.Connection Open Me!fp For Input As #1 Dim varData As Variant Dim buf As String Dim a As String Dim b As String Dim c As String Do Until EOF(1) Line Input #1, buf varData = Split(buf, ",", , vbTextCompare) Dim mySql As String a = varData(0) b = varData(1) c = varData(2) MsgBox a MsgBox b MsgBox c mySql = "INSERT INTO COUNT(f,s,t) VALUES ('" & a & "','" & b & "','" & c & "')" Debug.Print mySql cn.Execute (mySql) MsgBox "更新されました。" Loop Close #1 cn.Close End Sub テーブル: フィールド名 f,s,t すべてテキスト型 イミディエイトウィンドウ表示内容:INSERT INTO COUNT(f,s,t) VALUES ('1','2','3') 恐れ入りますが、ご教授いただければ幸いです。 よろしくお願いします!

  • INSERT INTOで数値型にNull代入

    Win XP Access 2003 お世話になります。 下記のコードで、 フォームのcmb性別を選択せず登録ボタンを押してINSERTするとエラーになります。 調べた所、数値型フィールドにNullを代入出来ないとありました。 性別フィールドは必須項目にせず選択しない時は空白でレコードに追加にしたいです。 過去ログを調べてほぼ同じ質問を見つけましたが本人さんが自己解決したらしく具体的なコードが記されていません・・・ アドバイス宜しくお願いいたします。 Dim adoCN As ADODB.Connection Dim strSQL As Variant Set adoCN = Application.CurrentProject.Connection strSQL = "INSERT INTO T顧客情報" _ & " (顧客コード" _ & " ,顧客名" _ & " ,性別)" strSQL = strSQL _ & "VALUES (" & Me!txt顧客コード.Value & "" _ & " ,'" & Me!txt顧客名.Value & "'" _ & " ,'" & Me!cmb性別.Value & "')" adoCN.BeginTrans adoCN.Execute strSQL If Err.Number = 0 Then adoCN.CommitTrans MsgBox Format(txt顧客コード, "0000000") & Chr(13) & txt顧客名 & Chr(13) & "を登録しました。", 64, "確認! 登録" Else adoCN.RollbackTrans MsgBox Format(txt顧客コード, "0000000") & Chr(13) & txt顧客名 & Chr(13) & "の登録に失敗しました。", 64, "確認! 登録" End If adoCN.Close Set adoCN = Nothing

  • insert文

    VBAの質問ではありますが、こちらの方が回答されやすいかと思い こちらに投稿しました。 Excel内のデータをDBに作成したテーブルの 各項目にinsert文を使って入れる処理をしたく 下記のコードを書いたのですが 実行時エラー440 オートメーションエラーと、でて止まってしまいます。 項目は MASTERKBN NAMEKBN NAMECODE NAMESの4つです。 Const Sv_Name = "Scaw" Const Pass_WD = "SAWAGUCHI/SAWAGUCHI" Const Table_Name = "ZAA_MS510" Sub 削除後追加() Dim OSession As Object Dim ODataBase As Object Dim StrSQL As String Dim idx1, idx2 As Integer Dim objDstSheet As Worksheet Set OSession = CreateObject("OracleInProcserver.XOraSession") Set ODataBase = OSession.OpenDatabase(Sv_Name, Pass_WD, 0&) StrSQL = "Truncate Table " & Table_Name ODataBase.ExecuteSQL (StrSQL) Set objDstSheet = ThisWorkbook.Worksheets(3) With objDstSheet For idx1 = 2 To objDstSheet.UsedRange.Rows.Count 'StrSQL = "Insert Into " & Table_Name & " Values(" For idx2 = 1 To objDstSheet.UsedRange.Columns.Count If idx2 = 5 Then StrSQL = StrSQL & .Cells(idx1, idx2) & "," Else StrSQL = StrSQL & "'" & .Cells(idx1, idx2) & "'," End If Next Mid(StrSQL, Len(StrSQL), 1) = ")" ODataBase.ExecuteSQL (StrSQL) ※エラーが出る部分 Next End With End Sub Insert文が間違っているのかそれとも他のことが原因なのか わからず困ってます。 どなたか詳しく教えてもらえませんか。 お願いします。

  • vbaで、postgresqlアクセス問題

    vbaで、postgresqlアクセス問題:      データベースに、データは ***0000, でも、vbaで、取得したのは ****.四つの0が自動に、削除されました。      例: postgresqlに、 40000 ⇒ vbaで、取得した: 4   vbaソース:  Option Explicit Sub subPgGetData() Dim adoCn As New ADODB.Connection On Error GoTo ErrLogin: With adoCn .Provider = "PostgreSQL OLE DB Provider" .Properties("Data Source") = Range("B1").Value .Properties("Location") = Range("B2").Value .Properties("User ID") = Range("B3").Value .Properties("Password") = Range("B4").Value .Open End With On Error GoTo 0 Dim adoRs As New ADODB.Recordset On Error GoTo ErrSql: adoRs.Open Range("B6").Value, adoCn, adOpenForwardOnly, adLockReadOnly On Error GoTo 0 Workbooks.Add Cells.CopyFromRecordset adoRs Cells.Columns.AutoFit adoRs.Close: Set adoRs = Nothing adoCn.Close: Set adoCn = Nothing Exit Sub ErrLogin: MsgBox "" & vbCrLf & Err.Number & vbCrLf & Err.Description Set adoCn = Nothing Exit Sub ErrSql: MsgBox "" & vbCrLf & Err.Number & vbCrLf & Err.Description Set adoRs = Nothing adoCn.Close: Set adoCn = Nothing Exit Sub End Sub わかる方はご指示ください。 よろしくお願いします。

  • 帳票フォームでカーソル移動

    帳票フォームでカーソル移動 お世話になります、帳票フォームでフォームヘッダーに非連結txtBoxを2つ置き(txt適用開始日、txt消費税率) 詳細にクエリのフィールドを表示させています。 下記コードでフォームのダブルクリック時にヘッダーのtxtBoxにレコードを表示させています、 その後カーソルをヘッダーの”txt消費税率”に移動させたく DoCmd.GoToControl "txt消費税率" Forms!フォーム名.txt消費税率.SetFocus Me!txt消費税率.SetFocus 色々試しては見たのですがカーソル移動してくれません! アドバイス宜しくお願いいたします。 Dim adoCN As ADODB.Connection   Dim adoRS As ADODB.Recordset Dim strSQL As String Set adoCN = Application.CurrentProject.Connection strSQL = " SELECT *" _ & " FROM ta02消費税" _ & " WHERE 摘要開始日= #" & Me!txt摘要開始日2 & "#" Set adoRS = adoCN.Execute(strSQL) If adoRS.EOF = False Then Me!txt摘要開始日.Value = adoRS("摘要開始日").Value Me!txt消費税率.Value = adoRS("消費税率").Value * 100 Else MsgBox "該当データがありません", vbOKOnly + vbExclamation, "消費税" Cancel = True Exit Sub adoRS.Close adoCN.Close Set adoRS = Nothing Set adoCN = Nothing End If DoCmd.GoToControl "txt消費税率" ←’タイミングも色々ずらして試したのですが・・・ Me!cmd登録.Visible = False Me!cmd削除.Visible = True End Sub

  • エクセルでのアクセスからのデータ抽出

    Web情報を参考にエクセルにて下記VBAコードを作りました。 Sub DB_Read() Dim adoCON As New ADODB.Connection Dim adoRS As New ADODB.Recordset Dim strSQL As String Dim odbdDB As Variant Dim wSheetName As Variant Dim i, j As Integer Dim GetName odbdDB = ActiveWorkbook.Path & "\test.accdb" adoCON.ConnectionString = "provider=Microsoft.ACE.OLEDB.12.0;" _ & "Data Source=" & odbdDB & "" adoCON.Open j = 4 Do Until j = 18 GetName = Range("B4").Value & "_" & Cells(16, j).Value strSQL = "SELECT 規格値,Max,Min,結果1,結果2,結果3 FROM T_測定結果 WHERE [測定項目]='" & GetName & "'" adoRS.Open strSQL, adoCON, adOpenDynamic wSheetName = ActiveSheet.Name i = 20 adoRS.MoveLast Do Until adoRS.EOF Or i = 25 With Worksheets(wSheetName) .Cells(17, j).Value = adoRS!規格値 .Cells(18, j).Value = adoRS!Max .Cells(19, j).Value = adoRS!Min .Cells(i, j).Value = adoRS!結果1 .Cells(i + 10, j).Value = adoRS!結果2 .Cells(i + 20, j).Value = adoRS!結果3 End With i = i + 1 adoRS.MovePrevious Loop j = j + 1 Loop adoRS.Close Set adoRS = Nothing adoCON.Close Set adoCON = Nothing End Sub VBAを走らせると1巡は走るのですが、「Do Until j = 18」の2巡目に入ると、「wSheetName = ActiveSheet.Name」のところで「実行時エラー3705 アプリケーション定義またはオブジェクトの定義エラー」と出てしまいます。 エラーの原因が分からないので、アドバイスを頂きたいです。