人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

以下のVBAを作成しておりますが、cn.Openのところで、
実行時エラー'-2147467259(80004005)'

エラーを特定できません。

・・・というエラーがでてしまいます。
ご教示願えませんでしょうか。

Private Sub worksheet_change(ByVal target As Range)

Dim cn As Connection
Dim rs As Recordset
Dim sql As String

Set cn = New Connection

cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" _
& "Data Source=C:\Users\Database2.accdb"

cn.Open

sql = "select 氏名 from 社員台帳 where 社員_番号 =" & Range("B3").Value

Set rs = New Recordset
rs.Open sql, cn

Range("D3").CopyFromRecordset rs

cn.Close: Set cn = Nothing
rs.Close: Set rs = Nothing

End Sub

●質問者: kazukifujiwara
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● きゃづみぃ

SQLが 間違っている恐れがあります。

アクセス上でSQLを実行して エラーになりませんか?

あと
sql = "select 氏名 from 社員台帳 where 社員_番号 =" & Range("B3").Value

で Range("B3").Valueじゃなく 直接 値をセットしたりしたらどうでしょうか?

sql = "select 氏名 from 社員台帳 where 社員_番号 = 1"

みたいに。

ちなみに 社員_番号って 数値型ですよね?


きゃづみぃさんのコメント
cn.Openって 不要ですか? コメントにして 実行してみてください。

2 ● うぃんど

80004005は接続できませんでしたというエラー。
SQLが間違っている場合に出るエラーじゃないので恐れとかはまったく関係ない話。

ExcelVBAでAccdb利用したいならばまずは参照設定の確認。
必要なのは「Microsoft ActiveX Data Objects ほげほげ Library」
ほげほげはインストールされているOfficeのバージョンによって変わる。

accdbの接続にパスワードが必要なら追加も必要。
cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" _
& "Data Source=C:\Users\Database2.accdb;Jet OLEDB:Database Password=パスワード"

実用ではなく実験段階だと思いますがworksheet_changeイベントが起こる度にデータベースと接続しているような重い処理はやめたほうが良いです。
worksheet_changeで「更新ボタン」を表示するなどして「更新ボタン」がクリックされた時にだけデータベースを参照して関係しているセルに情報を書き出すとかしたほうが処理が軽くなりますし、データベースからデータを取ってくるだけのマクロを別につくるわけですからテストもやりやすく(worksheet_changeイベントを発生させる必要が無く直接マクロを起動すればテストできる)なります。
丁寧にしたいならworksheet_changeで未更新のセルの色を変えてやるくらいはしても良いでしょう。


きゃづみぃさんのコメント
ん、そだね。SQLを実行する前のエラーだから SQLは 関係なかった・・・。

うぃんどさんのコメント
VBAやOLEDBは非同期で実行されるのでクローズなどが正常終了する前に次の実行がなされているのかもしれません。 ひとまずworksheet_changeイベントでの接続はやめて、単独で動くようにしてみるなどで確認してみると良いでしょう。

質問者から

excelに値がかえっていました。sqlには問題はありませんでした。

エラーだけはきえずに残っています。


関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