Access VBA 初心者入門講座 http://vba.officehp.com/ Accessでよく使われるVBAの使い方を、初心者向けに図を交えて詳しく解説します。VBAを基礎から学べます。 ja http://vba.officehp.com/article/445699200.html Access VBAとVisual Basicの違いについて。 AccessのVBAとVisual Basicとの違いについて考えてみましょう。AccessでVBAプログラミングを始めた初心者が、ちょっと気になるところですよね。Accessで学んだ後に、より本格的なVisual Basicに進む人も多いですから。まずは略語の意味です。・VBA(Visual Basic for Applications)・VB(Visual Basic)VBA は VB を基に作られたため、文法はそっくりです。VB の機能縮小版と言ったところです。どちらも.. Access VBAとVBの違い Access VBA入門 2017-01-08T09:53:45+09:00 AccessのVBAとVisual Basicとの違いについて考えてみましょう。

AccessでVBAプログラミングを始めた初心者が、ちょっと気になるところですよね。

Accessで学んだ後に、より本格的なVisual Basicに進む人も多いですから。

まずは略語の意味です。
・VBA(Visual Basic for Applications)
・VB(Visual Basic)

VBA は VB を基に作られたため、文法はそっくりです。
VB の機能縮小版と言ったところです。

どちらもMicrosoft社のプログラミング言語なので、かなり近いことは確かです。

ほとんどは同じなんですが、やはり違いがあります。

VBAはMicrosoft社の Office 製品専用のプログラミング言語です。

だからVBA は Office 製品がインストールされていないパソコンだと動きません。

Accessをはじめ Excel や PowerPoint などの Office 製品が入っているパソコンだと、
VBE(Visual Basic Editor)という統合開発環境が使えます。

それに対し、VBはVisual Studioという統合開発環境をインストールしてプログラムを書きます。

Visual Studioには、有料版と無料版があります。
個人利用や教育目的など、条件を満たしている場合は、無料で利用できます。

VB は Windows 上で動作するアプリケーションソフトが開発できます。

実はVisual Studioでは、VB以外にもVisual C、Fなど他のプログラミング言語でも開発できます。

Visual Basic

VBでの開発は、ごく一面に過ぎないことが分かると思います。

また、Accessのフォームと、VBのフォームでは、部品のプロパティが違います。

以下はVBのテキストボックスのプロパティの一部です。

Visual Basic

項目が多いので、全部は見せることができませんが、VBの方がより細かい設定ができます。

プログラミングでは、オブジェクトやプロパティーを操作しますから、
VBの方がより細かい制御が出来るわけです。

もちろん、使えるメソッドや関数も違いが出てきます。

私が業務用システム開発をして感じたのは、
よく使うコンボボックスという部品一つ見ても、差があるなーと思ったことです。

Accessのコンボボックスのプロパティーは、
プログラミング初心者でも分かりやすいのがメリットですが、

より細かい制御では、VBの方がはるかに優れていると実感しました。

その分、プログラミングには手間がかかりますがw

したがってAccessの機能で十分ならそれでも良いし、
より細かい制御をしたい場合は、Visual Basicを次の選択肢に入れると良いでしょう。

]]>
http://vba.officehp.com/article/432299069.html Access VBA基礎の復習とまとめ。 VBAプログラミングの基礎をAccess(アクセス)で学んできました。重要なポイントをまとめたので、復習を兼ねて、もう一度確認しておきましょう。(1)VBAのプログラムはモジュールに書く。(種類がある)・標準モジュール・クラスモジュール フォームやレポートに関連したもの標準モジュールは、複数のフォームやレポートで、共通して使う処理を書いておけます。例えば、「データベースに接続する」などのよく使う処理や、何度も使う計算など。標準モジュールで、プログラムの無駄な重複が防げます。ま.. Access VBA基礎のまとめ Access VBA入門 2016-01-08T19:55:10+09:00 VBAプログラミングの基礎をAccess(アクセス)で学んできました。

重要なポイントをまとめたので、復習を兼ねて、もう一度確認しておきましょう。

(1)VBAのプログラムはモジュールに書く。(種類がある)
・標準モジュール
・クラスモジュール フォームやレポートに関連したもの

標準モジュールは、複数のフォームやレポートで、共通して使う処理を書いておけます。

例えば、「データベースに接続する」などのよく使う処理や、何度も使う計算など。

標準モジュールで、プログラムの無駄な重複が防げます。

またフォームやレポートに関連付けられたモジュールを、クラスモジュールと言います。

実はクラスモジュールには2種類あります。

でもVBAプログラミング初心者でしたら、
フォームやレポートに直接記述する方法だけ知っておけば大丈夫です。

(2)プロシージャはプログラム実行の最小単位である。
一つのモジュールには、プロシージャを複数書くことができます。

また、プロシージャは複数行で記述されます。
各1行がステートメントと言います。

(3)プロシージャには種類がある。
・イベントプロシージャ
・Functionプロシージャ
・Subプロシージャ
・Propertyプロシージャ

イベントプロシージャとは、何かイベント(出来事)が起こった時に、
Accessから自動的に呼び出されるプロシージャのことです。

例えば、コマンドボタンをクリックした時、フォームを開いた時など。

Functionプロシージャは、何らかの計算をし、値を返す関数などを作る時に使います。

Subプロシージャは、よく使う処理を書いておけます。

他のプロシージャから呼び出して使います。

FunctionプロシージャやSubプロシージャを上手く使えば、
呼び出し元のプログラムがシンプルに記述できます。

Propertyプロシージャは、独自のプロパティを作成したい時に使いますが、
VBAプログラミング初心者は使わなくても大丈夫です。

(4)変数や定数の宣言
変数や定数は、宣言してから使うことをおすすめします。

また有効範囲(スコープ)がある点に注意。

基本はプロシージャ内で宣言した変数は、そのプロシージャだけで有効なことです。

複数のプロシージャで共通して使う変数や定数は、
プロシージャの外に記述します。(宣言セクションに)

以上のポイントを押さえておけば、VBAプログラミングの基礎は大丈夫です。

]]>
http://vba.officehp.com/article/410858271.html AccessでVBAを学ぶメリットとは? AccessでVBAを学ぶメリットをまとめてみます。VBAはExcelなど、他のマイクロソフト社製 Officeアプリケーションソフトでも使うことができます。例えば、ExcelでもVBAを使ってプログラミングをする人は多いです。では、わざわざAccessでVBA言語を学ぶことには、どんなメリットがあるのでしょうか?何といってもAccessはデータベースなので、データの蓄積や加工、利用面、応用範囲の広さで優れています。特に業務システムを作るには、最適なアプリケーションソフトです.. AccessでVBAを学ぶメリット Access VBA入門 2014-12-18T13:37:02+09:00 AccessでVBAを学ぶメリットをまとめてみます。

