Excel VBAでAccess接続する方法
- Excel VBAでAccessに接続する方法について教えてください。
- Excel VBAのADODB.Connectionを使ってAccessに接続する方法を教えてください。
- Excel VBAで別のプロシージャからもAccessに接続するためには、どのように設定すれば良いですか。
- ベストアンサー
Excel VBA について教えて下さい
Excel VBA でAccess接続します 今までは Sub aaa() Set cn = CreateObject("ADODB.Connection") cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=aaa.mdb;" End Sub のように使っていましたが(単一プロシージャ) Set cn = CreateObject("ADODB.Connection") の部分をパブリックにして Sub bbb() cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=aaa.mdb;" End Sub 別のプロシージャからも、使えるためには パブリックにするための方法を教えて下さい
- neko-007
- お礼率51% (28/54)
- Excel(エクセル)
- 回答数3
- ありがとう数8
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
回答1の補足です。 その場合は メニューの挿入→標準モジュール で標準モジュールに以下を書きます。 Option Explicit Public cn As Object すると他のシートや追加モジュールからも使えます。 シートモジュールに上記を書いても他のモジュールでは使えないですね。
その他の回答 (2)
- hallo-2007
- ベストアンサー率41% (888/2115)
単に、何度も Set cn = CreateObject("ADODB.Connection") を記述する必要を簡略化したいということですよね 同じモジュールでまとめてあるとします。 Option Explicit Dim cn As New ADODB.Connection Const CONNECT1 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" Const CONNECT2 = "aaa.mdb;" Const CONNECT3 = "bbb.mdb;" Sub aaa() cn.Open CONNECT1 & CONNECT2 ・・・・ End Sub Sub bbb() cn.Open CONNECT1 & CONNECT3 ・・・・ End Sub 動作までは確認していません。 Option Explicitで検索してみてください。
お礼
ありがとうございます
- sora1515
- ベストアンサー率58% (54/92)
これでいかがでしょう。 Option Explicit Dim cn As Object Sub aaa() Set cn = CreateObject("ADODB.Connection") End Sub Sub bbb() cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=aaa.mdb;" End Sub
補足
ありがとうございます 同一モジュール内の関数aaa(),bbb() で可能でした さらに教えてもらえるのなら 関数aaa(),bbb()が別モジュールにある場合でも cn を共通に使える方法をお教えください
関連する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 になるのでしょうか?
- ベストアンサー
- オフィス系ソフト
- 【VB】データグリッドコントロールにデータベースを表示させたい
お世話になります。 フォーム上にMicrosoft DataGrid Control 6.0(OLEDB)を置いて、 データベースと接続し、データベースを表示させたいのですが、 データベースエンジンがMicrosoft.Jet.OLEDB3.51だとうまく表示してくれますが 4.0だとなぜか表示してくれません。 原因、対策などわかるでしょうか? ソースは以下のように単純なものです。 Private cn As ADODB.Connection Private rs As ADODB.Recordset Private Sub Form_Load() Set cn = New ADODB.Connection cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\パスワード管理.mdb" cn.Open Set rs = New ADODB.Recordset rs.Open "パスワード", cn, adOpenStatic, adLockReadOnly Set DataGrid1.DataSource = rs End Sub
- ベストアンサー
- Visual Basic
- 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名は合っています。
- ベストアンサー
- Visual Basic
- データグリッドコントロールに表示されません!
OS:XP、VB6、ACCESS2000の環境でADOの勉強をしています。 ある参考書を見て、次のサンプルを実行しました。 【サンプル】 フォームにデータグリッドコントロールを貼り付ける。 フォームのLoadイベントプロシージャ内でデータベース(MDB)に接続し、レコードセットを取得して、データグリッドコントロールに取得したレコードセットを表示させる。 データベースはACCESS97で作成されたものです。 (ソース) --------------------------------------------------------------- Option Explicit Private cn As ADODB.Connection Private rs As ADODB.Recordset Private Sub Form_Load() 'データーベースに接続 Set cn = New ADODB.Connection cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.3.51;Data Source=G:\VB_TEST\Book.mdb" cn.Open 'レコードセットを取得 Set rs = New ADODB.Recordset rs.Open "本", cn, adOpenStatic 'データグリッドコントロールに取得したレコードセットを表示 Set DataGrid1.DataSource = rs End Sub --------------------------------------------------------------- 上記のプログラムを実行するともちろんうまく表示されました。 が、接続プロバイダ名を "Provider=Microsoft.Jet.OLEDB.3.51;" ↓↓↓↓↓ "Provider=Microsoft.Jet.OLEDB.4.0;" にすると表示されません。 そこで、データベースをACCESS2000で作成し直し、実行してもダメです。 この処理はJet4.0では出来ないのでしょうか?
- 締切済み
- Visual Basic
- エクセルからアクセスの更新クエリをVBAで実行したい
こんばんは。たびたび失礼します。 http://oshiete1.goo.ne.jp/qa4909202.html の続きです。 アクセスの「テーブル1」の「フィールド」(Yes/No型)がFalseなら Trueにする更新クエリをエクセルから実行したいのですがうまく行きません。 Sub test1() Dim cn As New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "\\Users\ユーザーアカウント名です\Documents" & "\アクセス.mdb" cn.Execute "UPDATE テーブル1 SET フィールド = False WHERE フィールド='" & True & "'" Set cn = Nothing End Sub これを実行すると 実行時エラー2147217913 抽出条件でデータ型が一致しません。 となります。 どうすればいいでしょうか? ご教授よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- VB6.0とaccessのDBを接続する
初めまして。 件名のようなことを実行する際、 以下のソースを参考にしようと思ったのですが、 ******************************************* Dim cn As New ADODB.Connection Dim rc As New ADODB.Recordset ' 接続を確立する cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\My Documents\db1.mdb;" ' テーブル名を指定してレコードセットを作成する rs.Open "Table1", cn, adOpenKeyset, adLockOptimistic ************************************* > cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ > "Data Source=C:\My Documents\db1.mdb;" この部分の接続文字はどのようにしたら取得できるのでしょうか? SQLserverのときは、コンポーネントから Microsoft ADO Data Control 6.0(AP4)(OLEDB) を追加し、プロパティでOLE DBプロバイダを選択して接続文字を取得したのですが、accessに繋ぐのは初めてで、わかりません。 どなたか宜しくお願いいたします!!
- ベストアンサー
- Visual Basic
- closeとメモリの開放について
Sub test() Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ファイル名 Set rs = New ADODB.Recordset rs.Open "テーブル1", cn, adOpenKeyset, adLockOptimistic Set rs = Nothing Set cn = Nothing End Sub この場合は rs.close cn.close はなくても問題ないですか? 調べてみると 「メモリの開放」という言葉を目にするのですが これがなんのことだかわかりません。 タスクマネージャーで確認するのでしょうか? よろしくお願いします。
- ベストアンサー
- Visual Basic
- エクセルVBAでアクセスのテーブルインポート
VBA初心者です。 エクセルのVBAでデータベースA.mdbのテーブルAをデータベースb.mdbにインポートするプログラムお教えて下さい。 '================================================ sub インポート () Set cn = New Connection'データベース接続 cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source="C:\A.mdb" ●ここにPG書くような感じだと思いますが。 cn.Close: Set cn = Nothing'後処理 End Sub '================================================ もし難しい場合、アクセスのVBAでインポートをするが、この実行をエクセルでするよなのでもいいです。この場合は、インポートされるb.mdb側のプログラムをエクセルで実行するようにしたいです。(A.mdbは多数あるため、変更が大変なため) よろしくお願い致します。
- ベストアンサー
- Visual Basic
- 【ADO】「Execute」を使うときは「Update」は不要?
Sub test() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Desktop\test1.mdb" Set rs = New ADODB.Recordset rs.Open "テーブル1", cn, adOpenStatic, adLockPessimistic cn.Execute "DELETE FROM テーブル1" rs.Update '保存 Set rs = Nothing Set cn = Nothing End Sub を実行したとき テーブル1にデータがあるときはエラーにはならないのですが 何もデータがないときは「rs.Update」でエラーになります。 なので「Update」は消して実行していますが 「Update」がなくても「Execute」を実行した後は自動的に保存されるのでしょうか? よろしくお願いします。
- ベストアンサー
- Visual Basic
お礼
ありがとうございます 助かりました