電子書籍の厳選無料作品が豊富!

目的:Excelのワークシートから、Accessのテーブルにレコードを追加。
OS:windows10Home64 Office365
DB D:\Desktop\PG_sample\zaiko\Sample.accdb
テーブル名:在庫
フィールド:ID、日付 商品ID、担当、数量
条件:Access,ExcelでADOの参照設定を行わない。


Private Sub cmd_Add_Click()
Dim strAdoObjPath As String 'ADOコネクションパス
Dim adoConct As Object 'ADOコネクションオブジェクト
Dim adoRs As Object 'ADOレコードセットオブジェクト

strAdoObjPath = "D:\Desktop\PG_sample\zaiko\Sample.accdb"
Set adoConct = CreateObject("ADODB.Connection") 'ADOコネクションオブジェクトを作成
adoConct.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strAdoObjPath & ";" 'Accessファイルに接続

Set adoRs = CreateObject("ADODB.Recordset") 'ADOレコードセットオブジェクトを作成

With adoRs
.Open "在庫", adoConct, adOpenKeyset, adLockOptimistic, adCmdTableDirect  '←ここでエラー
'処理
.Close

End With

adoConct.Close

Set adoRs = Nothing
Set adoConct = Nothing
End Sub

実行時エラー3001
引数が間違った型、許容範囲外、または競合しています。

いろいろなサイトを参考にさせていただきましたが、原因がわからなく困っています。
お手数ですが、ご教授の程よろしくお願いいたします。

A 回答 (1件)

Option Explicit



が記述されていれば、すぐ分ることなんですけどね。

> .Open "在庫", adoConct, adOpenKeyset, adLockOptimistic, adCmdTableDirect  '←ここでエラー

adOpenKeyset, adLockOptimistic, adCmdTableDirect は ADO のメンバーなので
ADOの参照設定なしでは 未定義になります。

1, 3, 512 を 直に設定するか
Const で定義しておいて使用するか、
ですね。
    • good
    • 0
この回答へのお礼

早速のご回答感謝いたします。
また、返信が遅くなりすみません。

>ADOの参照設定なしでは 未定義

そういう理由だったんですね。

ひとまず決め打ちで解決できました。

Option Explicit や Const も応用してみたいと思います。

ありがとうございました。

お礼日時:2019/01/21 19:37

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

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


おすすめ情報