No64943.ファンクションキーF4(コンボボックスの一覧表示機能)
| タイトル | : ファンクションキーF4(コンボボックスの一覧表示機能) |
| 記事No | : 64943 |
| 投稿日 | : 2009/01/17(Sat) 04:46 |
| 投稿者 | : ひろし |
OS:ビスタ Access Version:2007
ひろしです。 便利なものをこのサイトで見つけましたが、使い方で一つ質問があります。
このサイトにある 立ち上がるコンボボックス : Access裏技Tips ファンクションキーF4(コンボボックスの一覧表示機能) http://www.accessclub.jp/urawaza/03.html について教えてください。
下記、 '''''''''''''''''''''''''''''''''''''''''
コンボボックスのフォーカス取得時イベントプロシージャを作成します。
Private Sub Con取引先_Enter()
If IsNull(Me.Con取引先) Then ' --- A SendKeys "{f4}", False ' --- B End If End Sub
'''''''''''''''''''''''''''''' 内容は、 ファンクションキー F4を押すとリストが出ます。 それを自動で行うものですが、 既定のビューがデーターシートの場合だと表示しなくなるのはしょうがないのでしょうか? もちろん単票フォームでの場合はリストが表示されます。
よろしくお願いします。
|
| タイトル | : Re: ファンクションキーF4(コンボボックスの一覧表示機能) |
| 記事No | : 64947 |
| 投稿日 | : 2009/01/17(Sat) 14:57 |
| 投稿者 | : hatena |
> OS:ビスタ > Access Version:2007
当方はAC2003なので、動作が違うのかも知れませんが、
> Private Sub Con取引先_Enter() > > If IsNull(Me.Con取引先) Then ' --- A > SendKeys "{f4}", False ' --- B > End If > > End Sub > > '''''''''''''''''''''''''''''' > 内容は、 > ファンクションキー F4を押すとリストが出ます。 > それを自動で行うものですが、 > 既定のビューがデーターシートの場合だと表示しなくなるのはしょうがないのでしょうか?
データシートビューでも上記のコードでリストが表示されます。
ただ、SendKeys は不安定な場合がありますので、DropDownメソッドを 使った方がいいかと思います。
Private Sub Con取引先_Enter()
If IsNull(Me.Con取引先) Then ' --- A Me.Con取引先.DropDown ' --- B End If End Sub
これで、解決できればいいのですが。
------------------------------ hatena Chips http://pub.ne.jp/hatena/ ------------------------------
|
| タイトル | : Re^2: ファンクションキーF4(コンボボックスの一覧表示機能) |
| 記事No | : 64955 |
| 投稿日 | : 2009/01/18(Sun) 02:17 |
| 投稿者 | : ひろし |
ひろしです、hatena さん
できました、ありがとうございます。
動作について、合っているか確認があります、 と言うか、 コメントをお願いしたいのですが.......どうでしょうか?
実際のもの下記、 ''''''''''''''''''''' Private Sub 住所録_No_Enter()
'Me.担当者名.SetFocus ’これはテストでコメントアウト 'Me.住所録_No.SetFocus ’これもテスト
If Not IsNull(Me.住所録_No) Then ' --- A ’値が入っているものに変更(Not) Me.住所録_No.Dropdown ' --- B Debug.Print Me.住所録_No End If
End Sub '''''''''''''''''''''''''''''''''''''
マウスでコンボボックスをクリックすると一覧表示されますが、 キーボードの下ボタン(↓)を押した時は一覧表示されませんでした。 念のため、 Debug.Printでイミディエイト画面で確認すると数字がずらすらっとあるのを確認しました。
コードが通っているのに一覧表示されないのは、 一見フォームがクエリのデータシートのような感じ見えても、 フォームでは、 一つのコントロール?を、再度、同じコントロールに当てているだけと言うことでしょうか?
気がついたことは、 フォームをリプレーすると一覧表示されました。
なにかやったら変わるか?と思い、 「SetFocus」をためしに入れてみましたがaccessが固まってしまい失敗しました。
今後の対策を考えてみました。 リプレーでコンボボックスが一覧表示されるので、 リプレー後、 Bookmarkプロパティ を使ってレコードを移動させるような感じで コードを作るしか無いのでしょうか?
尚、Bookmarkプロパティは、 Bookmark プロパティ : DAOリファレンス - DAO入門講座を探して、 ちょこっと読んでみた程度です。
よろしくお願いします。
|
| タイトル | : Re^3: ファンクションキーF4(コンボボックスの一覧表示機能) |
| 記事No | : 64956 |
| 投稿日 | : 2009/01/18(Sun) 13:46 |
| 投稿者 | : hatena |
> できました、ありがとうございます。 サンプルはコンボボックスにフォーカスが来たときに一覧(ドロップダウンリスト)を表示する というものですが、それはできたのですね。
> マウスでコンボボックスをクリックすると一覧表示されますが、 > キーボードの下ボタン(↓)を押した時は一覧表示されませんでした。
コンボボックスにフォーカスがある時にキーボードでドロップダウンリストを表示するには、 F4 キーか Alt+↓ です。
> コードが通っているのに一覧表示されないのは、 > 一見フォームがクエリのデータシートのような感じ見えても、 > フォームでは、 > 一つのコントロール?を、再度、同じコントロールに当てているだけと言うことでしょうか?
すみません。ちょっと何が言いたいのか分かりかねます。 ↓キーでドロップダウンリストを表示したいのに、できないことをいっているのでしょうか。 > 気がついたことは、 > フォームをリプレーすると一覧表示されました。
フォームをリプレーってなんですか。再クエリのことかな。 再クエリすると先頭のレコードの最初のコントロールに移動しますが、 それが該当のコンボボックスならドロップダウンはします。 > なにかやったら変わるか?と思い、 > 「SetFocus」をためしに入れてみましたがaccessが固まってしまい失敗しました。 > > 今後の対策を考えてみました。 > リプレーでコンボボックスが一覧表示されるので、 > リプレー後、 > Bookmarkプロパティ を使ってレコードを移動させるような感じで > コードを作るしか無いのでしょうか?
結局、フォーカスが来たときにドロップダウンする以外に何がお望みなのでしょうか。
|
| タイトル | : Re^4: ファンクションキーF4(コンボボックスの一覧表示機能) |
| 記事No | : 64957 |
| 投稿日 | : 2009/01/18(Sun) 15:35 |
| 投稿者 | : ひろし |
ひろしです。
> サンプルはコンボボックスにフォーカスが来たときに一覧(ドロップダウンリスト)を表示する > というものですが、それはできたのですね。 できています。 > コンボボックスにフォーカスがある時にキーボードでドロップダウンリストを表示するには、 > F4 キーか Alt+↓ です。 前の説明を読み返してみて、足りなかった説明がありました。 コンボボックスをマウスでクリックすると間違いなく一覧表示されます。 そのままの状態から、レコードセレクタにコントロールを移し、 ↓キーを押していくとレコードが一行ずつ下に移動していくと思います。
コンボボックスからレコードセレクタにコントロールが移っているのですが、 '''''''''''' If Not IsNull(Me.住所録_No) Then Me.住所録_No.Dropdown ' --- B Debug.Print Me.住所録_No End If '''''''''''''''' Debug.Print Me.住所録_Noのコードが通っているのに なんで一覧表示されないのかな?と思っています。
> フォームをリプレーってなんですか。再クエリのことかな。 > 再クエリすると先頭のレコードの最初のコントロールに移動しますが、 > それが該当のコンボボックスならドロップダウンはします。 はい、その通りです。
> 結局、フォーカスが来たときにドロップダウンする以外に何がお望みなのでしょうか。
クエリのサブデータシートと同じ感じで、 クエリの「+」ボタンを押すと「リンク子フィールド」のリストが表示される、「-」を押すとリストが閉じるかと思います。 これをフォームでやりたいと言うか、同じようなものを作りたい。
フォームの話しになります、 クエリの「+」ボタンがコンボボックスに変わって、コンボボックスの一覧表示がされる、これはできました。
以下ができないところです。 Me.住所録_No.Dropdownで自動に一覧表示されるので、 レコードセレクタにコントロールをもって行き、↑キー、↓キーで、その都度レコードが移った時、 該当のコンボっボックスの一覧表示が出る。
|
| タイトル | : Re^5: ファンクションキーF4(コンボボックスの一覧表示機能) |
| 記事No | : 64958 |
| 投稿日 | : 2009/01/18(Sun) 22:06 |
| 投稿者 | : hatena |
> > コンボボックスにフォーカスがある時にキーボードでドロップダウンリストを表示するには、 > > F4 キーか Alt+↓ です。 > 前の説明を読み返してみて、足りなかった説明がありました。 > コンボボックスをマウスでクリックすると間違いなく一覧表示されます。 > そのままの状態から、レコードセレクタにコントロールを移し、 > ↓キーを押していくとレコードが一行ずつ下に移動していくと思います。
レコードセレクタをクリックしたら、コンボボックスからフォーカスは外れます。 コンボボックスのリスト表示を出来るのは、フォーカスがあるときのみです。 よって、 > Debug.Print Me.住所録_Noのコードが通っているのに > なんで一覧表示されないのかな?と思っています。
当然、一覧表示はできません。
> クエリのサブデータシートと同じ感じで、 > クエリの「+」ボタンを押すと「リンク子フィールド」のリストが表示される、「-」を押すとリストが閉じるかと思います。 > これをフォームでやりたいと言うか、同じようなものを作りたい。
メインフォームにサブフォームを埋め込んで、メインフォームをデータシートビューにすれば、 サブフォームは、サブデータシートとして表示されます。
> Me.住所録_No.Dropdownで自動に一覧表示されるので、 > レコードセレクタにコントロールをもって行き、↑キー、↓キーで、その都度レコードが移った時、 > 該当のコンボっボックスの一覧表示が出る。
VBA で下記のようにすれば可能です。
前回の回答のコードに加えて、フォームのキークリック時のイベントプロシージャに、
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Select Case KeyCode Case vbKeyDown KeyCode = 0 If Not Me.NewRecord Then DoCmd.GoToRecord , , acNext Me.住所録_No.SetFocus Case vbKeyUp KeyCode = 0 If Me.CurrentRecord > 1 Then DoCmd.GoToRecord , , acPrevious Me.住所録_No.SetFocus End Select End Sub
フォームの「キーボードイベント取得」を「はい」にしておいてください。
------------------------------ hatena Chips http://pub.ne.jp/hatena/ ------------------------------
|
| タイトル | : Re^6: ファンクションキーF4(コンボボックスの一覧表示機能) |
| 記事No | : 64978 |
| 投稿日 | : 2009/01/19(Mon) 23:44 |
| 投稿者 | : ひろし |
"ひろしです
Access2007の仕様の違いか分かりませんが、だいたい思い通りになりました。 ありがとうございます!!
> レコードセレクタをクリックしたら、コンボボックスからフォーカスは外れます。 > コンボボックスのリスト表示を出来るのは、フォーカスがあるときのみです。 > > 当然、一覧表示はできません。 投稿前は分からず、 ここのコメントを読んでみて、参考になりました。
> メインフォームにサブフォームを埋め込んで、メインフォームをデータシートビューにすれば、 > サブフォームは、サブデータシートとして表示されます。 最初にこれを考えましたが、 フォームが分割になり、個々の表示が狭く(画面の上下)なると思い、 クエリのサブデータシート見たいにできたらいいな?と思って投稿しました。
" "> VBA で下記のようにすれば可能です。 > > 前回の回答のコードに加えて、フォームのキークリック時のイベントプロシージャに、 > > Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) > Select Case KeyCode > Case vbKeyDown > KeyCode = 0 > If Not Me.NewRecord Then DoCmd.GoToRecord , , acNext > Me.住所録_No.SetFocus > Case vbKeyUp > KeyCode = 0 > If Me.CurrentRecord > 1 Then DoCmd.GoToRecord , , acPrevious > Me.住所録_No.SetFocus > End Select > End Sub > > フォームの「キーボードイベント取得」を「はい」にしておいてください。
" "
先に、投稿後の返信には満足しています、、、ありがとうございます。
現状報告です、 「↓」キーを連続で押し続けると、時たま、画面がチカチカして一覧表示されているような感じですが、 Me.住所録_No の一覧表示が確認できないくらい速さで表示されているのでしょうか??? ※ 一覧表示されるはずのリストが必ずある状態になっていますが、 高速で一覧表示されているのかなと思っています、、、たぶん。
何度も試したのですが、 押し続けている下キーを放した時は、一覧表示がでません。 「↓」キーを一回一回クリック(単発)しても、一覧表示がでません。 レコードセレクタを一回一回クリクすると一覧表示ができます。 以上。
でも、 これで十分使えるので問題はありません。 ありがとうございます。
記事を修正する、解決マーク忘れました。
|
| タイトル | : Re^7: ファンクションキーF4(コンボボックスの一覧表示機能) |
| 記事No | : 64979 |
| 投稿日 | : 2009/01/19(Mon) 23:56 |
| 投稿者 | : hatena |
> > メインフォームにサブフォームを埋め込んで、メインフォームをデータシートビューにすれば、 > > サブフォームは、サブデータシートとして表示されます。 > 最初にこれを考えましたが、 > フォームが分割になり、個々の表示が狭く(画面の上下)なると思い、 > クエリのサブデータシート見たいにできたらいいな?と思って投稿しました。
上記の方法で、クエリと同じサブデータシート表示になるはずなんですが。
当方は、AC2003なので、AC2007 では違うのかな。
http://office.microsoft.com/ja-jp/access/HP052362161041.aspx
------------------------------ hatena Chips http://pub.ne.jp/hatena/ ------------------------------
|
| タイトル | : Re^8: ファンクションキーF4(コンボボックスの一覧表示機能) |
| 記事No | : 64980 |
| 投稿日 | : 2009/01/20(Tue) 00:36 |
| 投稿者 | : ひろし |
ひろしです。
> 当方は、AC2003なので、AC2007 では違うのかな。 > > http://office.microsoft.com/ja-jp/access/HP052362161041.aspx リンク先を見ました。
「サブデータシートは、任意のテーブル、クエリ、またはフォームに追加できます」 とありました!!!!!!、、、?。
フォームのサブフォームのデータシート(型)で、 サブデータシートが使えると言うことでしょうか、、、、? でも、 書いてありますね!!、、、、、知りませんでした!!
ちょっと、リンク先の情報を参考に調べてみます。
解決済みとチェックを入れてしまっていますが、 このままでよろしくお願いします。
|
このAccessフォーラム過去ログ集は、Microsoft Access Club が運営しています

|