VBAを使ってフォームをデータベースにリンクする方法

このQ&Aのポイント
  • ワード2010でVBAを使って「フォームをデータベースにリンクする」方法について学習中です。
  • VBAを使用して、ワードにエクセルやアクセスのデータを取り込みたい、連動させたいと思っています。
  • 具体的なコードや英語の表記が理解できず、アドバイスが欲しいです。
回答を見る
  • ベストアンサー

VBAを使ってフォームをデータベースにリンク

ワード2010でVBAを使って、「フォームをデータベースにリンクする」の箇所を、MOSエキスパートワード2010(FOM出版)で勉強しています。しかし、さっぱりわかりません。 ワードにエクセルや、アクセスのデータを取り込みたい、連動させたい?くらいまではわかるのですが コードウインドウ内に入れる 英語の表記が何を意味するのかがわかりません。 ちなみにLesson69をやっているのですが・・・・。 ただ、VBAを勉強するとなればかなりの時間がかかるかと思います。 ですから、「データベースにリンク」するときの言語の意味だけでも理解できて 覚えることができればと思います。 丸暗記でも良いのでしょうが、それでは理解できたと言えないでしょうし・・・。 だからと言って、VBAだけを勉強する余裕もありません。 試験で出題されるのは、ここだけです。 アドバイス等いただければと思います。 例として 「Set cn = New ADODB.connection」が何を意味しているのか等等です。 よろしくお願いします。

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

  • ベストアンサー
  • kikitaiOK
  • ベストアンサー率55% (10/18)
回答No.1

Set cn = New ADODB.connectionは これは cn という入れ物に "新しい"データベースへの接続方法を入れています。 入れる理由は、いちいちADODB.connectionと入力するのが面倒だとか・・・ 2つのデータベースに接続するときに「cn」と「cn2」とかにしてどっちのデータベースか判断できるように・・・ と考えればいいと思います。 ただし、これだけでは新しいデータベースへの接続方法を指定しただけで どのデータベースに接続するのかどうかなどが設定されていません。 これを  cn.open "driver~" っていうところで設定して、データベースへ接続しています。 次に strSQL = "SELECT * FROM シート1 ~” みたいにしてデータベースの中のどのレコードを開くか指定する文を作成します。 エクセルで言うならどのシートの、どのレコード開くかです。 次にレコードセットを作ってその中に実際のレコードを入れます。 これは目には見えないけど、パソコンのメモリ上に1枚のシートを作って その中にコピーしてあげるような感覚です。 Set rs = New ADODB.Recordset これは上のConnectionと同じように新しい1枚のシートを作りますみたいな文です。 rs = open strSQL, cn, adOpenForwardOnly, adLockReadOnly, adCmdText これは、「strSQL」で指定したレコードを、「cn」というデータベースの中から探して開く という感じです。 その他の英語は編集可能にするかどうかとか、オプションがたくさんあると思えばいいです。 その書籍を持っていませんので想像で説明しましたが、わからない箇所を掲載していただいたほうがもっと回答がつくと思いますよ。

mgdsat
質問者

補足

回答ありがとうございます。 もう一度最初からわからないところを記載します。 アクセス2010のデータベースファイル「アンケート.accdb」に接続するように記述するところです。 Dim cn As SDODB Connection" Set cn= New ADODB.Connection cn.Open ConnectionString:=_ "Provider=Microsoft.ACE.OLEDB.12.0;"&_ "Data Source=C:¥データ¥アンケート.accdb" 他にもあるのですが、まずは、これが意味するところをわかると 次がわかりそうな気がします。 ぜひ、解決の糸口となるようにコメントをよろしくお願いします。

その他の回答 (1)

  • kikitaiOK
  • ベストアンサー率55% (10/18)
回答No.2

Dim cn As ADODB.Connection 私はADODBコネクションを cn という名前で使います!と宣言しています。 ※ADODBコネクションとはデータベースまでの道と考えてください。 Set cn= New ADODB.Connection 新しい道を cn という名前に決めました! cn.Open ConnectionString:=_ "Provider=Microsoft.ACE.OLEDB.12.0;"&_ "Data Source=C:¥データ¥アンケート.accdb" cn を開通します! それはC:¥データ¥アンケート.accdbまで続く道で Microsoft.ACE.OLEDB.12.0という乗り物で移動します! これでどうでしょう?

mgdsat
質問者

お礼

ありがとうございます。 kikitaiOKさんに直接習いたいくらいです(^_^) 上記を参照しながら勉強します。

