マクロの修正に関する問題点と解決方法のご指導をお願いします

このQ&Aのポイント
  • 質問者は同好会のパソコンを新しく購入し、旧パソコンから新パソコンへの移行後に問題が発生している。具体的には、DB接続のエラーが発生し、更新ができなくなっている。
  • エラーメッセージは「実行時エラー 3706 プロバイダーが見つかりません。正しくインストールされていない可能性があります。」と表示されている。
  • ExcelやWordの他のファイルは問題なく使用できるが、会員名札.xlsのマクロのコピーが問題となっている。
回答を見る
  • ベストアンサー

マクロの修正

今月同好会のパソコンを買いかえましたら下記問題点が発生し解決出来ません。 解決方法をご指導いただきたくお願い申し上げます。   旧PC  WindowsXP  Excel 2002  Access 2002   新PC  Windows 7  Excel 2010  Access 2010 問題点  1・旧PCから新PCに移行しましたら、下記メッセージが表示され      'DB接続の ADCN.Open strDbConst でストップしてしまい更新出来ません。     メッセージ 実行時エラー 3706 プロバイダーが見つかりません。正しくインストールされていない可能性があります。  *尚その他のエクセル・ワードのファイルは、そのまま使用出来ます。 会員名札.xls に記述してあるマクロのコピー   ’アクセスの会員管理.mdbからエクスポート Public ADCN 'コネクト変数 Public ADRS 'レコードセット変数 Public ADCM 'コマンド変数   ’DB接続      Sub SpConnect() Dim wMdb As String Dim wPass As String Dim UserName As String UserName = Environ("USERNAME") wMdb = "C:\Documents and Settings\" & UserName & "\My Documents\GGG          \筆王\会員管理.mdb" '← Accessのデータべース   wPass = "" '← データベースのパスワード      strDbConst = "Provider=MicroSoft.Jet.OLEDB.4.0;Data Source=" & wMdb & ";Jet  OLEDB:Database Password=" & wPass      Set ADCN = CreateObject("ADODB.Connection")      Set ADCM = CreateObject("ADODB.Command")      Set ADRS = CreateObject("ADODB.Recordset")      ADCN.Open strDbConst      ADCM.CommandType = 4      ADCN.CommandTimeout = 0      Set ADCM.ActiveConnection = ADCN     End Sub   'DB切断 Sub SpDisconnect() ADCN.Close Set ADRS = Nothing Set ADCM = Nothing Set ADCN = Nothing End Sub

  • oguno
  • お礼率61% (179/289)

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

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.3

私自身はADOは使っていないのですが・・・(汗) 原因は、JET4.0を指定していることではないでしょうか。 【参考】 http://www.microsoft.com/downloads/ja-jp/details.aspx?FamilyID=C06B8369-60DD-4B64-A44B-84B371EDE16D (ページ下方『注意事項』の「2. OLEDBを使用する~」の部分) とりあえず、パスワードの指定方法がわからないので(汗) 当該MDBファイルのパスワードを一旦解除した上で、 プロバイダの指定を「MicroSoft.Jet.OLEDB.4.0」から 「Microsoft.ACE.OLEDB.12.0」に変更して、確認して みてください。 なお、もしかしたらですが、Passwordの方は今までと同じ (但しJETの後ろのスペースが2つだったので1つ削除)、 「JET OLEDB:Database Password」のままでいいのかも しれません(汗) http://social.msdn.microsoft.com/Forums/ja-JP/csharpexpressja/thread/bcf40c9e-97c2-486e-867d-98877d0054e1/

oguno
質問者

お礼

DexMachina様 ご教示いただきましたアドレスから、OLEDBドライバーをインストールし、 ご教示通りプロバイダ名を変更しましたら更新が出来ました。 >(ページ下方『注意事項』の「2. OLEDBを使用する~」の部分)    この注記をいただきましたことは本当に助かりました。 自宅のパソコンはXPの2002ですので、テスト出来ず、昨日会場へ行き 修正しましたので、ご報告が遅くなり申し訳ございません。。 70歳過ぎのパソコン初心者のやる事ではないですネ、当方こそ汗・汗・・・・汗・汗・・・です。 修正出来、会員(平均年齢74歳の男女)の方々も喜んでいます。 本当にありがとうございました。 感謝申し上げます。

その他の回答 (2)

  • ganbaro
  • ベストアンサー率45% (43/94)
