プログラムの概要
事務処理に於いて、集計結果等を 印刷して、確認等を行う事も多い 為、ペーパーレスオフィスが推奨 される昨今に於いても、矢張り印 刷に関する技術は必要で有る。 Visual Basic から印刷を行う方法 は、.NET 以降、PrintDocument オブジェクトを使用する方法が、 標準機能と仕て一般的で有るが、 Professional 版等では ReportView や CrystalReport を利用する事も 可能で有る。亦、Power Packs 2 で は 視 覚 的 確 認 が 容 易 な FormPrint が機能を向上させて復活して居る。此処では、Access のデータを、Access のレポート機能を用いて作成したレポートを、Visual Basic か らAccess オブジェクトを利用して制御を行い、印刷を行う。
印刷Ⅶ
VB 2005 ⑦ □ Access オブジェクト(Application、Document、Table オブジェクト) □ データベースの操作(OpenCurrentDatabase、CloseCurrentDatabase メソッド) □ テーブルの操作(OpenTable メソッド) □ レポートの操作(OpenReport メソッド) □ レポートのプレビュー(Access.AcView.acViewPreview 定数) □ レポートの印刷(Access.AcView.acViewNormal 定数) 今回の課題項目 □ Access オブジェクト(Application、Document、Table オブジェクト) □ データベースの操作(OpenCurrentDatabase、CloseCurrentDatabase メソッド) □ テーブルの操作(OpenTable メソッド) □ レポートの操作(OpenReport メソッド) □ レポートのプレビュー(Access.AcView.acViewPreview 定数) □ レポートの印刷(Access.AcView.acViewNormal 定数) 今回の重点項目■ オブジェクト・プロパティ一覧 ■ コントロールの種類 プロパティ プロパティの設定値 フォーム name AccessPrint FormBorderStyle FixedSingle StartPosition CenterScreen Text ACCESS プリント ラベル1 name lblDatabase Font MS明朝、太字、12 Text データベース名 ラベル2 name lblReport Font MS明朝、太字、12 Text レポート名 テキストボックス name txtDatabase Font MS明朝、標準、12 Text 空白 コンボボックス name cboReport Font MS明朝、標準、12 Text 空白 ボタン1 name btnPreview Font MS明朝、太字、10 Text プレビュー ボタン2 name btnPrint Font MS明朝、太字、10 Text 印刷 ファイルオープンダイアログ name ofdFile ファイルオープンダイアログ コンボボックス ラベル1 ラベル2 テキストボックス ボタン1 ボタン1 参照設定 事前に、下記のライブラリを参照設定して置く。
ActiveX Data Object x.x Library、Microsoft Access x.x Object Library ※ x.x はバージョンに依り異なる。
■ プログラムリスト ■
Public Class AccessPrint Private SD As String Private DB As String Private RP As String ' フォームが読み込まれた時の処理
Private Sub AccessPrint_Load( ByVal sender As System.Object, ByVal e As System.EventArgs ) _ Handles MyBase.Load
' 起動パスの設定
SD = Application.StartupPath: If Not SD.EndsWith( "¥" ) Then SD = SD & "¥" ' ファイルオープンダイアログの設定 ofdFile.InitialDirectory = SD ofdFile.DefaultExt = "mdb" ofdFile.Filter = "Access ファイル(*.mdb)|*.mdb|総てのファイル(*.*)|*.*" End Sub ' テキストボックス(データベース名)がクリックされた時の処理
Private Sub txtDatabase_Click( ByVal sender As Object, ByVal e As System.EventArgs ) _ Handles txtDatabase.Click Dim AC As Access.Application Dim R As Access.AccessObject Dim F As String ' コモンダイアログの表示
If ofdFile.ShowDialog( ) = Windows.Forms.DialogResult.OK Then F = ofdFile.FileName
txtDatabase.Text = F.Substring( F.LastIndexOf( "¥" ) + 1 ) ' データベースファイルの設定 DB = F ' Access ファイルのオープン AC = New Access.Application AC.OpenCurrentDatabase( DB, False ) ' レポート名の取得とコンボボックスへの設定 cboReport.Items.Clear( )
For Each R In AC.CurrentProject.AllReports cboReport.Items.Add( R.Name ) Next ' Access アプリケーションの終了 AC.Quit( ) ' Access オブジェクトの開放 AC = Nothing End If End Sub 此処で宣言した変数は、宣言した クラス内の総てのプロシージャで 値の参照と設定を行う事が出来 る。 Filter プロパティでダイアログに 表示されるファイルの種類を制限 此処で宣言した変数は宣言したサ ブプロシージャ内でしか値の参照 と設定を行う事が出来ない。 Access.Application オブジェクト のOpenCurrentDatabase メソッ ドは、既存のデータベースをカレ ントデータベースと仕て開くメソ ッドで有る。 CreateObject ( "Access.Application" ) でもオブジェクトを生成す る事が出来る。 処理終了後は、Access オブジェク トの Quit メソッドを用いて終了 し、Nothing を代入して、参照を 開放して置く。 総てのレポート名をコンボボック スに設定する。
' コマンドボタン(プレビュー・印刷)がクリックされた時の処理
Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles btnPreview.Click, btnPrint.Click
'指定項目のチェック If Len( DB ) = 0 Then
MsgBox( "データベース名を指定して下さい。", vbOKOnly, "警告" ): Exit Sub End If
If cboReport.SelectedIndex < 0 Then
MsgBox( "レポート名を指定して下さい。", vbOKOnly, "警告" ): Exit Sub End If
RP = cboReport.SelectedItem
' Access ファイルのオープン
Dim AC As New Access.Application AC.OpenCurrentDatabase( DB, False )
' Access レポートのオープン
AC.DoCmd.Close( Access.AcObjectType.acReport, RP, Access.AcCloseSave.acSaveNo ) If sender.Equals( btnPreview ) Then
AC.DoCmd.OpenReport( RP, Access.AcView.acViewPreview ) AC.DoCmd.Maximize( )
AC.Visible = True
' Access レポートの終了の待機 Try
Dim ActRep As String = AC.Screen.ActiveReport.Name Do Until ActRep = ""
Application.DoEvents( )
If AC Is Nothing Then Exit Do Try ActRep = AC.Screen.ActiveReport.Name Catch ex As Exception ActRep = "" End Try Loop Catch ex As Exception Select Case Err.Number
Case 2202 ' プリンタドライバ未インストール MsgBox( "プリンタドライバがインストールされて居ません。", vbOKOnly, "警告" ) Case 2455 ' 切り替え時の対応 Case 7866 ' ファイルが見付からない MsgBox( "ファイルが見付かりません。", vbOKOnly, "警告") Case Else
MsgBox( Err.Description, vbOKOnly, "警告" ) End Select End Try Else AC.DoCmd.OpenReport( RP, Access.AcView.acViewNormal ) AC.CloseCurrentDatabase( ) End If ' Access アプリケーションの終了と Access オブジェクトの開放 AC.Quit( ): AC = Nothing End Sub End Class 此処では、変数の宣言と同時に New キーワードを用いてインス タンスを生成して居る。 Access のレポートをプレビュー モードで開く。 レポートをモーダルで開く機能が 無い為、アクティブなレポートが 閉じられる迄の待機を行う必要が 有る。 アクティブなレポートが無く成る と、此の行で例外が発生する。 Access のレポートをノーマルモ ード(直接印刷)で開く。 処理終了後は、Access オブジェク トの Quit メソッドを用いて終了 し、Nothing を代入して、参照を 開放して置く。
■ MS Access で印刷 ■
■ Access の制御
Access のデータベースエンジンは、Visual Basic にも付属して居る DAO のエンジンで有る。此れは Visual Basic の参照設定ダイアログから DAO をチェックすれば使用可能と成る。同様に、Access Object Library を選択すると、Access 固有の機能も使用する事が出来る様に成る。
Microsoft Access xx Object Library と Microsoft DAO xx Object Library を参照設定
次に、Access のヘルプで Access の Application オブジェクトを観ると、DoCmd と謂うオブジェクトが 有る。此れが、Access の様々な機能を Visual Basic から呼び出す事の出来るコマンド群なので有る。
Visual Basic のオブジェクトブラウザで Access ライブラリの DoCmd を参照すると、下図の様に様々 なコマンドが有る事が解る。
DoCmd オブジェクトには、下記の様なメソッドが有る。大抵の Access の操作は、此等のメソッドに依 り、実現する事が出来る。
ApplyFilter GoToPage OutputTo SelectObject Beep GoToRecord PrintOut SendObject CancelEvent HourGlass Quit SetMenuItem
Close Maximize Rename SetWarnings
CopyObject Minimize RepaintObject ShowAllRecords DeleteObject MoveSize Requery ShowToolbar DoMenuItem OpenForm Restore TransferDatabase Echo OpenModule RunCommand TransferSpreadsheet FindNext OpenQuery RunMacro TransferText
FindRecord OpenReport RunSQL GoToControl OpenTable Save
猶、上記のメソッドに依り解決出来ないAccess の操作は,下記の様に仕て行なう。
関数名 該当する操作 対処
AddMenu メニューの追加 (なし)
MsgBox メッセージボックス MsgBox 関数を使用
RunApp アプリケーションの実行 Shell 関数を使用して他のアプリケーションを実行 RunCode プロシージャの実行 関数をVisual Basic で直接実行
SendKeys キー送信 SendKeys ステートメントを使用 SetValue 値の代入 値をVisual Basic で直接設定 StopAllMacros 全マクロの中止 (なし)
Access オブジェクトの OpenCurrentDatabase メソッド 既存のAccess データベース(mdb)をカレントデータベースと仕て開く。 Object.OpenCurrentDatabase データベースファイル名 [, 排他モード ] 此のメソッドを使用すると、オートメーションに依り、別のアプリケーションで Access デ ータベースを開く事が出来る。 別のアプリケーションで Access のインスタンスを作成した場合は、新しいデータベースを作成するか 又は、特定のデータベースを指定して開く必要が有る。此のデータベースは、Access ウィンドウで開か れる。 指定項目 内容 データベース名 パス名とファイル名の拡張子を含む既存のデータベースファイルの名前を示す文字列式 を指定(ネットワークパスを指定する場合は、其のネットワークでサポートされて居る 書式を指定:¥¥Server¥Share¥Folder¥Filename) 排他モード データベースを排他モードで開くか何うかを指定(省略可能、既定値はFalse) Access オブジェクトの CloseCurrentDatabase メソッド カレントデータベースを閉じる。 Object.CloseCurrentDatabase 此のメソッドを使用して、Access のカレントインスタンスで開いて居るデータベースを閉じ ると、Access のインスタンスを新たに作成しなくても別のデータベースを開く事が出来る。 CloseCurrentDatabase メソッドを使用して、Access のカレントインスタンスで開いて居るデータベー スを閉じると、Access のインスタンスを新たに作成しなくても別のデータベースを開く事が出来る。 Access オブジェクトの OpenTable メソッド テーブルを開く。 Object.DoCmd.OpenTable テーブル名 [, ビュー] [, データモード] 此のアクションの動作は、データベースウィンドウの『テーブル』タブでテーブルを選択し 『開く』ボタン、又は、『デザイン』ボタンをクリックした場合と同じで有る。 引数には、下記を指定する。テーブル名は、省略する事が出来ない。 指定項目 内容 テーブル名 カレントデータベースのテーブルの有効名を文字列式で指定 ビュー 次の孰れかの組み込み定数を指定(acViewNormal/acViewDesign/acViewPreview) データモード 次の孰れかの組み込み定数を指定(acAdd/acEdit/acReadOnly) 機 能 書 式 解 説 機 能 書 式 解 説 機 能 書 式 解 説
Access オブジェクトの OpenReport メソッド レポートを開く。 Object.DoCmd.OpenReport レポート名 [, ビュー] [, フィルター] [, 条件] レポートをデザインビューやプレビューで開くか、又は、レポートの即時印刷を行う為に使 用する。 引数には、下記を指定する。レポート名は、省略する事が出来ない。 指定項目 内容 レポート名 カレントデータベースのレポートの有効名を文字列式で指定 ビュー 次の孰れかの組み込み定数を指定 acViewNormal … レポートを直ちに印刷する。 acViewDesign … レポートをデザインモードで開く。 acViewPreview … レポートをプレビューモードで開く。 フィルター カレントータベースのクエリーの有効名を文字列式で指定 条件 有効なSQL WHERE 句を文字列式で指定 第2引数のビューでacViewNormal を指定すると、印刷ダイアログボックスは表示されずに、現在のプ リンタの設定に依り、直ちにレポートが印刷される。亦、OpenReport メソッドでレポートを開き必要 な調整を施してから、PrintOut メソッドを使用して印刷する事も出来る。印刷する前に、レポートを 修正する場合や、PrintOut メソッドでプリンタの設定を変更する場合は、此の方法を使用する。 同じ形式のレポートで別のデータを印刷するには、フィルタや WHERE 句を使用して、レポートに印 刷するレコードを制限する事が出来る。最大32768 バイト迄の WHERE 句を入力する事が出来る。 第3引数のフィルタには、レポートのレコードを制限する既存のクエリ、又は、クエリとして保存され たフィルタの名前を指定する。但し、開くレポートの総てのフィールドが含まれて居るクエリ、又は OutputAllFields プロパティに True が設定されて居るクエリを指定する必要が有る。 第4引数の条件には、レポートの基に成るテーブルやクエリのレコードを選択する時に使用する WHERE 句(WHERE の語を除く)や式を指定する。 Access オブジェクトの Close メソッド 閉じるアクションを実行する。
Object. DoCmd.Close acReport, レポート名 [, 保存]
開いて居るレポートを閉じる。猶、此のメソッドは、ユーザーが明示的に開いたり閉じたり する事が出来る総てのデータベースオブジェクトに対して使用する事が出来る。 第3引数の保存に、acSaveNo を指定した場合は変更を保存せずにレポートを閉じ、acSavePrompt(既 定値)を指定した場合はレポートを閉じる前に保存するか何うかの確認を行うダイアログボックスを表 示し、acSaveYes を指定すると自動的に変更を保存してレポートを閉じる。 機 能 書 式 解 説 機 能 書 式 解 説
Access オブジェクトの PrintOut メソッド 印刷する。 Object. DoCmd.PrintOut [印刷方法][, 開始頁, 終了頁][, 品質][, 枚数][, 部数] 此のメソッドを使用して、データシート、レポート、フォーム、データアクセスページ、及 び、モジュールを印刷する事が出来る。 引数には、下記を指定する。総ての引数は、省略する事が出来る。 指定項目 内容 印刷方法 次の孰れかの組み込み定数を指定(acPrintAll=既定値/acSelection/acPages) 開始頁 アクティブフォーム又はアクティブデータシートの有効なページ番号を数式で指定 印刷方法にacPages を指定した場合は省略不可 終了頁 アクティブフォーム又はアクティブデータシートの有効なページ番号を数式で指定 印刷方法にacPages を指定した場合は省略不可 品質 次の孰れかの組み込み定数を指定(acDraftacHigh=既定値/acLowacMedium) 枚数 印刷する枚数を数式で指定 既定値は1 部数 部単位で印刷するにはTrue を、部単位で印刷しない場合は False を指定 既定値はTrue 機 能 書 式 解 説 参考 Access オブジェクト用の変数を宣言する。 Private AC As Access.Application Access オブジェクトのインスタンスを生成する。 Set AC = New Access.Application
Access ファイルを開く。
AC.OpenCurrentDatabase データベース名, False
Access レポートを、WHERE 句を指定して、プレビューモードで開く。 AC.DoCmd.OpenReport レポート名, acViewPreview, , "フィールド名=値" Access レポートのレコードソースを設定する(デザインモードで開く必要が有る)。
AC.Reports(レポート名).RecordSource = "SELECT * FROM テーブル名" Access レポートのコントロールのプロパティに値を設定する(同上)。
AC.Reports(レポート名).Controls(コントロール名).プロパティ名 = 値 Access レポートを、変更を保存せずに、閉じる。
AC.DoCmd.Close acReport, レポート名, acSaveNo Access アプリケーションを終了する。
Access.Report オブジェクトの RecordSource プロパティ フォームやレポートの基に成るデータを示すプロパティ Object.RecordSource = 文字列 RecordSource プロパティを使用すると、テーブル、クエリ、又は、SQL ステートメントの データを表示する事が出来る。 文字列には、テーブル名、クエリ名、又は、SQL ステートメントを指定する。下記に設定値の例を示す。 設定値の例 内容 [社員] データソースと仕て社員テーブルを指定するテーブル名 SELECT 受注!受注日 FROM 受注; データソースと仕て受注テーブルの受注日フィールドを指定する SQL ステートメント コントロールのControlSource プロパティに受注日を設定すると、フォームやレポートのコ ントロールに受注テーブルの受注日フィールドを連結する事が出来る。 フォームやレポートを作成した後に、RecordSource プロパティを変更すると、基に成るデータを変更 する事が出来る。RecordSource プロパティは、再使用可能なフォームやレポートを作成する時に効果 的で有る。例えば、或るフォームをコピーし、其のフォームのRecordSource プロパティを変更すると 同じ形式のフォームに異なるテーブル、クエリ、又は、SQL ステートメントのデータを表示する事が出 来る。 実行時にレポートのレコードソースを変更する例を、下記に示す。 ' Access オブジェクト用の変数の宣言 Dim AC As Access.Application ' Access オブジェクトのインスタンス生成 Set AC = New Access.Application ' データベースのオープン
AC.OpenCurrentDatabase データベース名, False ' レポートのオープン
AC.DoCmd.OpenReport レポート名, acViewDesign ' レポートのレコードソースの設定
AC.Reports(レポート名).RecordSource = "SELECT * FROM テーブル名" ' レポートを変更を保存してクローズ
AC.DoCmd.Close acReport, レポート名, acSaveYes ' Access アプリケーションの終了 AC.Quit ※ 開いて居るフォームやレポートのレコードソースを変更すると、基に成るデータの再クエリが自動 的に行われる。フォームのRecordset プロパティを実行時に設定すると、其のフォームの RecordSource プロパティが更新される。 ※ レポートをプレビューモードで開いて居る時に、此のプロパティを変更すると、エラーが発生する ので、此のプロパティを変更する時は、デザインモードで、レポートを開く必要が有る。猶、Access オブジェクトのVisible プロパティを True に設定しない限り、デザインモードの画面が表示される事は 無い。 機 能 書 式 解 説
Access オブジェクトの Filter プロパティ フィルタの設定と取得を行う。 Object.Filter = 設定値 テーブルやレポートで抽出するレコードを制限するフィルタを設定する。 Filter プロパティを使用すると、フィルタを保存し、後で其れを適用する事が出来る。フィルタは、フ ィルタを作成したオブジェクトと共に保存される。オブジェクトが開かれると、自動的に、フィルタは ロードされるが、自動的に適用される訳では無い。 新規にフォームやレポートオブジェクトを生成すると、其のオブジェクトのRecordSource プロパティ には、基に成るテーブルやクエリの名前が設定され、更に、Filter、OrderBy、OrderByOn の各プロパ ティの設定が適用される。保存したフィルタをフォームやレポートに適用するには、FilterOn プロパテ ィにTrue を設定する。 フォームやレポートが開かれた時に、フィルタが自動的に適用される様にするには、DoCmd オブジェ クトのApplyFilter メソッドを使用する。亦、フィルタを解除するには、FilterOn プロパティに False を設定する。
設定値は、文字列式で、WHERE 句から WHERE を省いた物で有る。都道府県フィールドの値が大阪 のレコード丈を抽出するフィルタを適用する例を、下記に示す。
Access オブジェクト.Reports(レポート名).Filter = "都道府県 = '大阪'" Access オブジェクト.Reports(レポート名).FilterOn = True
Access オブジェクトの OrderBy プロパティ レコードの並べ替え方法の設定と取得を行う。 Object.OrderBy = 設定値 テーブルやレポートで表示するレコードをソートするフィールドを設定する。 設定値は、レコードを並べ替える基準と成るフィールド名を示す文字列式で有る。複数のフィールド名 を使用する場合は、夫々れの名前をコンマ( , )で区切る。 フィールド名を OrderBy プロパティを設定すると、レコードは昇順で並べ替えらる。レコードを降順 で並べ替えるには、文字列式の最後にDESC を指定する(例:"得意先コード DESC")。 レポートの OrderBy プロパティに指定した並べ替え順序を適用するには、OrderByOn プロパティに true を設定する必要が有る。
開いて居るレポートにOrderBy プロパティを設定すると、レポートの Close イベント、及び、Open イ ベントが発生する。 新規にフォームやレポートオブジェクトを生成すると、其のオブジェクトのRecordSource プロパティ には、基に成るテーブルやクエリの名前が設定され、更に、Filter、OrderBy、OrderByOn の各プロパ ティの設定が適用される。 機 能 書 式 解 説 機 能 書 式 解 説
Access オブジェクトの Control オブジェクト
Control オブジェクトは、フォーム、レポート、又は、セクション上のコントロール、別のコントロー ル内のコントロール、別のコントロールにリンクされたコントロールを示す。
フォームやレポートのコントロールは、総てForm オブジェクトや Report オブジェクトの Controls コ レクションに属して居る。特定のセクション内に有るコントロールは、其のセクションの Controls コ レクションに含まれる。タブコントロールやオプショングループコントロール内に有るコントロールは 其のコントロールの Controls コレクションに含まれる。ラベルコントロールは、其のコントロールの Controls コレクションに含まれる別のコントロールにリンクして居る。 Controls コレクションの個々の Control オブジェクトを参照するには、下記の様に記述する。 Controls コレクションの CTRL と謂う名前のコントロールを参照 Access オブジェクト.Reports(レポート名).Controls!CTRL コントロール名にスペースが含まれて居る場合の参照
Access オブジェクト.Reports(レポート名).Controls![CTRL TEXT] 下記参照の場合、処理速度が少し遅く成る。 Access オブジェクト.Reports(レポート名).Controls("CTRL") コレクションのコントロールインデックスで参照 Access オブジェクト.Reports(レポート名).Controls(0) ' サブフォームコントロールコレクションを使用して参照 Access オブジェクト.Reports(レポート名).ctlSubForm.Controls!CTRL 各 Control オブジェクトは特定の組み込み定数に依り明示的に意味付けられて居る。例えば、定数 acTextBox はテキストボックスに対応し、定数 acCommandButton はコマンドボタンに対応して居る。 既存のコントロールの型を確認するには、ControlType プロパティを使用する。但し、コードで使用す る場合は、データ型がControl 型の変数に定数を割り当てる丈でコントロールを参照する事が出来るの で、特定のコントロールの型を知る必要は無い。 参照するコントロールのデータ型が判明して居り、Access の組込コントロールで有る場合は、特定のタ イプ(例えばTextBox)の変数を使用する事が出来るが、コントロールが ActiveX コントロールの場合 は、Control タイプの変数を使用する必要が有り、特定のタイプの変数は使用出来ない。猶、変数が示 すコントロールのタイプが分からない場合は、変数をControl タイプとして宣言する。 オプショングループコントロールは、オプションボタン、チェックボックス、トグルボタン、ラベルコ ントロール等、他のコントロールをControls コレクション内に含む事が出来る。 タブコントロールには、Controls コレクションの特定のタイプで有る Pages コレクションが含まれ Pages コレクションには、コントロールで有る Page オブジェクトが含まれる。更に、各 Page オブジ ェクトには、其のページに有る総てのコントロールを含む Controls コレクションが含まれる。
他のControl オブジェクトには、付属ラベルを含む事が出来る Controls コレクションが有る。此等の コントロールには、テキストボックス、オプショングループ、オプションボタン、トグルボタン、チェ ックボックス、コンボボックス、リストボックス、コマンドボタン、連結オブジェクトフレーム、及び 非連結オブジェクトフレームの各コントロールが含まれる。
Access オブジェクトの ControlType プロパティ コントロールの種類の設定と取得を行う。 Object.ControlType = 設定値 フォームやレポートのコントロールの種類を示す。 ControlType プロパティの設定値は、以下のコントロールの種類を指定する組み込み定数で有る。 定数 コントロール acBoundObjectFrame 連結オブジェクトフレーム acCheckBox チェックボックス acComboBox コンボボックス acCommandButton コマンドボタン acCustomControl ActiveX コントロール acImage イメージ acLabel ラベル acLine 線 acListBox リストボックス acObjectFrame 非連結オブジェクトフレーム、グラフ acOptionButton オプションボタン acOptionGroup オプショングループ acPage Page オブジェクト acPageBreak 改ページ acRectangle 四角形 acSubform サブフォーム、サブレポート acTabCtl タブ acTextBox テキストボックス acToggleButton トグル ボタン ControlType プロパティは、コードで特定のコントロールの種類を確認する時丈で無く、コントロール の種類を別の種類に変更する時にも使用する事が出来る。例えば、フォームのデザインビューでテキス トボックスのControlType プロパティに定数 acComboBox を設定し、テキストボックスをコンボボッ クスに変更する事が出来る。 ControlType プロパティを使用すると、特定の条件に従い、フォームの類似したコントロールの属性を 変更する事が出来る。例えば、ユーザーに対し、テキストボックスの既存のデータの編集を禁止する場 合、総てのテキストボックスの SpecialEffect(立体表示)プロパティに Flat(平坦)を設定し、フォ ームのAllowEdits(更新の許可)プロパティに No(いいえ)を設定する。SpecialEffect プロパティは データの編集には影響を与えないが、コントロールの動作が変更された事を視覚的に解る様にする。 ControlType プロパティは、CreateControl メソッドを使う場合に、作成するコントロールの種類を指 定する為にも使用する事が出来る。 機 能 書 式 解 説