VBAはExcelなど、他のマイクロソフト社製 Officeアプリケーションソフトでも使うことができます。

例えば、ExcelでもVBAを使ってプログラミングをする人は多いです。

では、わざわざAccessでVBA言語を学ぶことには、どんなメリットがあるのでしょうか?

何といってもAccessはデータベースなので、

データの蓄積や加工、利用面、応用範囲の広さで優れています。

特に業務システムを作るには、最適なアプリケーションソフトです。

AccessはExcelよりも、本格的なシステムを構築できるのが、最大のメリットです。

Accessには、クエリーやマクロといった優れた機能があるので、

わざわざVBAでプログラミングしなくても、ある程度のシステムは作れてしまいます。

何故プログラミングが必要なのか?

確かに初心者にとっては、プログラミングを書くことなく処理を行えるマクロは便利です。

クエリーもGUIによって視覚的にデータベースを操作できます。

しかし、システムで細かい制御が必要になってくると、

クエリーやマクロだけでは、限界があります。

その点、VBAではSQL文を自由自在に組み立てたり、

SQL文を通して、データベースを強力に操作することができます。

画面上の部品のコントロールも自在。

もちろんVBAはプログラミング言語なので、処理の繰り返しや自動化は大得意です。

VBAで書いたプログラムやSQL文は、全体を見渡しやすいので、

慣れてくると、こちらのほうがパッと見、分かりやすいくらいです。

つまり、Accessでのシステム構築に慣れてくるほど、

VBA言語やSQL文を使ったプログラミングのほうが、

どんな処理をやっているのか、一目で分かる、処理が明確だというメリットがあるのです。

分かりやすいシステムのほうが、後々の改良、メンテナンスもし易いと言えます。

]]>
http://vba.officehp.com/article/106598893.html Access VBA プログラムの書き方はいろいろあります。 VBA のプログラムの書き方は、いろいろあります。プログラミングでは、実行速度など効率を気にしなければ、正解はいくつもあるということです。今回は復習を兼ねて、もう一つフォームを作り、別の書き方をしてみましょう。押えておいて欲しいポイントは、以下の通りです。・フォームのコピーの仕方・関数の戻り値について・戻り値を受け取る変数のデータ型・関数の引数のデータ型に気をつける・データ型を変換する方法【1】Accessのファイル「SampleDB020.mdb」を起動します。【2】フォー.. Step43・プログラムの書き方はいろいろ Access VBA入門 2008-09-15T16:13:06+09:00 VBA のプログラムの書き方は、いろいろあります。プログラミングでは、実行速度など効率を気にしなければ、正解はいくつもあるということです。

今回は復習を兼ねて、もう一つフォームを作り、別の書き方をしてみましょう。

押えておいて欲しいポイントは、以下の通りです。
・フォームのコピーの仕方
・関数の戻り値について
・戻り値を受け取る変数のデータ型
・関数の引数のデータ型に気をつける
・データ型を変換する方法


【1】Accessのファイル「SampleDB020.mdb」を起動します。


【2】フォーム「F101Test」をコピーして、「F102Test」を作成します。

access-vba-377.gif


【3】フォーム「F102Test」のコードを表示します。

access-vba-378.gif

*VBEを起動するということです。


【4】VBEが起動したら、フォーム「F102Test」のモジュールが操作の対象となっていることを、必ず確認してください。

access-vba-379.gif


【5】コマンドボタンをクリック時のイベントプロシージャを、以下のように修正します。

access-vba-381.gif


Private Sub cmdAdd_Click()
  Dim cdValue As String
  Dim nameValue As String
  
  cdValue = InputBox("PREF_CD を入力してください。", "PREF_CD")
  nameValue = InputBox("PREF_NAME を入力してください。", "PREF_NAME")
  
  Call test8.addData(CInt(cdValue), nameValue)
  MsgBox "追加完了"
End Sub



【6】ここまでの作業を「保存」してください。

access-vba-382.gif


【7】あとは前回と同じ要領で、フォーム「F102Test」の動作を確認してみてください。


【解説】
変更のあった場所だけ赤枠で囲んでみました。

access-vba-380.gif

(1)PREF_CDを保存しておくための変数を、「文字列型」に変更しました。
Dim cdValue As String


(2)InputBox関数の戻り値は文字列型なので、そのまま代入できます。
cdValue = InputBox("PREF_CD を入力してください。", "PREF_CD")


(3)しかし標準モジュール test8.addData() の最初の引数は数値型なので、データ型変換関数の CInt() を使い、文字列を整数型に変換してから渡しています。
Call test8.addData(CInt(cdValue), nameValue)

このように関数の引数には、別の関数を指定して、その戻り値を利用できます。関数部分が戻り値に置き換わるとイメージすると、納得できると思います。

Call test8.addData(CInt(cdValue), nameValue)

Call test8.addData(99, nameValue)

CInt(cdValue) が 99 になるわけです。


【ワンポイント】
以上のように、プログラミングでは、ある程度プログラマーが自由に書くことができます。同じ動作をするプログラムでも、プログラマーによってソースコードが変わってきます。

したがって正解は無いのですが、「プログラムの読み易さ」や「効率の良いプログラム」を意識して作るようにすると良いでしょう。

]]>
http://vba.officehp.com/article/105101755.html Access VBA インプットボックスの動作を確認する方法。 VBA で記述した、インプットボックス(InputBox関数)が、思ったとおりに動作するか、確認してみましょう。インプットボックスを使うと、処理の途中でユーザーが自由に値を入力できるようになり、とても便利です。インプットボックスのメリットは、プログラムの中から簡単に呼び出せるため、フォームのデザインなどの変更が、不要だということです。ちょっとしたデータを入力したい時に役立つ方法です。【1】Accessのファイル「SampleDB020.mdb」を起動します。【2】テーブル「T.. Step42・インプットボックスの動作確認 Access VBA入門 2008-08-21T13:52:00+09:00 VBA で記述した、インプットボックス(InputBox関数)が、思ったとおりに動作するか、確認してみましょう。

インプットボックスを使うと、処理の途中でユーザーが自由に値を入力できるようになり、とても便利です。

インプットボックスのメリットは、プログラムの中から簡単に呼び出せるため、フォームのデザインなどの変更が、不要だということです。

ちょっとしたデータを入力したい時に役立つ方法です。


【1】Accessのファイル「SampleDB020.mdb」を起動します。


【2】テーブル「T01Prefecture」を開き、「47 沖縄県」の下に、レコードが無い状態にしてください。

access-vba-364.gif

*テーブルはいったん閉じておきます。


【3】フォーム「F101Test」を選択し、「開く」をクリックします。

access-vba-365.gif


それでは動作を確認してみましょう。

【4】コマンドボタンの「レコード追加」をクリックします。

access-vba-366.gif


【5】最初のインプットボックスが表示されました。

access-vba-367.gif