回答No.2

ODBCドライバーはインストールされていますか アクセスのデータの処理には必要ですが、 データファイルをXPからコピーされても、このような現象が出るように考えられます。

oguno
質問者

お礼

ganbaro様 ODBCドライバーをインストールし、プロバイダ名を変更しましたら更新が出来ました。 ありがとうございました。

  • 0909union
  • ベストアンサー率39% (325/818)
回答No.1

>プロバイダーが見つかりません。正しくインストールされていない可能性 これは、そのままの意味ですよ。見つからないのです。かりにも、その辺のスクリプトをいじっているならわかるはずなんですが・・・。釣りなんですかね。 コネクションの行を見れば、何にアクセスしているかわかりますよね。その名前の物が、その実行した環境からみれません。環境とは、OSであり、実行したユーザーであり、その実行したアプリです。 ちなみに、システムが持つ物(だれでも参照が可能だがアクセス制限をつけることが可能)、そのユーザーが持つ物が存在します。 プロパイダーとは? みなさんが持つイメージと同じです。つまり接続業者ですね。この場合、接続するためのインターフェースです。OLEDBでのアクセスなので、ドライバー> サービス > サービス名(ユーザー設定の名前) = サービスプロパイダー ですね。これが、システムあるのか、ユーザーの持ち物にあるのか、OLEDB(ODBC)の管理ツールで見てください。 これらはエクセルとか、アクセスのファイルの中にはありません。OS設置(XP以後のOS)の時にデフォルトで設置されますが、その時デフォルトのプロパイダーしかありません。と言うことは、設置作業が必要です。

oguno
質問者

お礼

0909union様 70を才を過ぎたパソコン初心者です。 ご指導いただいた内容が理解できませんでした。 >釣りなんですかね。 この意味は全く解りません。

