- ベストアンサー
VBAでハイパーリンク型を指定する方法はあるのか?
- VBAでテーブル(フィールド)を作成する際にハイパーリンク型を指定する方法を知りたいです。
- 現在、使用している方法ではデータ型にハイパーリンク型が見当たりません。
- ハイパーリンク型を指定する方法がない場合、他の方法で同様の機能を実現することは可能でしょうか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
1) 既存のテーブルを参考にしてみる ハイパーリンク型のフィールドを持つ単純なテーブルを手動で作成して、Table オブジェクトで参照する。 Column プロパティでハイパーリンク型フィールドを参照し、各プロパティをローカル ウォッチ ウィンドウで確認する。 ハイパーリンク型フィールドとしての特色を見つけ出す。 2) 試す 見つけ出した特色を試してみる。 1) の方法は質問者が参考にしているサイトにヒントがあるのですでに試している可能性もある。 すでにそんなのは見ているというのであればご容赦を。 既存テーブルを参照するには "ADOXを用いてテーブル名を取得する" のページを参照する。 ハイパーリンク型フィールドを持つテーブルを 1個だけ作っておき、上記ページのコードを参考に、そのテーブルをコードから参照できるようにする。 テーブルを参照できたら、さらにそのテーブルが持つフィールドを参照するようにコードを改造する。 ADOX でフィールドは Field ではなく Column と呼ぶらしいということは質問者が参考にしているページ上に書かれているのですでに知っているはず。 ともかくフィールドを参照するコードを書いたらそれをステップ実行する。 フィールドを参照している所でローカル ウォッチ ウィンドウを見てみる。 Column オブジェクト変数の中身を展開する。 Name プロパティがフィールド名の事だと言うのはすぐにわかると思う。 Type プロパティが型をあらわしているのもすぐにわかると思う。 ただし Type プロパティは何の変哲もない adLongVarWChar 型なので、ハイパーリンク型として機能するためには更に他の設定値も必要なんじゃないか、という予想が立つ。 Column オブジェクト変数の中身をよーく見てみると Properties という、何やら更に展開できるプロパティの存在に気づくので、それを展開してみると Item1 から Item15 まで 15個のプロパティが隠されていることがわかる。 これらのプロパティの一部は質問者が参考にしているページのコードでも使われているので臆する内容じゃないとちょっぴり安心できると思う。 Item1 から Item15 までの Name プロパティを見てみると、とうぜん英語で書かれているが、Item1 の Autoincrement がオートナンバーをあらわし、Item2 の Default が規定値をあらわし、Item 3 の Description が説明、Item4 の Nullable が Null許容 (Access 的には値要求)、、、 ともかく、この Item1 から Item15 が Access のフィールド型としての特殊な部分のキモになっているんじゃないかっていう予想ができるはず。 その証拠に Item15 の Name は "Jet OLEDB:Hyperlink" である。 これだろう、絶対にこれがハイパーリンク型の鍵になっているだろうっていう予想。 このプロパティの設定値は adBoolean なので True か False になる。 今参照しているのがハイパーリンク型のフィールドであれば Value は True になっている。 つまり 「とあるハイパーリンク型フィールドの Type は adLongVarWChar で、そのフィールドの Properties("Jet OLEDB:Hyperlink") プロパティの値は True である」 ぐらいの結論にたどり着く。 下記コードをステップ実行して Debug.Print fld.Name の行で中断する。 Sub hoge() Dim cat As ADOX.Catalog Set cat = New ADOX.Catalog cat.ActiveConnection = CurrentProject.Connection Dim tbl As ADOX.Table For Each tbl In cat.Tables If tbl.Type = "TABLE" Then Dim fld As ADOX.Column For Each fld In tbl.Columns Debug.Print fld.Name Debug.Print fld.Type Debug.Print Next End If Next End Sub ローカル ウィンドウで変数 fld を展開し、Properties を更に展開し、Item 15 を確認する。 これらの結果をもとに、テーブル作成のコードを試してみる。 Sub MyCreateTable() Dim cat As ADOX.Catalog Dim tbl As ADOX.Table Set cat = New ADOX.Catalog cat.ActiveConnection = CurrentProject.Connection Set tbl = New ADOX.Table tbl.Name = "tbl_sample" Set tbl.ParentCatalog = cat With tbl .Columns.Append "ID", adInteger .Columns.Item("ID").Properties("AutoIncrement") = True .Columns.Append "WebSite", adLongVarWChar .Columns("WebSite").Properties("Jet OLEDB:Hyperlink") = True End Witd cat.Tables.Append tbl End Sub っていう手順で考えていくわけだが。 私は ADOX は使ったことがなく、今回の質問をきっかけに上記の思考ロジックで進めてみた。
お礼
ありがとうございました。