実際に表示されたタイトルやメッセージと、プログラムの引数の関係を掴んでください。
cdValue = CInt(InputBox("PREF_CD を入力してください。", "PREF_CD"))


【6】必ず半角数字で「99」と入力して、「OK」ボタンをクリックします。

access-vba-368.gif

*全角だと数値型に変換できないため、エラーになります。


【7】2番目のインプットボックスが表示されたら、「ハワイ」と入力して、「OK」ボタンをクリックします。

access-vba-369.gif

同様にプログラムとの関係を掴んでください。
nameValue = InputBox("PREF_NAME を入力してください。", "PREF_NAME")


【8】「追加完了」というメッセージボックスが表示されたら、「OK」をクリックします。

access-vba-370.gif

これでレコードが追加されました。


【9】フォーム「F101Test」を閉じてください。

access-vba-371.gif


【10】テーブル「T01Prefecture」を開き、レコードが追加されていることを確認しましょう。

access-vba-372.gif

余裕がある場合は、VBEに切り替えて、イミディエイト ウィンドウで結果を確認したり、ブレイクポイントを設定して、プログラムを追ってみると、より理解が深まります。


【ワンポイント】
フォーム「F101Test」と「F100Test」は、同じように標準モジュールの test8.addData() を呼び出しています。

標準モジュールを使うと、複数のフォームから共通して使える(呼び出せる)プログラムが作れます。そのため、処理に修正が出た場合は、標準モジュール側だけの変更で済むメリットがあります。

もし各フォームに追加のプログラムを、別々に書いていた場合は、修正箇所が複数になるため、メンテナンスに手間がかかり、ミスの原因にもなります。

「共通して使えるプログラムは標準モジュールに」ということを覚えておきましょう。

]]>
http://vba.officehp.com/article/104936288.html Access VBA インプットボックス(InputBox関数)を使う方法。 VBA を使い、ユーザーが値を入力できるようにするには、いくつか方法があります。Accessのフォームに、テキストボックスを配置する方法が一般的ですが、今回はプログラムの中から簡単に利用できる、インプットボックス(InputBox関数)を使ってみることにしましょう。インプットボックスなら、フォームを変更することなく利用できます。前回コピーして作成した、フォーム「F101Test」を使います。【1】Accessのファイル「SampleDB020.mdb」を起動します。【2】フォ.. Step41・インプットボックスを使う方法 Access VBA入門 2008-08-18T13:20:45+09:00 VBA を使い、ユーザーが値を入力できるようにするには、いくつか方法があります。

Accessのフォームに、テキストボックスを配置する方法が一般的ですが、今回はプログラムの中から簡単に利用できる、インプットボックス(InputBox関数)を使ってみることにしましょう。インプットボックスなら、フォームを変更することなく利用できます。

前回コピーして作成した、フォーム「F101Test」を使います。


【1】Accessのファイル「SampleDB020.mdb」を起動します。


【2】フォーム「F101Test」を選択し、ツールバーの「コード」をクリックします。

access-vba-375.gif

*このようなVBEの表示の仕方も覚えておくと便利です。


【3】VBEが起動しました。フォーム「F101Test」のモジュールが操作の対象となっていることを、必ず確認してください。

access-vba-362.gif

*コピーしたものなので、イベントプロシージャが既に書かれています。


【4】コマンドボタンをクリック時のイベントプロシージャを、以下のように修正します。

access-vba-363.gif


Private Sub cmdAdd_Click()
  Dim cdValue As Integer
  Dim nameValue As String
  
  cdValue = CInt(InputBox("PREF_CD を入力してください。", "PREF_CD"))
  nameValue = InputBox("PREF_NAME を入力してください。", "PREF_NAME")
  
  Call test8.addData(cdValue, nameValue)
  MsgBox "追加完了"
End Sub



【5】ここまでの作業を「保存」してください。

access-vba-376.gif

変更点はたったこれだけです。既にインプットボックスから値を入力できるようになっています。


【解説】

(1)変数を宣言している部分です。
Dim cdValue As Integer 整数型
Dim nameValue As String 文字列型

変数名は何でもかまいません。プロシージャ内で宣言した変数は、そのプロシージャ内だけが有効範囲なので、他のプロシージャに同名の変数があっても区別されます。

*変数の有効範囲をスコープと言います。

今回は標準モジュール側と明確に区別するため、わざと別名を付けていますが、同じ名前でも大丈夫です。


(2)InputBox 関数を使い、PREF_CDの値を取得している部分です。
cdValue = CInt(InputBox("PREF_CD を入力してください。", "PREF_CD"))

InputBox 関数の最初の引数は、表示するメッセージで、2番目の引数はタイトルです。文字列なら何でもかまいません。

ポイントは InputBox 関数は、『文字列型の値を返す』ということです。そのままでは整数型の変数に代入することができません。そこでデータ型変換関数の CInt() を使い、文字列を整数型に変換してから代入しています。


(3)PREF_NAMEの値は、もともと文字列型なので、そのまま代入できます。
nameValue = InputBox("PREF_NAME を入力してください。", "PREF_NAME")


(4)あとは変数を引数に指定して、標準モジュールの Subプロシージャ を呼び出すだけです。
Call test8.addData(cdValue, nameValue)

この時、引数のデータ型に注意してください。標準モジュールの Subプロシージャ 側は以下のように定義しましたね。

test8.addData

Sub addData(pCd As Integer, pName As String)
  省略
End Sub


つまり呼び出す側の引数の「データ型、順番、数」を、呼び出される側と一致させる必要があるのです。

そのため変数 cdValue は整数型に、nameValueは文字列型にしています。


【ワンポイント】
InputBox 関数には、引数が多くありますが、そのほとんどが省略可能となっています。
InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])

引数を指定することで、規定値を設定したり、InputBoxの表示位置などが調整できます。
もっと詳しく知りたい場合は、 Microsoft Visual Basic のヘルプをご覧ください。

]]>
http://vba.officehp.com/article/103121284.html Access VBA フォームをコピー(複製)する方法。 前回までに作成した Access のフォームは、VBA のプログラムの中に、新しいレコードの値を直接書いていました。Call test8.addData(99, "ハワイ")しかしレコードを追加する度に、プログラムを修正するのは面倒です。そこで PREF_CD と PREF_NAME の値を、ユーザーがフォームから入力できるように、改良したいと思います。今のフォームはそのままにして、新しくフォームを作成し、カスタマイズすることにします。カスタマイズとは、好みに合わせて作り変え.. Step40・フォームをコピーする Access VBA入門 2008-07-18T14:40:48+09:00 VBA のプログラムの中に、新しいレコードの値を直接書いていました。

Call test8.addData(99, "ハワイ")

しかしレコードを追加する度に、プログラムを修正するのは面倒です。

そこで PREF_CD と PREF_NAME の値を、ユーザーがフォームから入力できるように、改良したいと思います。

