連載
» 2016年10月19日 05時00分 公開

Access VBAで学ぶ初心者のためのデータベース/SQL超入門(終):Access VBAで「Googleマップ」へデータを引き渡す (2/3)

[薬師寺国安,PROJECT KySS]

フォーム読み込み時のイベントを作成する

 地図表示フォームのプロパティシートから、フォーム読み込み時のイベントを設定する。プロパティシート→「イベント」タブをクリックする。「▼」アイコンで[イベントプロシージャ]を選択し、「…」アイコンをクリックするとVBEが開き、

Private Sub Form_Load()

End Sub


 のプロシージャが生成される。これをリスト1のコードに書き換える。

Private Sub Form_Load()
  病院名リストボックス.RowSourceType = "Table/Query"
  病院名リストボックス.RowSource = "Select 病院名 From 病院テーブル;"
End Sub
リスト1:「病院名リストボックス」へ病院名を追加表示するコード

 リスト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:選択した病院の位置をGoogleマップに表示してピンを立てるコード

 リスト2のコードは、以下のように記述してある。

 RecordSet型のmyRecordSet変数と、文字列型のHospitalName変数を宣言する。HospitalNameには、病院名リストボックスから選択された「病院名」が格納される。

 OpenRecordSetメソッドで、病院テーブルから「病院名」が、変数HospitalNameの値に該当する「住所」を選択するSQL文を指定して、カレントデータベースを開き、myRecodSetに代入する。

 文字列型のHospitalUrlを宣言する。変数HospitalUrlには、

  • HospitalUrl = "http://maps.google.co.jp/maps?t=m&z=16&q=" & encodeUTF8(myRecordset("住所"))

 の文字列を格納する。Googleマップを表示させるURLに続き、encodeUTF8関数を使って「住所」をUTF-8に変換している(後述)。

 オプションの「t」には、「m(地図(既定))」「k(航空写真)」のいずれかを指定する。今回は既定値である「m(地図)」を指定している。

 「z」は、0〜20の範囲で「倍率」を指定する。今回は「16」を指定した。「q」には、表示したい「住所」をUTF-8にエスケープして指定する。

 上記のHospitalUrlを実行してサイトを開くために、

  • Shell "rundll32.exe url.dll, FileProtocolHandler " & HospitalUrl, vbNormalFocus

 と記述する。vbNormalFocusはウィンドウの状態を指定する定数だ。この例では、通常のウィンドウを最前面に表示する指定としている。他の値については下記のURL参照してほしい。

(参考リンク)Microsoft Developer Nerwork「AppWinStyle 列挙型



 書式は、

  • rundll32.exe url.dll,FileProtocolHandler ファイルやフォルダのパス

 となる。このサンプルでは、病院名リストボックスで選択した「病院名」に該当する「住所」を指定している。また、rundll32.exe url.dllを実行するのにShell関数を使用している。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。