• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ハイパーリンク型を指定することは可能ですか?)

VBAでハイパーリンク型を指定する方法はあるのか?

このQ&Aのポイント
  • VBAでテーブル(フィールド)を作成する際にハイパーリンク型を指定する方法を知りたいです。
  • 現在、使用している方法ではデータ型にハイパーリンク型が見当たりません。
  • ハイパーリンク型を指定する方法がない場合、他の方法で同様の機能を実現することは可能でしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • x-1919
  • ベストアンサー率52% (91/173)
回答No.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 は使ったことがなく、今回の質問をきっかけに上記の思考ロジックで進めてみた。

KMKIWZQX7
質問者

お礼

ありがとうございました。