関連するQ&A

  • NEWキーワードとCreateObjectは同じ?

    NEWキーワードとCreateObjectは同じことをするのでしょうか? Sub ADO_Sample1() Dim cn As New ADODB.Connection Set cn = CreateObject("ADODB.Connection") cn.Open "Provider = Microsoft.ACE.OLEDB.12.0;Data Source=" & _ "D:\Mail.mdb;Jet OLEDB:Database;" Debug.Print "ファイルに接続できました。" cn.Close: Set cn = Nothing End Sub このようなコードの時、 Set cn = CreateObject("ADODB.Connection") は、あってもなくても問題ないようです。 NEWとCreateObjectがある場合は、 2度データベースに接続してしまうのでしょうか? NEWとCreateObjectがあってもエラーにならない理由を教えてください。

  • ADO1とADO2は意味は同じですか?

    Private Sub ADO1() Dim cn As New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & CurrentProject.FullName cn.Close: Set cn = Nothing End Sub Private Sub ADO2() Dim cn As ADODB.Connection Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & CurrentProject.FullName cn.Close: Set cn = Nothing End Sub は、 Dim cn As ADODB.Connection Set cn = New ADODB.Connection を簡素化したものが Dim cn As New ADODB.Connection になるのでしょうか?

  • 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でAccessファイルに接続して、ファイルの

    ADOでAccessファイルに接続して、ファイルの更新日時を取得するには? access2003です、 Private Sub 更新日時を取得() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim MyFileName As String MyFileName = "D:\My Documents\システム.mdb" cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & MyFileName 'ここで更新日時を取得 rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub この状態で、更新日時を取得するにはどうすればいいでしょう? ご教授よろしくお願いします。

  • EXCEL→Access ADO接続

    お世話になります 現在ADOにてEXCEL側からAccessDBにアクセスし 値を取得しているのですが 現在下方向に貼り付けしているのですが 横方向に貼り付けさせる方法はありますか? 下記参考(現状VBAです) 現状:日付で絞込みをしています 日付け絞込みをしてヒットしたものに対して下方向に貼り付けています それを横方向に貼り付けさせたいのです Private Sub CommandButton1_Click() Dim myConn As ADODB.Connection Dim myRs As ADODB.Recordset Dim mySQL As String Dim myConstr As String Dim myDBFName As String Dim myPswd As String Dim tableName As String Dim orderDate As String Dim shipDate As String orderDate = Format(DateValue(DTPicker1.Value), "mm/dd/yyyy") shipDate = Format(DateValue(DTPicker2.Value), "mm/dd/yyyy") myDBFName = "Accessパス" myPswd = "" myConstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _ & myDBFName & ";Jet OLEDB:Database Password=" & myPswd & ";" mySQL =SQL文 Set myConn = New ADODB.Connection myConn.Open myConstr Set myRs = New ADODB.Recordset myRs.Open mySQL, myConn Worksheets("シート名").Range("開始セル名").CopyFromRecordset myRs myRs.Close Set myRs = Nothing myConn.Close Set myConn = Nothing Unload Me End Sub わかる方ご教授願います

  • 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へ移行させるにはどうすればいいのでしょうか? よろしくお願いします。

  • DBから取得したオブジェクトの受け渡し方法

    はじめましてVB初心者でわけが分からなくなっています。DBをクローズした後に取得したレコードセットを他の関数に渡すにはどうしたらよいでしょうか?おそらく、そんなのcloseせずにやればいいと思うかもしれませんが、可能かどうかがわかりません。どうか教えてくださいよろしくお願い致します。 下記のコードにて行ってます。Set rs = cn.Execute(strSQL)で取得しています。rsをDBを閉じた後も他の関数に渡せるようにしたい訳です。m(..)m Dim cn As Object Dim rs As Object Private Sub getData() Dim strSQL As String Set cn = CreateObject("ADODB.Connection") cn.Open "省略" strSQL = "SELECT * FROM swan" Set rs = cn.Execute(strSQL) Set rs = nothing Set cn.close Set cn = nothing End Sub

  • VBからAccessへの接続でエラー

    OS:Win2K SP4 SOFT:VB6 ACCESS2K Dim strDatabase As String Dim cn As Object Dim rs As Object Sub xx() Set cn = CreateObject("ADODB.Connection") Set rs = CreateObject("ADODB.Recordset") strDatabase = "C:\出荷配送システム\mftbc.mdb" cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & strDatabase ・       ・       ・ End Sub 上記ソースの「cn.OPEN」メソッドでエラーが発生します。 エラー内容は 'OPEN'メソッドは失敗しました。'_Connection'オブジェクト データベースに接続できません。 です。 何が原因なんでしょうか?? mdbのあるPath,File名は合っています。

  • レコードの削除

    VB6.0 ACCESSで開発しています。 t_nyukoテーブルのデータを全て削除するのは下記のように 出来たのですが dataGridに表示されているものを1つ選択し 選択されたものだけ削除したいのですがどうすればいいのでしょうか? よろしくお願いします。 Private Sub Command1_Click() Dim cn As New ADODB.Connection Dim cmd As ADODB.Command Dim cat As New ADODB.Command Dim strSQL As String   Set cn = New ADODB.Connection cn.ConnectionString = _ "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\temp\db2.mdb" cn.Open cat.ActiveConnection = cn strSQL = "DELETE FROM t_nyuko " Set cmd = New ADODB.Command cmd.ActiveConnection = cn cmd.CommandText = strSQL cmd.Execute cn.Close Set cmd = Nothing Set cn = Nothing Set cat = Nothing End Sub

  • ExcelVBA Accessにデータ書き込み

    VBAでコマンドボタンを押した際に特定のセルの値をAccessDBに入力するプログラムを作りたいのですが、上手くいきません...。 実行した際に「実行時エラー '21472179000 (80040e 14)': オートメーションエラーです。」と表示されます。 また、ステップインで実行してみるとEnd Withのところでエラーが発生します。 恐らくインサート文が間違っていると思うのですが、試行錯誤しても解決できませんでしたので教えて頂きたいです。 以下プログラムです。 Private Sub CommandButton1_Click() Dim cn As ADODB.Connection Dim cmd As ADODB.Command Dim rs As ADODB.Recordset Dim constr As String Dim strSQL1 As String Dim a As String a = Range("A1").Value Dim b As String b = Range("A2").Value Dim c As String c = Range("A3").Value constr = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=~.accdb strSQL1 = "insert into " & _ "TableName (1,2,3) " & _ "values ('" + Range("A1").Value + "','" + Range("A2").Value + "','" + Range("A3").Value + "')" Set cn = New ADODB.Connection cn.ConnectionString = constr cn.Open Set cmd = New ADODB.Command With cmd .ActiveConnection = cn .CommandText = strSQL1 .Execute End With Set cmd = Nothing Set rs = Nothing cn.Close Set cn = Nothing End Sub 以上、宜しくお願い致します。