メールマガジン【アクセスで作るシリーズ】


バックナンバー 【住所録ソフト編】 Vol.23
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□

    ACCESSで作るシリーズ  【住所録ソフト編】

    発 行 : Yoshihisa Fukuda          2002.05.18 Vol.23

■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□
--------------------------------------
今回からは、郵便番号データの取込・更新のプログラム解説です。
色々と複雑なので、最初の郵便番号データ取込・更新フォームの作成(Vol.19)から
解説していきましょう。
______________________________________
 □ 郵便番号データ取込・更新フォームのプログラム解説。

 まずは、郵便番号データ取込・更新フォームの[開く時]イベントで記述した
 プログラムの解説です。

 コードは以下の様に記述しました。

  Select Case Me.OpenArgs
    Case 1
      Me.Caption = "郵便番号データ取り込み"
      Me.Label1.Visible = True
      Me.Label1.Caption = "取込ファイル名"
      Me.Label2.Visible = False
      Me.FileName1.Visible = True
      Me.FileName2.Visible = False
      Me.FileSel1Btn.Visible = True
      Me.FileSel2Btn.Visible = False
      Me.ExecuteBtn.Caption = "取込"
    Case 2
      Me.Caption = "郵便番号データ更新"
      Me.Label1.Visible = True
      Me.Label1.Caption = "廃止ファイル名"
      Me.Label2.Visible = True
      Me.Label2.Caption = "新規追加ファイル名"
      Me.FileName1.Visible = True
      Me.FileName2.Visible = True
      Me.FileSel1Btn.Visible = True
      Me.FileSel2Btn.Visible = True
      Me.ExecuteBtn.Caption = "更新"
    Case Else
      MsgBox "パラメータエラー"
  End Select

最初の Select Case 文は、条件式の値により、それぞれにプログラムの流れを分割
します。

Select Case Me.OpenArgs の Me.OpenArgs は、このフォームを開く時に渡される
引数です。
この後に出てくる DoCmd.OpenForm stDocName, , , stLinkCriteria, , , X と言う
行が、このフォームを開く処理ですが、この最後の引数 X がフォームに引き渡され
ます。

DoCmd.OpenForm stDocName, , , stLinkCriteria, , , 1 としてフォームを開くと、
このフォームで Me.OpenArgs の値に 1 が入ってきます。

今回は、取込処理で引数に1を、更新処理で引数に2を受け渡す様にしています。


次に Case 1 の所で Me.OpenArgs の値が1の時の処理が記述されています。

Me.Caption = "郵便番号データ取り込み" の行は、このフォームの[標題]プロパティ
に"郵便番号データ取り込み"を設定しています。
Me.Caption はフォームの標題を指しています。

次に Me.Label1.Visible = True は Label1 の[可視]プロパティを[True]にしています。
今回の場合、 Label1 の[可視]プロパティは常に[True]なので、この行は無くても
構いません。

次の Me.Label1.Caption = "取込ファイル名" は Label1 の[標題]プロパティに
"取込ファイル名"と設定しています。

次の Me.Label2.Visible = False は Label2 の[可視]プロパティを[False]にして
います。
引数1でこのフォームを呼び出した時は、このフォームは郵便番号データの取込処理
に使用されるので、ファイル名を入力するフィールドは1つしか必要ありません。
従って、この行で2つめのファイル名入力のラベルを非表示にしています。

次の Me.FileName1.Visible = True は FileName1 の[可視]プロパティを[True]に
しています。
これも、今回[False]になる事は無いので、この行も無くても構いません。

次の Me.FileName2.Visible = False は FileName2 の[可視]プロパティを[False]に
しています。
これも、先ほどの Label2 と同じで、2つめのファイル名入力のテキストボックスを
非表示にしています。

次の Me.FileSel1Btn.Visible = True は FileSel1Btn の[可視]プロパティを[True]
にしています。
これも無くても構いません。

次の Me.FileSel2Btn.Visible = False は FileSel2Btn の[可視]プロパティを[False]
にしています。
これも、先ほどの Label2 や FileName2 と同じで、2つめのファイル選択ボタンを
非表示にしています。

