- ベストアンサー
Accessで「ハイパーリンクの挿入」を表示させる方法とは?
- Access2003を使用している場合、ハイパーリンクの挿入を表示させる方法を教えてください。
- フォームにハイパーリンク型のテキストボックスを配置しましたが、ハイパーリンクの挿入の方法がわかりません。
- (1)立ち上げて最初に表示されるメッセージで「開く」ボタンを押すと、ハイパーリンクの挿入が表示されないようです。どうすれば表示させることができますか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No.1です。 > 設定の仕方がわかりません。 コマンドボタンの名前を『リンク挿入』、ハイパーリンクを挿入するテキストボックスの名前を 『リンク』とすると、以下のようなコードになります(上記コマンドボタンのクリック時イベント): Private Sub リンク挿入_Click() On Error GoTo エラー処理 'ハイパーリンクを挿入するテキストボックスに移動 リンク.SetFocus '『ハイパーリンクの挿入』ダイアログを表示 DoCmd.RunCommand acCmdInsertHyperlink 終了処理: Exit Sub エラー処理: If Err = 2501 Then '上記ダイアログでキャンセル選択時はそのまま処理を継続 Resume Next Else '上記以外のエラー時はメッセージを表示して処理を中止 MsgBox Err & ":" & Error$, , Me.Name & " リンク挿入" Resume 終了処理 End If End Sub なお、上記のコードは、ハイパーリンクを挿入するテキストボックスとコマンドボタンが同じ フォーム(又は同じサブフォーム)上にあることを前提にしています。 テキストボックスが「サブ」という名前のサブフォームに、コマンドボタンがメインフォームにある 場合は、「リンク.SetFocus」の1行を、以下のように変更します: With サブ .SetFocus !リンク.SetFocus End With ・・・以上です。 *VBAではなく『マクロ』オブジェクトで行う場合は、テキストボックスやサブフォームへの移動は、 「コントロールの移動」アクションを選択し、引数にコントロール名を指定します。 ハイパーリンクの挿入は、「コマンドの実行」アクションを選択し、引数に「ハイパーリンクの 挿入」を指定します。
その他の回答 (3)
- DexMachina
- ベストアンサー率73% (1287/1744)
No.3です。 > メインのテーブルの1レコードに対し、サブフォームでハイパーリンク型の > テキストボックスを5個作ることにしました。 私も見よう見まねの独学(しかも参考書・解説書の類は読んだことなし、最初の 数年はAccess付属のヘルプのみを頼りにしてのトライ&エラー)なのですが・・・ 私がつくるとしたら、「メインフォーム側のテーブルのID」と「サブフォーム側の テーブル側のID」を一対他の関係にするかな、と思います。 で、サブフォームは帳票型かデータシート型に設定、ですね。 なぜこうするかというと、こうしておけば、「6個目のハイパーリンクが必要になった」 「やっぱりさらに2件追加して」といった要望が発生しないで済むからです。 (逆に、ハイパーリンクの登録が1,2件だけしかないレコードが殆どの場合には、 データベースのサイズが無駄に大きくなるのを防ぐこともできる(はず(汗))、という メリットもあります) また、ハイパーリンクの登録先となるフィールド・コントロールは1つで済むため、 今回のようにテキストボックスごとに個別にコードを組まなければならない、 といったことも防げるわけです。 ただ、このあたりの扱いは、ある程度慣れてからでないと、かえって難しくなって しまう面もあるので(→例えば、サブフォーム上のハイパーリンクを、登録した順に 並べるためには、通し番号になるSubIDを新たに設定する必要がある、など)、 とりあえず頭の片隅に置いておいていただければ、と思います。
お礼
独学でここまでの力をお持ちとは感心してしまいます。かなり頑張られたのでしょうね。 全レコードに対してハイパーリンクの個数を均一にすることは、メモリの無駄遣い、個数が多い時などに対応できない点から私も避けたかったのですが、このようなやり方しか出来ないのではと思ってしまっていました。 設計のことまでアドバイスを下さってありがとうございました。 幸い、サブフォームのデータが0の状態でしたので作り直しました。 幾つもの質問に懇切丁寧に教えて頂いたのにポイント20点しか差し上げれなくて申し訳なく思います。 本当にありがとうございました。 *皆さま、この方はよい回答者様ですよー!*
- DexMachina
- ベストアンサー率73% (1287/1744)
No.1、2です。 > ひとつのコマンドボタンで対応する方法 一例として、コマンドボタンの隣にコンボボックス設置し、それを使用する方法を 説明します: 1)フォームをデザインビューで開く 2)新規コンボボックスを設置(コントロール名は『挿入先』とします) 3)コンボボックスのプロパティシートで、『データ』タブの各項目を以下のように設定: 値集合タイプ=「値リスト」 値集合ソース=「リンク1;リンク2;リンク3;リンク4;リンク5」 *ハイパーリンクの挿入先のテキストボックス名を、「;」区切りで並べます。 (テキストボックス名に特殊な文字を使用している場合は、「"リンク1";"リンク2"・・・」と 「"」で囲みます(「"」を名前に使用している場合は、「'リンク1';'リンク2'・・」と「'」で囲む)) 入力チェック=「はい」 既定値=「リンク1」 (→これは空欄のままでも可) 4)前回設置した『リンク挿入』ボタンのクリック時イベントのコードを以下に差し替え: Private Sub リンク挿入_Click() On Error Goto エラー処理 If IsNull(挿入先) Then MsgBox "挿入先を指定して下さい。",,"確認" Else '『挿入先』で指定したテキストボックスに移動 Me.Controls(挿入先).SetFocus '『ハイパーリンクの挿入』ダイアログを表示 DoCmd.RunCommand acCmdInsertHyperlink End If 終了処理: Exit Sub エラー処理: If Err = 2501 Then Resume Next Else MsgBox Err & ":" & Error$, , Me.Name & " リンク挿入" Resume 終了処理 End If End Sub 前回と同様、サブフォームの場合の場合はテキストボックスへの移動部分は差し替えが 必要です。(「Me.Controls(挿入先).SetFocus」の行) With サブ .SetFocus .Controls(挿入先).SetFocus End With なお、 > カーソルで先にテキストボックスを指定しておいて、カーソルがあるテキストボックスに > ハイパーリンクを挿入 としたい場合は、上記の設定をした上で、それぞれのテキストボックスのフォーカス取得時 イベントで、『挿入先』コンボボックスにそのテキストボックス名を入力してやって下さい。 Private Sub リンク1_Enter() On Error Resume Next '同一フォームの場合はこちら 挿入先 = "リンク1" 'サブフォームの場合はこちら(上のコードを削除し、下の先頭の「'」を削除) 'Me.Parent!挿入先 = "リンク1" End Sub 最後に、これは今後についてのアドバイスですが・・・ 『起動時の設定』がされていたということは、他の方が作られたDBの改善だと思いますが、 1レコードに5つのハイパーリンクを保存というのは、テーブル構造として問題を抱えている のではないかという気がします。 とはいえ、手直しとなるとかなりの手間なのは想像に難くないので、現在のDBは余裕が できたときに見直されるとして、今後新しいDBを作成されるときは、今回の手法をとるより、 テーブルを分割して1レコードにハイパーリンクが1件になる(複数必要な場合はサブフォーム 上の複数レコードとして表示させる)ようにすることをお勧めしておきます。
補足
教えていただいたとおりにやってみたら、希望どおりのものが完成しました。 ご丁寧に教えていただいてありがとうございます! テーブル構造のことなのですが、この部分は、私が設計をしました。 (前任者が作成したデータベースを、使用者の依頼に沿って修正するのが私の役目です。) 設計の仕方もよく理解できていないので、どのような設計をしたらいいのか悩んだのですが、 メインのテーブルの1レコードに対し、サブフォーム でハイパーリンク型のテキストボックスを5個作ることにしました。 メインフォームとサブフォームは共通のIDでリンク付けました。 これは、回答者様のアドバイスとあっているでしょうか?とすれば、私の設計でOKだったということになりますね。サブフォームのハイパーリンクのことだけを聞いてしまったので説明がたりなかったですね。 アクセスは、とても難しいのですが、回答者様のように懇切丁寧に教えてくださる方がいらっしゃるおかげで私のようなものでもなんとか今の任務を果たすことが出来ています。心底、感謝しております。 よろしかったら今後もよろしくお願いします。
- DexMachina
- ベストアンサー率73% (1287/1744)
> 中の設定などをいじりたいときは、ctrl+[開く]で立ち上げています。 「Ctrl」ではなく「Shift」ではないでしょうか? とりあえず、その前提で回答しますが・・・ 1)Shiftキーを押しながら問題のmdbファイルを開く 2)メニューで「ツール(T)→起動時の設定(U)」を選択 3)『起動時の設定』ダイアログが開くので、 メニューについては『すべてのメニューを表示する(U)』のチェック 右クリックについては『既定のショートカット メニュー(W)』のチェック を、それぞれオンに設定 4)『OK』ボタンをクリック ・・・以上です。 これで、次回からはShiftキーを押さなかった場合でも、全てのメニュー項目が 表示されると思います。 なお、上記の方法だと、メニュー全てが許可されることになりますので、 それでは問題があるという場合は、必要なメニューのみを使用できるように したメニューバーを作成した上で、『起動時の設定』ダイアログの 『メニューバー(M)』欄にそのメニューバーの名前を設定して下さい。 (ただ、必要なメニュー項目全てを拾い出すのは、かなり面倒なので、 『すべてのメニューを表示する』のチェックは外して、メニューは現状通り 制限を掛けたままにして、ハイパーリンクの挿入はコマンドボタンなどで 対応したほうが楽かと思います)
補足
ご回答ありがとうございます。 おっしゃるとおりで、Shiftキーの間違いでした。 回答者様に教えていただいた起動時の設定の方法で出来ました。 しかしながら、全てのメニューが表示されるのはやはり危険なので、3番目の方法をとってみたいのですが、設定の仕方がわかりません。 フォーム上にコマンドボタンは作りました。 そこからどうすればいいのでしょうか? 2重の質問で申し訳ありませんが教えていただけないでしょうか?
補足
教えていただいた二つの方法とも出来ました! ありがとうございます。 またまた質問をしてすみません。 リンクを貼りたいテキストボックスは5個あるのですが、 (1)コマンドボタンも5個作って対応することになるでしょうか?それとも、 (2)ひとつのコマンドボタンで対応する方法もあるのでしょうか?(カーソルで先にテキストボックスを指定しておいて、カーソルがあるテキストボックスにハイパーリンクを挿入するといった条件処理のようなのをイメージしています。) とりあえず自分で解決できる(1)の方法で行ってみます。 もし、(2)の方法をご存知でしたら教えていただけないでしょうか? お手を煩わせて申し訳ありません。 よろしかったらお願いします。