Excel実行時エラー[80004005]について

このQ&Aのポイント
  • ExcelのVBAにてSQLのSELECT文を実行し、取得したデータを一覧表示する仕組みを作っています。同じプログラムを使用者する者7名の内、1名のみ「実行時エラー[80004005]」が発生しています。
  • エラーメッセージ「[Microsoft][ODBC Driver Manager] データ ソース名および指定された既定のドライバーが見つかりません。」が表示されます。
  • 実行時エラー[80004005]の原因としては、データソース名やドライバーの指定が誤っている可能性があります。適切なデータソース名とドライバーを指定するか、接続文字列を修正することで解決できる場合があります。
回答を見る
  • ベストアンサー

Excel実行時エラー[80004005]について

ExcelのVBAにてSQLのSELECT文を実行し、取得したデータを一覧表示する仕組みを作っています。 同じプログラムを使用者する者7名の内、1名のみ以下のエラーが発生しています。 どのように対応すればよいか、ご教示ください。 環境 Excel2010 状況 SELECTの実行時 「実行時エラー[80004005] [Microsoft][ODBC Driver Manager] データ ソース名および指定された既定のドライバーが見つかりません。」 実行ソース Private Sub exeSelect(sheetNm as string ,sqlSt as String) Dim i As Integer Dim j As Integer Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim bookNm As String bookNm = ThisWorkbook.FullName Set cn = New ADODB.Connection cn.Provider = "MSDASQL" cn.ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & "DBQ=" & bookNm & "; ReadOnly=False;" cn.Open←ここでエラー Set rs = New ADODB.Recordset rs.Open sqlSt, cn, adOpenStatic j = START_ROW Do Until rs.EOF For i = 0 To rs.Fields.Count - 1 Worksheets(sheetNm).Cells(j, i + 1).Value = rs(i).Value Next j = j + 1 rs.MoveNext Loop rs.Close cn.Close End Sub

  • krkm
  • お礼率100% (2/2)

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

  • ベストアンサー
  • Anzu4699
  • ベストアンサー率59% (26/44)
回答No.1

>[Microsoft][ODBC Driver Manager] データ ソース名および指定された既定のドライバーが見つかりません。」 上記より、ODBC系のエラーというのはわかります >同じプログラムを使用者する者7名の内、1名のみ以下のエラーが発生しています。 という事を考えれば、その人のPCの問題と考えられます(ほぼ確定) ので、問題となっているPCにて、ODBC設定を見る必要があります コントロールパネル - 管理ツール - データソース(ODBC)を開き 正常PCと見比べてください 違いがない場合、一度削除して作り直すことで直る事も有 ※削除より今使っているODBCのデータソース名を変えておいて、作り直す 上記でだめなら Microsoft Excel Driverが壊れているものと思われますので Excel自体を導入し直せば大抵は直ります。

krkm
質問者

お礼

早速のご回答有難うございます。 ODBC設定に不備は見当たらなく、作り直してみましたが、状況変わりませんでした。 Excelを導入し直してみます。

