アプリ版:「スタンプのみでお礼する」機能のリリースについて

Access2003を使用しています。
フォームにハイパーリンク型のテキストボックスを配しました。
そこにハイパーリンクのパスを貼る時の「ハイパーリンクの挿入」の出し方について教えてください。
使っている.mdbの開き方は2種類あります。
(1)立ち上げて最初に表示されるメッセージで「開く」ボタンを押すと、入力しかできない(これの名称がわからないため、言葉の説明ですみません)。
(2)中の設定などをいじりたいときは、ctrl+[開く]で立ち上げています。
このやりかたで立ち上げたときは、フォーム上のメニューバーの挿入に「ハイパーリンク」が出てくるか、ハイパーリンクのテキストボックスにカーソルを置いた状態で右クリックすると「ハイパーリンク」が表示されます。
ところが、(1)の入力しか出来ないやり方で開くと、「ハイパーリンクの挿入」を立ち上げるには、カーソルをハイパーリンク型のテキストボックスにカーソルを置いた状態でショートカットキーのctrl+K を使うしかないようなんです。メニューバーに表示されないのです。
これは、どうしてなのでしょうか?
この問題を解決する方法を教えていただけないでしょうか?
お手数をおかけして申し訳ありませんが、よろしくお願いいたします。

A 回答 (4件)

No.3です。



> メインのテーブルの1レコードに対し、サブフォームでハイパーリンク型の
> テキストボックスを5個作ることにしました。

私も見よう見まねの独学(しかも参考書・解説書の類は読んだことなし、最初の
数年はAccess付属のヘルプのみを頼りにしてのトライ&エラー)なのですが・・・
私がつくるとしたら、「メインフォーム側のテーブルのID」と「サブフォーム側の
テーブル側のID」を一対他の関係にするかな、と思います。
で、サブフォームは帳票型かデータシート型に設定、ですね。


なぜこうするかというと、こうしておけば、「6個目のハイパーリンクが必要になった」
「やっぱりさらに2件追加して」といった要望が発生しないで済むからです。
(逆に、ハイパーリンクの登録が1,2件だけしかないレコードが殆どの場合には、
 データベースのサイズが無駄に大きくなるのを防ぐこともできる(はず(汗))、という
 メリットもあります)

また、ハイパーリンクの登録先となるフィールド・コントロールは1つで済むため、
今回のようにテキストボックスごとに個別にコードを組まなければならない、
といったことも防げるわけです。


ただ、このあたりの扱いは、ある程度慣れてからでないと、かえって難しくなって
しまう面もあるので(→例えば、サブフォーム上のハイパーリンクを、登録した順に
並べるためには、通し番号になるSubIDを新たに設定する必要がある、など)、
とりあえず頭の片隅に置いておいていただければ、と思います。
    • good
    • 0
この回答へのお礼

独学でここまでの力をお持ちとは感心してしまいます。かなり頑張られたのでしょうね。
全レコードに対してハイパーリンクの個数を均一にすることは、メモリの無駄遣い、個数が多い時などに対応できない点から私も避けたかったのですが、このようなやり方しか出来ないのではと思ってしまっていました。
設計のことまでアドバイスを下さってありがとうございました。
幸い、サブフォームのデータが0の状態でしたので作り直しました。
幾つもの質問に懇切丁寧に教えて頂いたのにポイント20点しか差し上げれなくて申し訳なく思います。
本当にありがとうございました。
*皆さま、この方はよい回答者様ですよー!*

お礼日時:2007/11/29 15:52

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だったということになりますね。サブフォームのハイパーリンクのことだけを聞いてしまったので説明がたりなかったですね。
アクセスは、とても難しいのですが、回答者様のように懇切丁寧に教えてくださる方がいらっしゃるおかげで私のようなものでもなんとか今の任務を果たすことが出来ています。心底、感謝しております。
よろしかったら今後もよろしくお願いします。

補足日時:2007/11/27 11:36
    • good
    • 0

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)の方法をご存知でしたら教えていただけないでしょうか?
お手を煩わせて申し訳ありません。
よろしかったらお願いします。

補足日時:2007/11/22 11:00
    • good
    • 0

> 中の設定などをいじりたいときは、ctrl+[開く]で立ち上げています。



「Ctrl」ではなく「Shift」ではないでしょうか?
とりあえず、その前提で回答しますが・・・

1)Shiftキーを押しながら問題のmdbファイルを開く
2)メニューで「ツール(T)→起動時の設定(U)」を選択
3)『起動時の設定』ダイアログが開くので、
 メニューについては『すべてのメニューを表示する(U)』のチェック
 右クリックについては『既定のショートカット メニュー(W)』のチェック
 を、それぞれオンに設定
4)『OK』ボタンをクリック

・・・以上です。

これで、次回からはShiftキーを押さなかった場合でも、全てのメニュー項目が
表示されると思います。

なお、上記の方法だと、メニュー全てが許可されることになりますので、
それでは問題があるという場合は、必要なメニューのみを使用できるように
したメニューバーを作成した上で、『起動時の設定』ダイアログの
『メニューバー(M)』欄にそのメニューバーの名前を設定して下さい。
(ただ、必要なメニュー項目全てを拾い出すのは、かなり面倒なので、
 『すべてのメニューを表示する』のチェックは外して、メニューは現状通り
 制限を掛けたままにして、ハイパーリンクの挿入はコマンドボタンなどで
 対応したほうが楽かと思います)

この回答への補足

ご回答ありがとうございます。
おっしゃるとおりで、Shiftキーの間違いでした。
回答者様に教えていただいた起動時の設定の方法で出来ました。
しかしながら、全てのメニューが表示されるのはやはり危険なので、3番目の方法をとってみたいのですが、設定の仕方がわかりません。
フォーム上にコマンドボタンは作りました。
そこからどうすればいいのでしょうか?
2重の質問で申し訳ありませんが教えていただけないでしょうか?

補足日時:2007/11/21 10:08
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す