
Access2003を使用しています。
フォームにハイパーリンク型のテキストボックスを配しました。
そこにハイパーリンクのパスを貼る時の「ハイパーリンクの挿入」の出し方について教えてください。
使っている.mdbの開き方は2種類あります。
(1)立ち上げて最初に表示されるメッセージで「開く」ボタンを押すと、入力しかできない(これの名称がわからないため、言葉の説明ですみません)。
(2)中の設定などをいじりたいときは、ctrl+[開く]で立ち上げています。
このやりかたで立ち上げたときは、フォーム上のメニューバーの挿入に「ハイパーリンク」が出てくるか、ハイパーリンクのテキストボックスにカーソルを置いた状態で右クリックすると「ハイパーリンク」が表示されます。
ところが、(1)の入力しか出来ないやり方で開くと、「ハイパーリンクの挿入」を立ち上げるには、カーソルをハイパーリンク型のテキストボックスにカーソルを置いた状態でショートカットキーのctrl+K を使うしかないようなんです。メニューバーに表示されないのです。
これは、どうしてなのでしょうか?
この問題を解決する方法を教えていただけないでしょうか?
お手数をおかけして申し訳ありませんが、よろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
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ではなく『マクロ』オブジェクトで行う場合は、テキストボックスやサブフォームへの移動は、
「コントロールの移動」アクションを選択し、引数にコントロール名を指定します。
ハイパーリンクの挿入は、「コマンドの実行」アクションを選択し、引数に「ハイパーリンクの
挿入」を指定します。
この回答への補足
教えていただいた二つの方法とも出来ました!
ありがとうございます。
またまた質問をしてすみません。
リンクを貼りたいテキストボックスは5個あるのですが、
(1)コマンドボタンも5個作って対応することになるでしょうか?それとも、
(2)ひとつのコマンドボタンで対応する方法もあるのでしょうか?(カーソルで先にテキストボックスを指定しておいて、カーソルがあるテキストボックスにハイパーリンクを挿入するといった条件処理のようなのをイメージしています。)
とりあえず自分で解決できる(1)の方法で行ってみます。
もし、(2)の方法をご存知でしたら教えていただけないでしょうか?
お手を煩わせて申し訳ありません。
よろしかったらお願いします。
No.4
- 回答日時:
No.3です。
> メインのテーブルの1レコードに対し、サブフォームでハイパーリンク型の
> テキストボックスを5個作ることにしました。
私も見よう見まねの独学(しかも参考書・解説書の類は読んだことなし、最初の
数年はAccess付属のヘルプのみを頼りにしてのトライ&エラー)なのですが・・・
私がつくるとしたら、「メインフォーム側のテーブルのID」と「サブフォーム側の
テーブル側のID」を一対他の関係にするかな、と思います。
で、サブフォームは帳票型かデータシート型に設定、ですね。
なぜこうするかというと、こうしておけば、「6個目のハイパーリンクが必要になった」
「やっぱりさらに2件追加して」といった要望が発生しないで済むからです。
(逆に、ハイパーリンクの登録が1,2件だけしかないレコードが殆どの場合には、
データベースのサイズが無駄に大きくなるのを防ぐこともできる(はず(汗))、という
メリットもあります)
また、ハイパーリンクの登録先となるフィールド・コントロールは1つで済むため、
今回のようにテキストボックスごとに個別にコードを組まなければならない、
といったことも防げるわけです。
ただ、このあたりの扱いは、ある程度慣れてからでないと、かえって難しくなって
しまう面もあるので(→例えば、サブフォーム上のハイパーリンクを、登録した順に
並べるためには、通し番号になるSubIDを新たに設定する必要がある、など)、
とりあえず頭の片隅に置いておいていただければ、と思います。
独学でここまでの力をお持ちとは感心してしまいます。かなり頑張られたのでしょうね。
全レコードに対してハイパーリンクの個数を均一にすることは、メモリの無駄遣い、個数が多い時などに対応できない点から私も避けたかったのですが、このようなやり方しか出来ないのではと思ってしまっていました。
設計のことまでアドバイスを下さってありがとうございました。
幸い、サブフォームのデータが0の状態でしたので作り直しました。
幾つもの質問に懇切丁寧に教えて頂いたのにポイント20点しか差し上げれなくて申し訳なく思います。
本当にありがとうございました。
*皆さま、この方はよい回答者様ですよー!*
No.3
- 回答日時:
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だったということになりますね。サブフォームのハイパーリンクのことだけを聞いてしまったので説明がたりなかったですね。
アクセスは、とても難しいのですが、回答者様のように懇切丁寧に教えてくださる方がいらっしゃるおかげで私のようなものでもなんとか今の任務を果たすことが出来ています。心底、感謝しております。
よろしかったら今後もよろしくお願いします。
No.1
- 回答日時:
> 中の設定などをいじりたいときは、ctrl+[開く]で立ち上げています。
「Ctrl」ではなく「Shift」ではないでしょうか?
とりあえず、その前提で回答しますが・・・
1)Shiftキーを押しながら問題のmdbファイルを開く
2)メニューで「ツール(T)→起動時の設定(U)」を選択
3)『起動時の設定』ダイアログが開くので、
メニューについては『すべてのメニューを表示する(U)』のチェック
右クリックについては『既定のショートカット メニュー(W)』のチェック
を、それぞれオンに設定
4)『OK』ボタンをクリック
・・・以上です。
これで、次回からはShiftキーを押さなかった場合でも、全てのメニュー項目が
表示されると思います。
なお、上記の方法だと、メニュー全てが許可されることになりますので、
それでは問題があるという場合は、必要なメニューのみを使用できるように
したメニューバーを作成した上で、『起動時の設定』ダイアログの
『メニューバー(M)』欄にそのメニューバーの名前を設定して下さい。
(ただ、必要なメニュー項目全てを拾い出すのは、かなり面倒なので、
『すべてのメニューを表示する』のチェックは外して、メニューは現状通り
制限を掛けたままにして、ハイパーリンクの挿入はコマンドボタンなどで
対応したほうが楽かと思います)
この回答への補足
ご回答ありがとうございます。
おっしゃるとおりで、Shiftキーの間違いでした。
回答者様に教えていただいた起動時の設定の方法で出来ました。
しかしながら、全てのメニューが表示されるのはやはり危険なので、3番目の方法をとってみたいのですが、設定の仕方がわかりません。
フォーム上にコマンドボタンは作りました。
そこからどうすればいいのでしょうか?
2重の質問で申し訳ありませんが教えていただけないでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのハイパーリンクで別BOOKを開く 3 2022/10/26 18:48
- Excel(エクセル) excelで検索した商品の画像(ネットワーク上の)を表示させたい。 3 2023/06/28 00:32
- JavaScript 【GAS】WEBアプリでハイパーリンクを挿入したい 1 2023/03/12 19:20
- フリーソフト 画像貼り付け、URLに飛べる軽いメモ帳 3 2022/05/12 07:42
- Visual Basic(VBA) excel vba でユーザーフォーム入力ができない 2 2022/12/12 14:42
- Excel(エクセル) Excelで立ち上げたときに「参照が正しくありません」の表示がでる 7 2023/01/23 08:01
- Excel(エクセル) Excelでハイパーリンクが変化する表を作りたい 6 2023/05/03 07:54
- HTML・CSS ウェブサイトにアップされているPDFファイルのハイパーリンク先に飛ぶ時、新しいタブを開きたい 3 2022/12/13 13:57
- Excel(エクセル) ハイパーリンク先のフォルダの中のファイルが多すぎで見つけれません。ハイパーリンクの挿入の画面が小さく 1 2023/02/12 19:55
- Excel(エクセル) Excel ハイパーリンク設定について 教えてください 例なんですが、 VBAにてファイル1の列Gに 2 2022/11/04 17:52
このQ&Aを見た人はこんなQ&Aも見ています
-
ACCESSのフォームからハイパーリンクで開く
Access(アクセス)
-
Accessのハイパーリンクをクリックしてもファイルが開かない
Access(アクセス)
-
テキスト型のフィールドでハイパーリンク
Access(アクセス)
-
-
4
Accessのクエリでハイパーリンクの作成したい
その他(Microsoft Office)
-
5
アクセスのボタンから指定のワードファイルを開く
Access(アクセス)
-
6
AccessからExcelのファイルを起動する
その他(データベース)
-
7
Access2007のテーブルにハイパーリンク型を指定しているがリンク先を開かない
PowerPoint(パワーポイント)
-
8
選択したチェックボックスのみチェックを入れたいのですが
その他(データベース)
-
9
アクセスのハイパーリンク
Access(アクセス)
-
10
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
-
11
「年」と「月」だけの日付の表示方法
Excel(エクセル)
-
12
Accessでテーブル名やクエリ名一覧の抜き出し
Access(アクセス)
-
13
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
14
ACCESS──メインフォームでサブフォームのレコード件数をカウントしたい
Access(アクセス)
-
15
「#エラー」の回避
Access(アクセス)
-
16
Access サブフォームでの選択行の取得
その他(データベース)
-
17
MS_AccessからPDFファイルを開く方法?
PDF
-
18
ラベルとテキストボックスのグループ化を解除したい
Access(アクセス)
-
19
Accessのリンク先を相対パスにしたい
その他(データベース)
-
20
MS Accessでフォームの「開く時」と「読込み時」のイベントの違い
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Access Label 手のマウスポイン...
-
Accessフォームのテキストボッ...
-
ACCESSのテーブルとフォーム
-
accessの自動更新処理をできな...
-
Access 別フォームへの再クエ...
-
Access:フォームをクリ...
-
Accessのフォーム上にレコード...
-
access レコードソースを選択...
-
アクセスでのVLOOKUPの代わりに...
-
Access フォーム上でコンボボッ...
-
Access:yesの時は画像を表示、...
-
ACCESS2013で一部に四角枠をか...
-
ACCESSでテーブルから選択,表示...
-
ACCESSのフォームからデータの...
-
テキストボックスの値をテーブ...
-
Accessのフォームで作業領域を...
-
Accessのフォーム画面について
-
アクセスでの項目追加について...
-
アクセス2007 OrderByの適用は...
-
ACCESS レポートへの表示・非表示
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessのフォーム上にレコード...
-
アクセスのフォームのビューが...
-
アクセスでテーブルの変更内容...
-
選択したチェックボックスのみ...
-
ACCESSのフォームからデータの...
-
Access 別フォームへの再クエ...
-
accessの自動更新処理をできな...
-
ACCESSで入力フォームをHTMLフ...
-
Accessフォームのテキストボッ...
-
Accessのフォームで作業領域を...
-
アクセスでの項目追加について...
-
Access2002 フォームを閉じるた...
-
アクセス 0以外をカウントす...
-
Accessのハイパーリンクのパス...
-
入力途中の入力した値をすべて...
-
Access フォーム上でコンボボッ...
-
ADOでRecordsetオブジェクトを...
-
Accessのフォーム画面について
-
ACCESSでテーブルから選択,表示...
-
帳票フォームに全レコードを表...
おすすめ情報