最後の Me.ExecuteBtn.Caption = "取込" は ExecuteBtn の[標題]プロパティに
"取込"と設定しています。

この Case 1 の中の処理は、取込様にコントロールの標題を変えたり、表示/非表示
の制御を行っています。

次の Case 2 では、更新様にコントロールの標題を変えたり、表示/非表示の制御を
行います。

簡単に見てみましょう。

Me.Caption = "郵便番号データ更新" でフォームの標題を"郵便番号データ更新"に
しています。

Me.Label1.Visible = True で Label1 を表示しています。

Me.Label1.Caption = "廃止ファイル名"で Label1 の標題を"廃止ファイル名"に
しています。

Me.Label2.Visible = True で Label2 を表示しています。

Me.Label2.Caption = "新規追加ファイル名" で Label2 の標題を
"新規追加ファイル名"にしています。

Me.FileName1.Visible = True で FileName1 のテキストボックスを表示しています。

Me.FileName2.Visible = True で FileName2 のテキストボックスを表示しています。

Me.FileSel1Btn.Visible = True で FileSel1Btn を表示しています。

Me.FileSel2Btn.Visible = True で FileSel2Btn を表示しています。

Me.ExecuteBtn.Caption = "更新" で ExecuteBtn の標題を"更新"にしています。


アクセスの書籍でよく見かける中に、メニュー等からフォームを呼び出す際、
グローバル変数で値の受け渡しをしている事がありますが、フォームを開く際に
この様に引数を受け渡す事が出来ます。

似通ったフォームの場合、この様にして1つのフォームで2つの機能(取込と更新)
を実現することができます。
______________________________________
 □ 郵便番号メンテナンスフォームの郵便番号データ取込・更新ボタンの解説。

 郵便番号メンテナンスフォームの[取込]ボタンの[クリック時]イベントで記述した
 プログラムの解説です。

 コードは以下の様に記述しました。

On Error GoTo Err_ImportBtn_Click

Dim stDocName As String
Dim stLinkCriteria As String

stDocName = "ZipUpdateForm"
DoCmd.OpenForm stDocName, , , stLinkCriteria, , , 1

Exit_ImportBtn_Click:
Exit Sub

Err_ImportBtn_Click:
MsgBox Err.Description
Resume Exit_ImportBtn_Click


最初の On Error GoTo Err_ImportBtn_Click はエラー時の処理の流れを指定して
います。
コントロールウィザードを有効にして、コマンドボタンを作成した時など、自動で
生成されるので、今まで作成した中にも、この On Error GoTo XXX と言うのは、よく
出てきていると思います。

On Error GoTo XXX とすると、エラーが発生した場合、XXX というラベルの付いた
行へ飛んでいきます。

この場合、 On Error GoTo Err_ImportBtn_Click となっているので、エラーが発生
した場合、Err_ImportBtn_Click: の処理を実行します。

Dim stDocName As String Dim stLinkCriteria As String の2行は、変数の宣言
です。

stDocName = "ZipUpdateForm" では、開くフォームの名前を設定しています。

DoCmd.OpenForm stDocName, , , stLinkCriteria, , , 1 でフォームを開きます。

DoCmd.OpenForm はフォームを開く命令です。
第1引数がフォーム名です。
ここでは、フォーム名を一度 stDocName と言う変数に代入していますが、この様に
変数に代入しなくても、直接フォーム名を記述しても構いません。
その場合、DoCmd.OpenForm "ZipUpdateForm", , ・・・ と言った感じになります。

第2引数は、フォームを開く際、どの様な状態で開くかを指定します。
acDesign、acFormDS、acNormal、acPreview の4つが指定ができます。

acDesign で開くと、フォームはデザインの状態で開きます。
acFormDS で開くと、フォームはデーターシートの状態で開きます。
acNormal で開くと、フォームは普通の状態で開きます。
acPreview で開くと、フォームは印刷プレビューの状態で開きます。