関連するQ&A

  • 【VBA】アタッチとデタッチについての認識

    VBAを勉強中の者です。カテ違いならすいません。 ******************************************************* Sub test1() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection Set rs = New ADODB.Recordset cn.Open "Provider=SQLOLEDB;Data Source=localhost\SQLEXPRESS; " & _ "Initial Catalog=" & データベース名 & ";" & _ "Integrated Security=SSPI" rs.Open "テーブル1", cn, adOpenStatic, adLockOptimistic MsgBox rs.RecordCount rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub ******************************************************* このコードで アタッチは「Set cn = New ADODB.Connection」、 デタッチは「cn.Close: Set cn = Nothing」 になりますか? ご教授よろしくお願い致します。

  • 【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

  • 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 別のプロシージャからも、使えるためには パブリックにするための方法を教えて下さい

  • ACCESS VBA

    ACCESSで検索フォームを作りたいと思っています。 VBAを使って行きたいと思うのですが、うまくいきません。 希望としては、該当するレコードのデータを抽出したいです。 よろしくお願いいたします。 ※現段階でのソースを書いてみました。 最終的に行いたい処理とは違うのですが、根本的に間違っているようなので簡略化しました。 /------------------------------------------------/ Private Sub コマンド1_Click() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim sql As String '接続 Set cn = CurrentProject.Connection 'レコードセットを取得 Set rs = New ADODB.Recordset sql = "SELECT * FROM 従業員データ " & _ "WHERE 年齢=30" rs.Open sql, cn, adOpenDynamic, adLockReadOnly rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub /------------------------------------------------/

  • access97VBAについての質問です

    access97VBAについての質問です こんにちは。access97についてです。現在、私は仕事の都合でアクセスVBAを習得する必要があります。で、幸か不幸か分かりませんが、ちょうどアクセス97を持っておりましたので勉強中なんですが…。そこで質問ですが、アクセス97にはアクセス2000以降にある『プログラムからデータベースに接続する ADODB connection』に相当する機能は無いのでしょうか?ご存知の方、教えて下さい。宜しくお願いします。

  • Accessでのデータベースの使用(VBA)

    Private Sub 実行_Click() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim StSQL As String Set cn = CurrentProject.Connection Set rs = New ADODB.Recordset strSQL = "INSERT INTO マスタ(コード) VALUES(コード) ;" rs.Open strSQL, cn, , adLockOptimistic '//前のコード(エラーになりました。) ' rs.Close 'cn.Close 'Set rs = Nothing 'Set cn = Nothing Set rs = Nothing: Close Set cn = Nothing: Close Accessを使用したvbaのコードの書き方について教えてほしいです。毎度Access の質問ばかりしてすみません。以下のコードはADOを使用してマスタというテーブルを読み込んで最後にrs.CloseでRecordSetを開放しようとしたのですが「オブジェクトが閉じている場合は、操作は許可されません。」というエラーメッセージが出てしまい原因がわかりませんでした。Openしていて開いているはずなのにエラーが出てしまい、 Set rs = Nothing: Closeに変えたら治りました。何故rs.Closeではエラーが出てしまったのでしょうか。 もう一つお聞きしたいです。 strSQL = "INSERT INTO マスタ(コード) VALUES(コード) ;"でコードという名前を付けたテキストボックスの値をマスタテーブルのコードの列に追加したいのですがテキストボックスの値の取り方が分かりません。(コード.Value)とやってみてもだめでした。どうやったらSQL文でテキストボックスの値をテーブルに追加できるんでしょうか。

  • 【ACCESS2000】 VBAの更新処理に条件を加えたい。

    下記のような更新処理のVBAを組みました。 これにIDが5のものを更新するというのを加えるには どうすればよいでしょうか。 Dim cn As ADODB.Connection Dim rs As New ADODB.Recordset Set cn = CurrentProject.Connection rs.Open "tbl_D_売上", cn, adOpenKeyset, adLockOptimistic, adCmdTableDirect rs("入金方法") = 2 rs("入金方法名称") = "分割" rs.Update rs.Close Set rs = Nothing cn.Close Set cn = Nothing

  • ACCESS フォームやコントロールはクラス?

    オブジェクト志向を勉強し始めた者です。 今まで特に意識していなかったのですが、 ACCESSのフォームやテキストボックス等のコントロールは、 クラスなんじゃないか、と思ったんですが これは正しいでしょうか? レコードセットをopenする時に使用する宣言の Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset でいうと ADODBがクラスなのでしょうか? ADODB.Connection、 ADODB.Recordsetがクラスなのでしょうか? ご教授の程、よろしくお願いします。

  • オブジェクトとインスタンスはそれぞれあってますか?

    オブジェクトとインスタンスはそれぞれあってますか? vbaで Sub test() Dim CN As ADODB.Connection 【1】 Set CN = New ADODB.Connection  【2】 ・・・ それぞれ 【1】オブジェクトの作成 【2】インスタンスの作成 であってますか?逆ですか? 動作の名称を教えてください。

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

専門家に質問してみよう