今のフォームはそのままにして、新しくフォームを作成し、カスタマイズすることにします。カスタマイズとは、好みに合わせて作り変えることです。

でもほとんど同じフォームを、またゼロから作るのは無駄が多いです。そんな時は、Accessにはフォームをコピーする機能があるので、活用しましょう。


【1】Accessのファイル「SampleDB020.mdb」を起動します。


【2】フォーム「F100Test」を、マウスで右クリックします。

access-vba-348.gif


【3】コンテキストメニューが表示されたら、「コピー」を選択します。

access-vba-347.gif


【4】データベースウィンドウの中で、何も無い余白部分を右クリックし、「貼り付け」を選択します。

access-vba-349.gif


【5】フォーム名に「F101Test」と入力し、「OK」ボタンをクリックします。

access-vba-350.gif


【6】フォーム「F101Test」が作成されました。

access-vba-351.gif


【7】フォーム「F101Test」を選択し、「デザイン」をクリックします。

access-vba-352.gif


【8】デザインビューが開きました。

access-vba-353.gif

コピーなので、デザインはまったく同じです。コマンドボタンも配置済みです。


【9】VBEを起動するため、ツールバーにある「コード」をクリックします。

access-vba-354.gif


【10】VBEが起動しました。プロジェクト エクスプローラに、「F101Test」が表示されていることを確認してください。

access-vba-355.gif


【11】フォームが複数ある場合は、VBEのタイトルを見て、現在どのフォームが操作の対象となっているか、必ず確認するようにしてください。

access-vba-356.gif


【12】フォームをコピーすると、VBAのプログラムもコピーされていることに注目してください。

access-vba-357.gif


【13】もちろんフォームやコマンドボタンのプロパティの設定も、同じになっています。

・フォームのプロパティ
access-vba-360.gif

・コマンドボタンのプロパティ
access-vba-359.gif


【14】フォームの動作を確認しても、コピー元と同じように動きます。

access-vba-358.gif


【解説】
Accessでフォームをコピーすると、まったく同じデザインのフォームが作成されます。プロパティの設定も同じで、VBAのプログラムもコピーされます。

似たようなフォームは、コピーしてからカスタマイズすると、効率的に開発できます。

またフォームに大きな変更を加える前に、保存用としてコピーすることもあります。

コピーはよく使う機能なので、覚えておくと便利です。

]]>
http://vba.officehp.com/article/103000090.html Access VBA フォームに書いたイベントプロシージャの動作確認をする方法。 フォームのモジュールにVBA で記述した、イベントプロシージャのプログラムが、正常に動作するか確認してみましょう。今回は動作確認のために、データベースウィンドウ、テーブル、フォーム、VBEの画面を同時に使います。Windows のタスクバーで、画面を上手く切り替えてください。【1】Accessのファイル「SampleDB020.mdb」を起動します。【2】テーブル「T01Prefecture」を開き、「47 沖縄県」の下に、レコードが無い状態にしてください。*テーブルはいった.. Step39・フォームの動作確認 Access VBA入門 2008-07-16T17:14:15+09:00 VBA で記述した、イベントプロシージャのプログラムが、正常に動作するか確認してみましょう。

今回は動作確認のために、データベースウィンドウ、テーブル、フォーム、VBEの画面を同時に使います。Windows のタスクバーで、画面を上手く切り替えてください。

access-vba-344.gif


【1】Accessのファイル「SampleDB020.mdb」を起動します。


【2】テーブル「T01Prefecture」を開き、「47 沖縄県」の下に、レコードが無い状態にしてください。

access-vba-337.gif

*テーブルはいったん閉じておきます。


【3】VBEを起動し、フォーム「F100Test」のモジュールを表示してください。

access-vba-338.gif

VBEを表示したのは、イミディエイト ウィンドウを使うためです。フォームを実行する時に、必ずVBEを開く必要があるわけではありません。


【4】フォームで「F100Test」を選択し、「開く」をクリックします。

access-vba-334.gif


【5】フォーム「F100Test」が表示されました。

access-vba-335.gif


【6】コマンドボタンの「レコード追加」をクリックします。

access-vba-336.gif

この瞬間に、クリック時のイベントが発生し、イベントプロシージャが自動的に呼び出され、中に書いたプログラムが実行されます。


【7】「追加完了」というメッセージボックスが表示されたら、「OK」をクリックします。

access-vba-341.gif

この段階で、レコード追加の処理は終わっています。


【8】VBEに切り替え、イミディエイト ウィンドウを確認してみましょう。

access-vba-342.gif

イミディエイト ウィンドウへの表示は、プログラマーの確認用に使っているだけなので、実際には省略してもかまいません。


【9】テーブル「T01Prefecture」を開き、レコードが追加されていることを確認しましょう。

access-vba-343.gif


【10】同様に、何度か動作確認を繰り返してください。

2回目は、VBEでブレークポイントを設定して、ワンステップごとに確認すると、より理解が深まります。

access-vba-345.gif

「ステップイン」を使うと、標準モジュールのSubプロシージャに、処理が移ることがよくわかります。

access-vba-346.gif


【ワンポイント】
テーブルを開いたままレコードを追加した場合、結果がすぐに反映されません。だからテーブルをいったん閉じておいたのです。

反映されていない場合は、再度テーブルを開き直せば、表示されます。


]]>
http://vba.officehp.com/article/102995704.html Access VBA イベントプロシージャを作成する方法。 VBA のプログラムを、フォームのモジュールに書いてみましょう。実は既に追加のプログラムは完成しているので、標準モジュールのSubプロシージャを呼び出すだけで済みます。今回は新たに「イベントプロシージャ」というものが登場します。これまでのプロシージャとどこが違うのか、注意しながら読んでみてください。【1】Accessのファイル「SampleDB020.mdb」を起動します。【2】VBEを起動し、フォーム「F100Test」のモジュールを表示してください。【3】フォームのモジュ.. Step38・イベントプロシージャを作成する Access VBA入門 2008-07-16T15:33:22+09:00 VBA のプログラムを、フォームのモジュールに書いてみましょう。

実は既に追加のプログラムは完成しているので、標準モジュールのSubプロシージャを呼び出すだけで済みます。

今回は新たに「イベントプロシージャ」というものが登場します。これまでのプロシージャとどこが違うのか、注意しながら読んでみてください。


【1】Accessのファイル「SampleDB020.mdb」を起動します。


【2】VBEを起動し、フォーム「F100Test」のモジュールを表示してください。

access-vba-333.gif


【3】フォームのモジュールに、何か書いてある場合は、最初の1行以外クリアしておいてください。

access-vba-325.gif


【4】左側のコンボボックスで、「▼」をクリックします。

access-vba-326.gif


【5】表示されたリスト(一覧)から、「cmdAdd」を選択します。

access-vba-327.gif

