Microsoft Access ClubAccess超初心者対象ForumAccess初級者対象ForumAccess初・中級者対象ForumAccess VBA Tips ForumDAO、ADO、SQL Forum

     

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 が運営しています

Parallels社PLESKコントロールパネルの操作情報を発信しています。
Parallels社PLESKコントロールパネルの操作情報を発信中・・・。

 

ページの先頭へ 前ページへ戻る