関連するQ&A

  • 【Access2003】VBAで削除のSQL実行ができない

    初歩的な質問かもしれませんが・・・ ACCESS2003VBAでADOを用いて削除を実行しようとしているのですがエラー(エラーは「オーバーフローしました」です。)が出て実行できません。 ソースは以下の通りです。 Dim strSQL As String Dim rs As New ADODB.Recordset Set cn = CurrentProject.Connection strSQL = " DELETE FROM D_TB" rs.Open strSQL, cn, , adOpenStatic, adLockOptimistic       '←ここでエラー Do Until rs.EOF rs.Delete rs.MoveNext Loop rs.Close cn.Close どこがおかしいのでしょうか? 大変困っています。教えてください。よろしくお願いいたします。

  • アクセス VBAのエラー

    以下のコードをwindowsXPで問題なく使っていましたが、windows7で使ったところ 「保存できません」というエラーメッセージが出ます。ただ全く同じコードを(だと思うのですが)リストボックスのダブルクリックで実行すると作動します。参考に二つのコードを書いておきます。 何か原因に心当たりのある方よろしくお願いします。 (コマンドボタン) Private Sub コマンド選択_Click() Dim namecode As String namecode = リスト会員 Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Set cn = CurrentProject.Connection rs.Open "MT_会員", cn, adOpenKeyset, adLockOptimistic rs.Find "会員IDkai = " & namecode rs!Selectedkai = True '-1 rs.Save Me!リスト会員.Requery リスト印刷会員.Requery rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub (ダブルクリック) Private Sub リスト会員_DblClick(Cancel As Integer) Dim namecode As String namecode = リスト会員 Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Set cn = CurrentProject.Connection rs.Open "MT_会員", cn, adOpenKeyset, adLockOptimistic rs.Find "会員IDkai = " & namecode rs!Selectedkai = True '-1 rs.Save Me!リスト会員.Requery リスト印刷会員.Requery rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub

  • 実行時エラー'9':インデックスが有効範囲にありま

    WindowsXPで、Access2002を使用しています。 テーブル1のフィールド1の値を、ハイフン区切りで分割して、フィールド2とフィールド3へ格納するVBAを作成しようとしていますが、あと少しのところでエラーになってしまって解決策が見当たりません。 エラー内容は、「実行時エラー'9':インデックスが有効範囲にありません。」で、下記VBAの rs.Update "フィールド3", ksplit(1) の部分のksplit(1)の格納場所が無かった為に発生していると思います。 実際、その部分を無効にすると、エラーは無くなりますが、フィールド3のデータも必要です。 このようになって欲しいです。 例) テーブル1 フィールド1 フィールド2 フィールド3 1000-100       1000       100 50-301         50       301 Private Sub コマンド0_Click() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = CurrentProject.Connection Set rs = New ADODB.Recordset rs.Open "テーブル1", cn, adOpenKeyset, adLockOptimistic Do Until rs.EOF Dim ksplit As Variant ksplit = Split(rs!フィールド1, "-") rs.Update "フィールド2", ksplit(0) rs.Update "フィールド3", ksplit(1) Debug.Print rs!フィールド2,rs!フィールド3 rs.MoveNext Loop rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub 以上、初心者で、行き詰っておりますので、よろしくお願いします。

  • Access ADOについて質問です。

    Access ADOについて質問です。 以下コードでレコードセットを返す関数を使用しています。 動作的には問題ないのですが、標準モジュール内のレコードセットをClose及びNothingしていないのが気になります。 Private Sub Form_Open(Cancel As Integer) Dim rs2 As ADODB.Recordset Set rs2 = New ADODB.Recordset Set rs2 = CreateRecordSet("SELECT * FROM T_Standard;") Set Me.Recordset = rs2 rs2.Close: Set rs2 = Nothing end sub '標準モジュール Public Function CreateRecordSet(strSQL As String) As ADODB.Recordset Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection cn.ConnectionString = "provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=O:\標準DB\StandardBackEnd.mdb" cn.Open Set rs = New ADODB.Recordset rs.Open strSQL, cn, adOpenStatic, adLockReadOnly Set CreateRecordSet = rs ' rs.Close: Set rs = Nothing   ←この部分 ' cn.Close: Set cn = Nothing   ←この部分 End Function 標準モジュール内ではCloseやNothingしなくてもメモリの開放は行われているのでしょうか? アドバイスよろしくお願いいたします。

  • ADOでエクセルからSQL Serverへデータを移行するには

    エクセルvbaのADOを使って、 SQL Serverの「test」という名のデータベースの「Table_1」に 新規レコードを追加する事はできますか? エクセルからアクセスには Sub test() Dim データベース名 As String Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection Set rs = New ADODB.Recordset cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & データベース名 rs.Open "Tテーブル1", cn, adOpenKeyset, adLockOptimistic rs.AddNew rs.Fields("フィールド1") = データ rs.Update rs.Close cn.Close Set rs = Nothing Set cn = Nothing End Sub で移行しています。 これをエクセルからSQL Serverへ移行させるにはどうすればいいのでしょうか? よろしくお願いします。

  • ADO+ODBCでテーブルに接続する時のエラー

    VB6.0(SP6)から、ADOとODBCでMySQLに接続しました。 '-------------------------------------------- Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim strCn As String Set cn = New ADODB.Connection strCn = "dsn=MySQL;uid=user;pwd=" cn.CursorLocation = adUseClient cn.Open strCn Set rs = New ADODB.Recordset rs.Open "select * from tbl;", cn, adOpenDynamic, adLockPessimistic Set DataGrid1.DataSource = rs '-------------------------------------------- データグリッドコントロールにテーブルの内容を表示させようとしているのですが、rs.Openの行でエラーが出てしまいます。エラーメッセージは「複数ステップの操作でエラーが発生しました。各状態の値を確認してください」です。 SQL文を変えて試してみると、何故かデータ型がDECIMALのカラムが含まれているとエラーになります。 DECIMALだといけないかと思うと、挿入は問題なく出来ます。 cn.Execute "insert into tbl (id,decimal_clm) values (10,900);" ご存知の方がいらっしゃいましたら宜しくお願いします。

    • ベストアンサー
    • MySQL
  • rs.MoveFirst

    アクセスvbaです。 Sub Sample() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim i As Long Set cn = CurrentProject.Connection rs.Open "Tテーブル", cn, adOpenKeyset, adLockOptimistic rs.MoveFirst '←これいらない? For i = 1 To rs.RecordCount rs.MoveNext Next rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub このようなコードの場合 rs.MoveFirst はあってもなくても変わらないですか?

  • ADO 「Set」は使ったほうがいいのでしょうか?

    Sub test1() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection Set rs = New ADODB.Recordse End Sub Sub test2() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset End Sub この二つは同じ意味ですか? 「Set」は使ったほうがいいのでしょうか? よろしくお願いします。

  • Driver={Microsoft Access

    アクセス2007です。 Sub test() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim MyFile As String MyFile = "C:\test.accdb" cn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=D:\" & MyFile & ";" rs.Open "SELECT * FROM テーブル1", cn MsgBox "テーブルに接続出来ました。" rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub ********************************************************* を実行しても実行時エラーになります。 cn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=D:\" & MyFile & ";" を cn.Open "Provider = Microsoft.ACE.OLEDB.12.0;" & "Data Source= " & MyFile に変えればうまくいきますが なぜ、"Driver={Microsoft Access Driver (*.mdb)}; DBQ=D:\"じゃダメなのでしょうか? 教えてくださいませ。

  • レコードは2行あるのに「-1」が返ってくる

    accessです。 テーブル1にレコードは2行あるのに、下記のコードを実行すると「-1」が返ってきます。 なぜでしょうか? ------------------------------------------------------------ Sub test() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = Application.CurrentProject.Connection Set rs = cn.Execute("SELECT * FROM テーブル1") MsgBox rs.RecordCount rs.Close cn.Close Set rs = Nothing Set cn = Nothing End Sub ------------------------------------------------------------ ご教示よろしくお願い致します。