*フォームやフォーム上に配置したコントロールが、リストに表示される


【6】右側のコンボボックスで、「Click」を選択した瞬間に、コマンドボタンをクリック時のイベントプロシージャが、自動的に表示されます。

access-vba-328.gif

*まだ無い時は作成される
*既にある時は表示される


【7】あとは以下のように、イベントプロシージャの中に、プログラムを書くだけです。

access-vba-331.gif


Private Sub cmdAdd_Click()
  Call test8.addData(99, "ハワイ")
  MsgBox "追加完了"
End Sub



【8】ここまでの作業を「保存」してください。

access-vba-332.gif


【解説】
(1)フォームやレポートのモジュールを、「クラスモジュール」と言います。


(2)クラスモジュールには、イベントプロシージャ以外に、Functionプロシージャ や Subプロシージャ を書くことができます。

また宣言といって、フォームの各プロシージャで共通して使う、変数や定数を書くことができます。(プロシージャの外に記述するだけ)


(3)イベントプロシージャとは、コマンドボタンをクリックした時、フォームを開いた時、といったイベント(出来事)が起こった時に、Accessから自動的に呼び出されるプロシージャです。(重要)

Functionプロシージャ や Subプロシージャ が、プログラムの中で、明示的に呼び出すのとは対照的です。


(4)イベントプロシージャは、自動的に呼び出されるため、フォームやコントロールなどのオブジェクト(物)によって、あらかじめイベントの種類が決まっています。


(5)イベントプロシージャ名は、あらかじめ決められていて、自由に付けることはできません。必ずコンボボックスから選択して表示します。

Private Sub cmdAdd_Click()
省略
End Sub

左のコンボボックスでオブジェクトを選択し、右のコンボボックスでイベントを選択します。既存のイベントプロシージャを表示する時も、手順は同じです。

絶対に手入力はしないでください。不具合の原因になります。入力するのは、イベントプロシージャの中だけです。


(6)イベントプロシージャ名を見れば、どのオブジェクトで、どんなイベントが発生した時に呼び出されるか、すぐにわかります。

cmdAdd_Click()
オブジェクト名_イベント名()


(7)イベントプロシージャの中では、標準モジュールのSubプロシージャを、引数を指定して呼び出しているだけです。

Call test8.addData(99, "ハワイ")
MsgBox "追加完了"

標準モジュールのSubプロシージャを呼び出しただけでは、処理の進捗状況がわからないので、最後にメッセージボックスを表示するようにしています。

もちろんメッセージボックスを表示しなくても、追加の処理に影響はありません。


【ワンポイント】
既に気付いた人もいると思いますが、VBEのコンボボックスで選択できるリストは、プロパティのイベントタブと対応しています。

access-vba-330.gif

したがって、VBEでイベントプロシージャを設定すると、プロパティにも反映されます。

access-vba-329.gif

プロパティの日本語をみれば、どんなイベントがあるのかわかります。それがVBEのリストでは、英語で表示されているだけです。

慣れてくると、プロパティからイベントを選択するより、今回のようにVBEのコンボボックスで選択したほうが楽です。

]]>
http://vba.officehp.com/article/102982829.html Access VBA フォームのデザインビューからVBEを起動する方法。 VBA を、フォームのモジュールに書くには、VBEを起動する必要があります。これは標準モジュールの場合と同じですね。・VBA(Visual Basic for Applications)・VBE(Visual Basic Editor)ただしフォームの場合、VBEを起動する方法がいくつもあります。そこで今回は、一通り体験してみることにしましょう。Accessのファイル「SampleDB020.mdb」は、起動しておいてください。■フォームのデザインビューからVBEを起動する方.. Step37・フォームからVBEを起動する Access VBA入門 2008-07-16T10:57:34+09:00 VBA を、フォームのモジュールに書くには、VBEを起動する必要があります。これは標準モジュールの場合と同じですね。

・VBA(Visual Basic for Applications)
・VBE(Visual Basic Editor)

ただしフォームの場合、VBEを起動する方法がいくつもあります。そこで今回は、一通り体験してみることにしましょう。

Accessのファイル「SampleDB020.mdb」は、起動しておいてください。


■フォームのデザインビューからVBEを起動する方法

【1】フォーム「F100Test」を、デザインビューで開きます。

access-vba-315.gif


【2】Accessのツールバーから、「コード」をクリックします。

access-vba-316.gif


【3】VBEが起動しました。フォーム「F100Test」のモジュールが表示されています。

access-vba-317.gif

フォームのモジュールは、「Microsoft Access クラス オブジェクト」に含まれます。標準モジュールとは別だということに注意してください。


【4】ここまでの操作で、VBEの設定が変更されているので、「保存」してください。


■コントロールのプロパティからVBEを起動する方法

【1】フォーム「F100Test」を、デザインビューで開くところまでは、上記と同じです。


【2】コマンドボタン cmdAdd のプロパティを表示します。

access-vba-319.gif


【3】「イベント」タブを選択し、「クリック時」の「▼」をクリックします。

access-vba-318.gif


【4】「イベント プロシージャ」を選択します。

access-vba-320.gif

*ここにマクロが表示されることもあります。


【5】「...」(ビルド)をクリックします。

access-vba-321.gif


【6】VBEが起動しました。フォーム「F100Test」のモジュールが表示されています。

access-vba-322.gif

上記との違いは、既にクリック時のプログラムが、自動的に一部作成されていることです。

これをイベントプロシージャと言います。イベントプロシージャについては、後に詳しく説明します。


【7】ここまでの操作で、VBEの設定が変更されているので、「保存」してください。


■通常通りVBEを起動する方法

【1】VBEは「Altキー」+「F11キー」で、直接起動できます。標準モジュールの場合と同じです。

access-vba-323.gif

ただし一度目は、フォームのモジュールが、表示されないことがあります。

その場合は、上記2つのどちらかの方法で、フォーム「F100Test」のモジュールを表示した後に、いったん「保存」してください。2回目からは、直接起動してOKです。


【解説】
(1)コントロール(部品)のプロパティから起動する方法は、フォームのプロパティでも同様で、イベントタブが用意されています。余裕がある人は、確認してみてください。

access-vba-324.gif


(2)あなたが使いやすい方法で、VBEを起動してかまいません。レポートのモジュールを表示する場合も、まったく同じ要領です。

フォームやレポートを作成中なら、最初に説明した方法が便利です。

]]>
http://vba.officehp.com/article/102880014.html Access VBA フォームのプロパティを変更する方法。 VBA でプログラミングする前に、もう少しだけフォームを工夫してみましょう。Accessはフォームにもプロパティがあり、細かい設定ができるようになっています。今回は不要な機能を非表示にしてみましょう。*プロパティとは、性質を表すデータです。【1】Accessのファイル「SampleDB020.mdb」を起動します。【2】データベースウィンドウの「フォーム」を表示します。【3】前回作成した、フォーム「F100Test」を選択して、「開く」をクリックします。【4】フォームビューで.. Step36・フォームのプロパティを変更する Access VBA入門 2008-07-14T17:11:48+09:00 VBA でプログラミングする前に、もう少しだけフォームを工夫してみましょう。

Accessはフォームにもプロパティがあり、細かい設定ができるようになっています。今回は不要な機能を非表示にしてみましょう。

*プロパティとは、性質を表すデータです。


【1】Accessのファイル「SampleDB020.mdb」を起動します。


【2】データベースウィンドウの「フォーム」を表示します。

access-vba-298.gif


【3】前回作成した、フォーム「F100Test」を選択して、「開く」をクリックします。

access-vba-299.gif


【4】フォームビューで開きました。

access-vba-300.gif

*フォームビューは、フォームを実行した時の画面です。


【5】コマンドボタンの「レコード追加」をクリックしてみましょう。

access-vba-301.gif

まだプログラムを書いていないので、もちろん何も起こりません。


【6】フォームビューで見ると、今回は不要な機能が表示されているので、変更することにします。

access-vba-302.gif

レコードセレクタ、移動ボタン、区切り線は、複数のレコードをフォームに表示する時に便利な機能です。しかし今回のように、ただボタンを配置しただけのフォームには不要です。


【7】フォームを編集するため、デザインビューに切り替えます。

access-vba-303.gif


【8】画面がデザインビューに切り替わりました。

access-vba-304.gif


【9】以下の図のように、フォームの左上をクリックしてから、ツールバーの「プロパティ」をクリックします。

access-vba-305.gif

*この手順は大事なので、覚えてください。


【10】フォームのプロパティが表示されました。

access-vba-306.gif


【11】「すべて」タブをクリックします。

access-vba-307.gif


【12】レコードセレクタ、移動ボタン、区切り線を探し、「いいえ」を選択します。

access-vba-308.gif

*ここでスクロールバーを「なし」に設定したほうがよい事もあります。


【13】変更したらプロパティを閉じてください。

access-vba-309.gif


【14】ここまでの作業を「上書き保存」します。

access-vba-310.gif


【15】確認のため、フォームビューに切り換えます。

access-vba-311.gif


【16】レコードセレクタ、移動ボタン、区切り線が非表示になりました。

access-vba-312.gif

画面がかなりスッキリしましたね。


【17】あとはフォームビューで、フォーム自体の大きさを調整してください。

access-vba-313.gif

*変更したら必ず、「上書き保存」します。


【18】完成したらフォームを閉じてください。

access-vba-314.gif

ここまでの操作を行なって、やっとVBAのプログラムを記述する準備ができたわけです。最初に標準モジュールを使った手軽さが、わかったのではないでしょうか。


【解説】
Accessでは、フォームやコマンドボタンのような各部品ごとに、プロパティを設定することができます。

各部品(コントロールという)のプロパティを表示するのは簡単ですが、フォームのプロパティは、今回のような少し変わった手順で表示します。

プロパティを編集する時は、「何のプロパティ」を操作しているのか、常に意識してください。意外と他のコントロールのプロパティをいじっていることに、気付かない時があります。(初心者が間違いやすい)

プロパティを使うと、文字の色やサイズ、背景色など、いろんな設定が簡単に行なえます。全て覚える必要はありませんが、余裕がある時に一通り見ておくとよいでしょう。

プロパティでどんなことができるか知っておくと、後々にVBAのプログラミングで役立ちます。プロパティの値は、プログラムから変更することもできるからです。


次回はいよいよフォームのモジュールのプログラミングです。

]]>
http://vba.officehp.com/article/102863464.html Access VBA フォームを作成する方法。 VBA のプログラムを、フォームのモジュールに書くためには、まずフォームを作成する必要があります。Accessでフォームを作成するのは、慣れれば簡単なのですが、機能が多いので、初心者は最初のうち戸惑うかもしれません。今回は初めてなので、できるだけ詳しく書きます。次回からは少しずつ手順を省略しますので、フォームの基本的な作り方は、今回で覚えてください。Accessのフォームやレポートは、繰り返し作るうちに、自然に覚えるので大丈夫です。【1】Accessのファイル「SampleD.. Step35・フォームを作成する Access VBA入門 2008-07-14T11:24:44+09:00 VBA のプログラムを、フォームのモジュールに書くためには、まずフォームを作成する必要があります。

Accessでフォームを作成するのは、慣れれば簡単なのですが、機能が多いので、初心者は最初のうち戸惑うかもしれません。

今回は初めてなので、できるだけ詳しく書きます。次回からは少しずつ手順を省略しますので、フォームの基本的な作り方は、今回で覚えてください。

Accessのフォームやレポートは、繰り返し作るうちに、自然に覚えるので大丈夫です。


【1】Accessのファイル「SampleDB020.mdb」を起動します。


【2】データベースウィンドウの「フォーム」を表示します。

access-vba-272.gif

*表示されているフォームの数は、先に Microsoft Access初心者入門講座 を行なったかどうかで異なります。

もし違っていても気にしないでください。


【3】「デザインビューでフォームを作成する」をダブルクリックします。

access-vba-274.gif


【4】新しいフォームのデザインビューが表示されました。

access-vba-275.gif

フォームはこの画面で編集していきます。


【5】Accessのツールバーから、「ツールボックス」をクリックします。

access-vba-276.gif

*既にツールボックスが表示されている場合は、操作不要です。


【6】ツールボックスが表示されました。

access-vba-277.gif


【7】ツールボックスの「コントロール ウィザード」は、オフにしておいてください。

access-vba-278.gif

*へこんでいない状態がオフ


【8】ツールボックスの「コマンドボタン」をクリックします。

access-vba-279.gif


【9】マウスで四角く囲み、フォーム上にコマンドボタンを配置します。

access-vba-280.gif


【10】左上の少し大き目のマーカーで、移動できます。

access-vba-281.gif


【11】左上以外は、拡大・縮小に使います。

access-vba-282.gif


【12】コマンドボタンを選択して、Accessのツールバーから、「プロパティ」をクリックします。

access-vba-283.gif

*先にコマンドボタンを選択することが重要


【13】コマンドボタンのプロパティが表示されました。

access-vba-284.gif


【14】プロパティで「すべて」タブをクリックします。

access-vba-285.gif


【15】全ての項目が表示されました。

access-vba-286.gif


【16】名前に「cmdAdd」と入力し、標題には「レコード追加」と入力します。

access-vba-287.gif


【17】コマンドボタンの名前を変えたので、プロパティのタイトルが変わりました。

access-vba-288.gif

*名前はプログラム中で使われる重要なものです。


【18】フォーム上のコマンドボタンの表示が、変わっていることを確認してください。

access-vba-289.gif

*標題はコマンドボタン上の文字として反映されます。


