以下の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

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2013/01/28 17:27:21
  • 終了:2013/02/04 17:30:04

回答(2件)

id:taknt No.1

きゃづみぃ回答回数13478ベストアンサー獲得回数11972013/01/28 17:32:54

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

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

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

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

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

みたいに。

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

id:taknt

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

2013/01/29 09:08:37
id:windofjuly No.2

うぃんど回答回数2625ベストアンサー獲得回数11492013/01/28 18:19:30

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で未更新のセルの色を変えてやるくらいはしても良いでしょう。

id:taknt

ん、そだね。SQLを実行する前のエラーだから SQLは 関係なかった・・・。

2013/01/28 18:47:50
id:windofjuly

VBAやOLEDBは非同期で実行されるのでクローズなどが正常終了する前に次の実行がなされているのかもしれません。

ひとまずworksheet_changeイベントでの接続はやめて、単独で動くようにしてみるなどで確認してみると良いでしょう。

2013/01/29 09:23:17
id:kazukifujiwara

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

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

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません