SQLが 間違っている恐れがあります。
アクセス上でSQLを実行して エラーになりませんか?
あと
sql = "select 氏名 from 社員台帳 where 社員_番号 =" & Range("B3").Value
で Range("B3").Valueじゃなく 直接 値をセットしたりしたらどうでしょうか?
sql = "select 氏名 from 社員台帳 where 社員_番号 = 1"
みたいに。
ちなみに 社員_番号って 数値型ですよね?
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で未更新のセルの色を変えてやるくらいはしても良いでしょう。
excelに値がかえっていました。sqlには問題はありませんでした。
エラーだけはきえずに残っています。