ここまでの作業を保存しましょう。

【19】ツールバーの「上書き保存」ボタンをクリックします。

access-vba-290.gif


【20】フォーム名に「F100Test」と入力し、「OK」ボタンをクリックします。

access-vba-291.gif


【21】保存したらフォームを閉じてください。

access-vba-292.gif


【22】データベースウィンドウの「フォーム」に、新しく作成した「F100Test」が表示されています。

access-vba-293.gif


【解説】
(1)コマンドボタンのプロパティで設定した、「名前」と「標題」の違いについて注意してください。大事なのは名前のほうで、プログラムの中でもこの名前が使われます。

標題のほうは、システムを利用するユーザーがわかりやすければ、何でもかまいません。


(2)今回作成したフォームは、テーブルやクエリと関係無い場合の作り方です。

テーブルやクエリを基にフォームを作る場合は、少し手順が異なります。その時は Microsoft Access初心者入門講座 のほうが参考になります。


(3)あとは以下のような画面イメージと、簡単なメモから、今回のようなフォームが作れるように練習してください。

access-vba-297.gif

フォーム名:F100Test

コマンドボタンのプロパティ
名前:cmdAdd
標題:レコード追加

Accessでフォーム作りに慣れてきたら、これくらいの情報でも、どのように作ったらいいのか、すぐにイメージできるようになります。


]]>
http://vba.officehp.com/article/102639507.html Access VBA フォームから標準モジュールを呼び出す方法。 VBA で標準モジュールの使い方にも慣れてきた頃だと思います。Accessの標準モジュールは、フォームやレポートに関連付けられていないので、どこからでも実行可能なプロシージャを書くことができます。プロシージャの種類には、Subプロシージャや Functionプロシージャがありましたね。関連付けられていないということは、フォームやレポート無しでも、プログラムのテストができるので、まず最初に学んでもらいました。(重要)初心者がAccessでフォームやレポートを作り、さらにプログラ.. Step34・フォームから標準モジュール呼出し Access VBA入門 2008-07-11T13:16:33+09:00 VBA で標準モジュールの使い方にも慣れてきた頃だと思います。

Accessの標準モジュールは、フォームやレポートに関連付けられていないので、どこからでも実行可能なプロシージャを書くことができます。

プロシージャの種類には、Subプロシージャや Functionプロシージャがありましたね。

関連付けられていないということは、フォームやレポート無しでも、プログラムのテストができるので、まず最初に学んでもらいました。(重要)

初心者がAccessでフォームやレポートを作り、さらにプログラミングまで行なうのは、難しく感じてしまうかもしれないからです。(慣れると難しくないのですが)

そこで最初はVBAのプログラミングに集中してもらうために、標準モジュールから入りました。

でも実際にシステムを運用する時に、システムを使うユーザーが、いちいち VBE(Visual Basic Editor) を起動して、イミディエイト ウィンドウから操作を行なうのは大変ですよね。間違えてプログラムを書き換えてしまう可能性もあります。

普通はユーザーにプログラムを見せないで、フォームから操作してもらうようにします。

そこで次の段階として、フォームから標準モジュールを呼び出して、処理を行なえるようにしてみましょう。

以下のようなイメージを実現します。

(1)フォーム上のボタンをクリックすると、
access-vba-294.gif


(2)テーブルにレコードが追加される。
access-vba-295.gif


(3)イミディエイト ウィンドウにも実行結果が表示される。
access-vba-296.gif

イミディエイト ウィンドウは、あくまでプログラマーの確認用なので、ユーザーに見せる必要はありません。

本当は PREF_CD や PREF_NAME の値を変えられるようにしたいところですが、今回は「フォームから標準モジュールを呼び出す」ということに集中して、後から改良することにします。


【ワンポイント】
本来、標準モジュールの使い方は、複数のフォームやレポートで、共通して使う処理を書いておくものです。


・データベースに接続する部分
・よく使う計算
・よく使う処理 など

これまでに書いてきたプログラムは、フォームのモジュールでも行なえるものです。(そちらに書いたほうが良い)

フォームやレポートを作る手間を省くために、あえて使っていたので、その点はご理解ください。

]]>
http://vba.officehp.com/article/102529099.html Access VBA SQL文を使った検索、追加、更新、削除の動作確認。 前回作成した VBA の標準モジュール「test8」の動作を確認してみましょう。標準モジュールに、同じ名前の Subプロシージャが定義されています。そのため Subプロシージャ の実行方法が、今までと少し違いますので注意してください。【1】Accessのファイル「SampleDB020.mdb」を起動し、テーブル「T01Prefecture」を確認します。「47 沖縄県」の後ろにレコードが無い状態にしてください。【2】VBE を起動して、標準モジュールの test8 を表示し.. Step33・標準モジュール「test8」の動作確認 Access VBA入門 2008-07-09T20:20:45+09:00 VBA の標準モジュール「test8」の動作を確認してみましょう。

標準モジュールに、同じ名前の Subプロシージャが定義されています。そのため Subプロシージャ の実行方法が、今までと少し違いますので注意してください。


【1】Accessのファイル「SampleDB020.mdb」を起動し、テーブル「T01Prefecture」を確認します。

access-vba-257.gif

「47 沖縄県」の後ろにレコードが無い状態にしてください。


【2】VBE を起動して、標準モジュールの test8 を表示します。

access-vba-258.gif

*VBEは「Altキー」+「F11キー」で起動できます。


まず最初に、わざとエラーを出してみましょう。

【3】イミディエイト ウィンドウから dispData() を実行してください。

call dispData()

access-vba-259.gif


【4】エラーメッセージが表示されます。「OK」ボタンをクリックします。

access-vba-260.gif

これは標準モジュールに、同じ名前のプロシージャが複数あるため、コンピュータがどのプロシージャを実行してよいのか、判断できないからです。


【5】次は「標準モジュール名.プロシージャ名」の形式で、明確に指定します。

call test8.dispData()

access-vba-262.gif

「.」ドットまで入力すると、入力候補が表示されます。

access-vba-261.gif


【6】今度はちゃんと実行することができました。

access-vba-263.gif


【7】次の操作のために、イミディエイト ウィンドウをクリアします。

access-vba-264.gif


【8】イミディエイト ウィンドウから addData() を実行してください。

call test8.addData(99, "ハワイ")

access-vba-265.gif


【9】レコードを追加しました。

access-vba-266.gif


【10】イミディエイト ウィンドウをスクロールして、レコードが追加されていることを確認してください。

access-vba-267.gif


【11】テーブル「T01Prefecture」でも確認してください。

access-vba-268.gif


【12】同じ要領で、イミディエイト ウィンドウから editData() を実行してください。

call test8.editData(99, "グアム")

access-vba-269.gif


【13】イミディエイト ウィンドウから deleteData() を実行してください。

