地図表示フォームのプロパティシートから、フォーム読み込み時のイベントを設定する。プロパティシート→「イベント」タブをクリックする。「▼」アイコンで[イベントプロシージャ]を選択し、「…」アイコンをクリックするとVBEが開き、
Private Sub Form_Load()
End Sub
のプロシージャが生成される。これをリスト1のコードに書き換える。
Private Sub Form_Load() 病院名リストボックス.RowSourceType = "Table/Query" 病院名リストボックス.RowSource = "Select 病院名 From 病院テーブル;" End Sub
リスト1のコードは、値集合タイプに「Table/Query」を、値集合ソースに「病院テーブル」の「病院名」フィールドの値を指定したものだ。これで、病院名リストボックスに「病院名」の一覧が表示される。
続いて、病院名リストボックスのためのコードを記述していく。
「病院名リストボックス」を選択した状態で、プロパティシート→「イベント」タブをクリックする。「▼」アイコンで[イベントプロシージャ]を選択し、「…」アイコンをクリックするとVBEが開き、
Private Sub 病院名リストボックス_Click()
End Sub
のコードが生成される。これをリスト2のコードに書き換える。
Private Sub 病院名リストボックス_Click() Dim myRecordset As Recordset Dim HospitalName As String HospitalName = 病院名リストボックス.ItemData(病院名リストボックス.ListIndex) Set myRecordset = CurrentDb.OpenRecordset("Select 住所 From 病院テーブル Where 病院名=" & "'" & HospitalName & "';") Dim HospitalUrl As String HospitalUrl = "http://maps.google.co.jp/maps?t=m&z=16&q=" HospitalUrl = HospitalUrl & encodeUTF8(myRecordset("住所")) '地図を表示する' Shell "rundll32.exe url.dll, FileProtocolHandler " & HospitalUrl, vbNormalFocus End Sub
リスト2のコードは、以下のように記述してある。
RecordSet型のmyRecordSet変数と、文字列型のHospitalName変数を宣言する。HospitalNameには、病院名リストボックスから選択された「病院名」が格納される。
OpenRecordSetメソッドで、病院テーブルから「病院名」が、変数HospitalNameの値に該当する「住所」を選択するSQL文を指定して、カレントデータベースを開き、myRecodSetに代入する。
文字列型のHospitalUrlを宣言する。変数HospitalUrlには、
の文字列を格納する。Googleマップを表示させるURLに続き、encodeUTF8関数を使って「住所」をUTF-8に変換している(後述)。
オプションの「t」には、「m(地図(既定))」「k(航空写真)」のいずれかを指定する。今回は既定値である「m(地図)」を指定している。
「z」は、0〜20の範囲で「倍率」を指定する。今回は「16」を指定した。「q」には、表示したい「住所」をUTF-8にエスケープして指定する。
上記のHospitalUrlを実行してサイトを開くために、
と記述する。vbNormalFocusはウィンドウの状態を指定する定数だ。この例では、通常のウィンドウを最前面に表示する指定としている。他の値については下記のURL参照してほしい。
(参考リンク)Microsoft Developer Nerwork「AppWinStyle 列挙型」
書式は、
となる。このサンプルでは、病院名リストボックスで選択した「病院名」に該当する「住所」を指定している。また、rundll32.exe url.dllを実行するのにShell関数を使用している。
Copyright © ITmedia, Inc. All Rights Reserved.