ここでは、何も指定していませんが、この様に省略した場合は、既定値として
acNormal となります。

第3引数は、レコードの制限や並べ替えを行いたい場合、そのクエリーやフィルタを
指定します。
今回は、特に制限等がありませんから、省略しています。

第4引数は、フォームを表示する際に、レコードを選択したりするSQLのWHERE句を
記述します。
第3引数のフィルタも指定した場合、まず、フィルタの条件でデータが制限、または
並べ替え等がされて、そのデータに対して、この条件が有効になります。

第5引数は、フォームを開く際のデータのモードを指定します。
acFormAdd、acFormEdit、acFormPropertySettings、acFormReadOnly の4つが指定
できます。

acFormAdd で開くとデータの新規追加のみが出来るフォームが開きます。
acFormEdit で開くとデータの新規追加、編集が出来るフォームが開きます。
acFormPropertySettings で開くと作成したフォームのプロパティ(更新の許可・
削除の許可・追加の許可・データ入力用)の値で決まります。
acFormReadOnly で開くとデータは読み取り専用でフォームが開きます。

今回の様に省略した場合、acFormPropertySettings (既定値)となります。

第6引数は、フォームを開く際のウィンドウの状態を指定します。
acDialog、acHidden、acIcon、acWindowNormalの4つが指定できます。

acDialog で開くとダイアログの状態でフォームが開きます。
acHidden で開くと非表示の状態でフォームが開きます。
acIcon で開くとアイコンの状態(フォームを最小化した状態)でフォームが開きます。
acWindowNormal で開くとフォームのプロパティで指定した状態でフォームが開きます。

今回の様に省略した場合、acWindowNormal (既定値)となります。

最後の第7引数が、フォームに受け渡す引数です。
ここで与えた値が、開いたフォームの OpenArgs と言うプロパティに受け渡されます。
[更新]ボタンの[クリック時]のコードは、ここの値が異なるだけです。

Exit_ImportBtn_Click: はラベルです。
プログラムで分岐したりする場合、このラベルを使用します。

Exit Sub はサブルーチンの終了です。
サブルーチンの途中で、そのサブルーチンを抜け出したい時は、この Exit Sub で
抜け出します。

Err_ImportBtn_Click: はエラー時に飛んでくるラベルです。

MsgBox Err.Description で、エラーの内容をメッセージボックスで表示しています。
アクセスは、プログラムはVisual Basic(VB)と言う言語が使用されています。
VBがエラーを検知した場合、Err と言うオブジェクトに、そのエラーの内容が設定
されます。

Err オブジェクトには、Number、Source、Description、HelpFile、HelpContext、
LastDLLError などのプロパティがあります。
その中のDescription はエラーの内容が入っています。

そのエラーの内容をメッセージボックスで表示しています。

最後の Resume Exit_ImportBtn_Click は、Resume と言うのがプログラムの再開で
Exit_ImportBtn_Click のラベルから再開すると言う事になります。


これで、郵便番号データ取込・更新フォームが開いた状態になるまでのプログラムは
大体理解できたと思います。

次回は、実際にCSVファイルを取り込む部分のプログラム解説です。
______________________________________
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□

◇ ACCESSで作るシリーズ 【住所録ソフト編】
◇ 発 行 元  :Yoshihisa Fukuda(福田 義久)
◇ ご意見・ご要望
  ご質問等   :fukud@nifty.com

◇ このメールマガジンは、インターネットの本屋さん『まぐまぐ』を利用して発行
  しています。(まぐまぐID:0000077071)
◇ バックナンバー:http://homepage2.nifty.com/f-soft/
◇ 登録・解除  :http://homepage2.nifty.com/f-soft/

 Copyright(C) 2001-2002 Yoshihisa Fukuda All rights reserved.

◇転載について
 このメールマガジンの無断転載などは、一切禁止です。
 転載をご希望の方は、事前にメールで連絡をください。
◇免責
 このメールマガジン及びホームページの内容による、いかなる損害、障害などに
 関して発行者は一切の責任を負いません。
 掲載広告についても同様です。
______________________________________
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□