call test8.deleteData(99)

access-vba-270.gif


【14】イミディエイト ウィンドウから seekData() を実行してください。

call test8.seekData(8)

access-vba-271.gif


【15】要領が掴めたら、好きなように、レコードを検索、追加、更新、削除してみてください。

*1〜47のレコードはそのままで。練習用にレコードを追加してから行なってください。


【ワンポイント】
プロシージャの引数を使って組み立てられるSQL文を、イミディエイト ウィンドウに表示しています。どんなSQL文になるのか、確認しながら練習すると、理解が深まります。

]]>
http://vba.officehp.com/article/102507233.html Access VBA SQL文を使って検索、追加、更新、削除する方法。 VBA で、SQL文を使ってデータベースを操作することのメリットを、実感できたと思います。そこで今回は、以前に作成した、標準モジュール test6 の検索、追加、更新、削除を、SQL文を使った方法に書き換えてみましょう。・レコードの操作は、T01Prefecture に対して行ないます。(重要)・test6 はそのままにして、新規に test8 を作成します。・test8 の Subプロシージャ名は test6 と同じにします。【1】Accessのファイル「SampleDB0.. Step32・SQL文を使った方法に変更する Access VBA入門 2008-07-09T14:50:37+09:00 VBA で、SQL文を使ってデータベースを操作することのメリットを、実感できたと思います。

そこで今回は、以前に作成した、標準モジュール test6 の検索、追加、更新、削除を、SQL文を使った方法に書き換えてみましょう。

・レコードの操作は、T01Prefecture に対して行ないます。(重要)
・test6 はそのままにして、新規に test8 を作成します。
・test8 の Subプロシージャ名は test6 と同じにします。


【1】Accessのファイル「SampleDB020.mdb」を起動し、VBE を起動してください。

*VBEは「Altキー」+「F11キー」で起動できます。


【2】新しく標準モジュール test8 を作成します。

access-vba-255.gif


【3】標準モジュールの「test8」に、以下のように Subプロシージャ を追加します。

access-vba-256.gif


Sub dispData()
  Dim db As DAO.Database
  Set db = CurrentDb
  
  Dim mySql As String
  mySql = "SELECT * FROM T01Prefecture"
  mySql = mySql & " ORDER BY PREF_CD ASC"
  
  Debug.Print mySql
  
  Dim rs As DAO.Recordset
  Set rs = db.OpenRecordset(mySql)
  
  Do Until rs.EOF
    Debug.Print rs.Fields("PREF_CD") & " " & rs.Fields("PREF_NAME")
    'Debug.Print rs!PREF_CD & " " & rs!PREF_NAME
    rs.MoveNext
  Loop

  rs.Close
  Set rs = Nothing
  db.Close
  Set db = Nothing
  
End Sub

Sub addData(pCd As Integer, pName As String)
  Dim db As DAO.Database
  Set db = CurrentDb

  Dim mySql As String
  mySql = "INSERT INTO T01Prefecture"
  mySql = mySql & " (PREF_CD, PREF_NAME)"
  mySql = mySql & " VALUES (" & pCd & ", '" & pName & "')"
  
  Debug.Print mySql
  db.Execute mySql

  db.Close
  Set db = Nothing
  
  Debug.Print "レコードを追加しました。"
  test8.dispData
End Sub

Sub seekData(pCd As Integer)
  Dim db As DAO.Database
  Set db = CurrentDb
  
  mySql = "SELECT * FROM T01Prefecture"
  mySql = mySql & " WHERE PREF_CD = " & pCd
  
  Debug.Print mySql
  
  Dim rs As DAO.Recordset
  Set rs = db.OpenRecordset(mySql)
  
  If rs.BOF And rs.EOF Then
    Debug.Print "該当するレコードは見つかりませんでした。"
  Else
    Debug.Print pCd & ":" & rs.Fields("PREF_NAME")
  End If

  rs.Close
  Set rs = Nothing
  db.Close
  Set db = Nothing
  
End Sub

Sub editData(pCd As Integer, pName As String)
  Dim db As DAO.Database
  Set db = CurrentDb
    
  Dim mySql As String
  mySql = "UPDATE T01Prefecture"
  mySql = mySql & " SET PREF_NAME = '" & pName & "'"
  mySql = mySql & " WHERE PREF_CD = " & pCd
  
  Debug.Print mySql
  db.Execute mySql, dbFailOnError
  
  db.Close
  Set db = Nothing
  
  Debug.Print "レコードを更新しました。"
  test8.dispData
End Sub

Sub deleteData(pCd As Integer)
  Dim db As DAO.Database
  Set db = CurrentDb
  
  Dim mySql As String
  mySql = "DELETE FROM T01Prefecture"
  mySql = mySql & " WHERE PREF_CD = " & pCd
  
  Debug.Print mySql
  db.Execute mySql, dbFailOnError
  
  db.Close
  Set db = Nothing
  
  Debug.Print "レコードを削除しました。"
  test8.dispData
End Sub


動作確認については、次回に説明します。


【解説】
今回のプログラムは、これまでにも何度か使っているので、重要な部分だけ解説します。

(1)本当は標準モジュールで、同じ名前のプロシージャを定義したくないのですが、今回は比較しやすいように、わざと Subプロシージャ名を test6 と同じにしました。


(2)同じSubプロシージャ名が定義されているので、Subプロシージャ の実行方法が、今までと少し変わります。(次回に説明)


(3)わかりやすくするため、エラー処理は省略しています。そのため想定外の値で実行した場合は、正しく動作しません。


(4)seekData()部分について

BOF かつ EOF でもあるということは、レコードが無いということです。
If rs.BOF And rs.EOF Then

BOF(Begin Of File)はレコードの始端を表す記号
EOF(End Of File)はレコードの終端を表す記号

以下のようにイメージすると、わかりやすいと思います。

・レコードがある場合

BOF
1 北海道 ←カレント レコード
EOF


・レコードが無い場合

BOF EOF


ちなみに以下でも同じ結果になります。
If rs.BOF Then
または
If rs.EOF Then

しかしレコードがある場合でも、「rs.MoveNext」で移動したりすると「EOF」になることがあるので、注意が必要です。やはり「rs.BOF And rs.EOF」が確実です。


(5)SQL実行部分の違いについて

db.Execute mySql, dbFailOnError
db.Execute mySql

dbFailOnError は、レコードの更新・削除が不可能な時に取り消すオプションなので、追加の場合は省略しています。


(6)レコードを表示している部分について

test8.dispData

追加、更新、削除の後には、dispDataを呼び出していますが、標準モジュールに、同じ名前のプロシージャがあるため、「標準モジュール名.プロシージャ名」の形式で明確に指定しています。

*間に半角の「.」ドットが入ります。


【ワンポイント】
SQLについては Access SQL初心者入門講座 をご覧ください。詳しく解説しています。



]]>