- 締切済み
ACCESSのコンボボックスの右側の下向き三角について
教えてください。 ACCESS2000でつくったコンボボックスの高さを大きくしても、右側の下向き三角のところの高さが大きくなりません。これをコンボボックスの高さと同じにすることは出来るのでしょうか? よろしくお願いします。
- guratan2005
- お礼率49% (27/55)
- その他(データベース)
- 回答数7
- ありがとう数5
- みんなの回答 (7)
- 専門家の回答
みんなの回答
s_husky です。 素人ながら、そういう事情でしたら全力を尽くします。 *返信不要ですよ!
s_husky です。 ↓でドロップダウンが解除される不具合対策について回答します。 犬の散歩をしながら考えました。 1、フォームでキーイベント取得=Yes にして下さい。 2、Form_KeyDownイベントに次のコードを書いて下さい。 Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Dim ctl As Control If (KeyCode = vbKeyDown Or KeyCode = vbKeyUp) And Screen.ActiveControl.ControlType = 119 Then Set ctl = Screen.ActiveControl ctl.SetFocus KeyCode = 0 End If End Sub ・↓でコンボボックスは更新されます。 ・後は、カーソルの移動を阻止する。 ・↓のコードを無効化する。 これで不具合は解消されます。 ※単なるスーツのデザイナーに過ぎない素人プログラマを振り回す発端である三角問題の理由をチョコット聞きたいです。
s_husky です。 1、3を先行回答します。 ・SetComboBoX関数では、連結列を先頭に移動しています。 ・これで、選択時も通常になります。 ・列数、列幅はリストボックスより1つ増やして下さい。 ・連結列を二重表示したくない場合は0PXで消して下さい。 <フォームのリストボックスの値集合をAX-コンボボックスへコピーするコード> Private Sub コマンド3_Click() SetComboBox Me, "ComboBox", "ListBox", 2 ' 連結列=2 End Sub Option Compare Database Option Explicit Public Function SetComboBox(ByVal frm As Form, _ ByVal cmbBox As String, _ ByVal lstBox As String, _ ByVal LinkColumn As Integer) As Boolean frm.Controls(cmbBox).Clear frm.Controls(cmbBox).List = XferRowSource(frm.Controls(lstBox).RowSource, _ frm.Controls(lstBox).ColumnCount, _ frm.Controls(lstBox).ListCount, _ LinkColumn) End Function Public Function XferRowSource(ByVal strRowSource As String, _ ByVal ColumnCount As Integer, _ ByVal ListCount As Integer, _ ByVal LinkCulumn As Integer) As String() Dim I As Integer Dim J As Integer Dim P As Integer Dim strData As String ReDim Datas(ListCount - 1, ColumnCount + 1) As String For I = 1 To ListCount P = (I - 1) * ColumnCount For J = 1 To ColumnCount strData = CutStr(strRowSource, ";", P + J) If Left$(strData, 1) = """" Then Datas(I - 1, J) = CutStr(strData, """", 2) Else Datas(I - 1, J) = strData End If Next J Datas(I - 1, 0) = Datas(I - 1, LinkCulumn) Next I XferRowSource = Datas() End Function Public Function CutStr(ByVal Text As String, _ ByVal Separator As String, _ ByVal N As Integer) As String Dim strDatas() As String strDatas = Split("" & Separator & Text, Separator, , 0) CutStr = strDatas(N * Abs((N <= UBound(strDatas)))) End Function ※XferRowSourceは、最適化していません。 ※I - 1はKに置き換えるべきです。(この場合、格段に動作が速くなります。) ※ただし、質問者の理解し難いコードになると思い中止した次第です。
s_husky です。 補足を拝見しました。 複数列とのこと、また、選択とキー操作に問題あり! うーん! 解決出来ます。 が、複数列に対応しない SetComboBox関数の改良が先決のようです。 大体の方向性のみ示唆しておきます 1、SetComboBox関数---ListBox のRowSource を解析し ComboBox を更新するようにすべきです。 2、キー操作---ScreenオブジェクトでComboBox操作を感知して↓を{Shift}{Down}に変更すればOKです。 3、ComboBox.List(Select行, Select列)を利用することになります。 再回答しますのでお待ち下さい。
お礼
もう、諦めモードになっていたので、助かります。お手数をお掛けして申し訳ありません。
s_husky です。 <別案> AxtiveX コントロールの ComboBox を利用した場合、<値集合ソース>が利用出来ないことが難点です。 ですから、ListBox を配置して利用する手もあります。 Private Sub Form_Load() Me.ListBox.Requery SetComboBox Me, "ComboBox", "ListBox" End Sub Public Function SetComboBox(ByVal frm As Form, _ ByVal cmbBox As String, _ ByVal lstBox As String) As Boolean Dim I As Integer Dim N As Integer N = frm.Controls(lstBox).ListCount frm.Controls(cmbBox).Clear For I = 1 To N frm.Controls(cmbBox).AddItem frm.Controls(lstBox).ItemData(I - 1) Next I End Function これで、事実上、従来通りに<値集合ソース>を利用してAxtiveX コントロールの ComboBox の値を設定することが可能です。 ※参考になれば幸いです。
お礼
具体的な例を有り難うございました。このことで少し悩んでいました。 このソースでうまく動作しましたが、実行時にコンボボックスを[F4]キーで開いて↓キーを押して選択しようとすると、一回だけ↓キーを押しただけで、その行が選択されたようにメニューが閉じてしまいます。 また、現在は1行に2列の表示をさせており、選択行の2列目の値を取得して、他で使うような仕組みになっています。この方法も、もし分かるようでしたらご教授いただければ助かります。調べてはいるのですが、なかなか見つかりません。 では、よろしくお願い致します。
s_husky です。 Private Sub ComboBox_Change() MsgBox ComboBox.Text End Sub Private Sub コマンド0_Click() ' ' AddItem ' Me.ComboBox.AddItem "AAAA" Me.ComboBox.AddItem "BBBB" Me.ComboBox.AddItem "CCCC" ' ' ListIndex ' Me.ComboBox.ListIndex = 0 ' 0=AAAA、1=BBBB End Sub
[挿入]-[AxtiveXコントロールの挿入]-[Microsoft Forms 2.0 ComboBox] これですと、意図通りのコンボボックスです。
お礼
ご回答ありがとうございました。このAxtiveXコントロールはACCESSの標準のツールボックスにあるコンボボックスとプログラム的には同じソースでは扱えないのですね。例えば、表示する値のセット方法とか、複数列表示のときの選択行の各列データの取得など、ソースはどのように書き換えたらよいのでしょう?
関連するQ&A
- コンボボックスのイベント
コンボボックスで下向き三角をclick(1回目)は [DropDown]イベントで認識でき、リストが表示されるのですが もう一度、コンボボックスで下向き三角をclick(2回目)した時 リストが元に戻るのですが、 このコンボボックスで下向き三角を2回連続でclickした場合 1回目は[DropDown]イベントが発生、2回目は・・・・ 何イベントが発生するのでしょうか? 宜しくお願い申し上げます
- 締切済み
- Visual Basic
- コンボボックスの三角を一時的に消す方法。
こんにちは。 コンボボックスの三角を一時的に消す方法を探しています。 Accessのデータシート形式でのコンボボックスの様にしたいと思っています。 セルをクリックすると三角とリストが表示されて、放すと無くなる様にしたいです。 ご存知の方いらっしゃいましたら宜しくお願い致します。
- 締切済み
- Visual Basic
- accessのコンボボックスをキーボードからの使い方
accessでコンボボックスの右側のところをクリックするとリストが表示されますが,マウスがなくキーボードから表示させたいときにはどうすればよいのでしょうか?
- ベストアンサー
- オフィス系ソフト
- アクセス2000でコンボボックスはどうやって作るの?
アクセス2000を使っています フォームの中にコンボボックスを 入れたいのですが コンボボックスはどうやって作成するのでしょう?
- ベストアンサー
- オフィス系ソフト
- accessコンボボックスで今日の日付のみ選択
accessのフォームにあるコンボボックスで今日の日付のみ選択できるようにしたいです。 コンボボックスの右端の三角の記号をクリックすると今日の日付のみが候補としてでてくるような 設定の方法を教えてください。 値集合ソースには関数を入れることができなくて困っています。 ネットや本でいろいろ調べてみましたが、今日の日付前後3日を表示する方法はあっても 今日の日付のみを選択の候補として設定する方法がわかりませんでした。 また、フォームを開いたときにコンボボックスに今日の日付が自動で出てくる状態にする方法は わかったのですが、常時(コンボボックスの右端の三角をクリックしなくても)今日の日付が見えてしまいます。 コンボボックスの右端の三角をクリックして初めて今日の日付が選択できるようにしたいです。 access初心者です。宜しくお願いします。
- ベストアンサー
- その他MS Office製品
- アクセスでコンボボックスが開きません
アクセスで入力画面を作っているのですが、 マウスを使わずに、エンターキーだけを使って、次のコントロールに飛びたいのですが、コンボボックスにきたときに、コンボボックスのプルダウンが開きません。コンボボックスが開けば、矢印キーとエンターキーだけで操作できるのですが。。 この違いだけで、入力作業は格段に早くなるのですが・・・。 ご存知の方教えてください。よろしくお願いいたします。m(__)m
- ベストアンサー
- その他(プログラミング・開発)
- Excel2000のコンボボックスで...
「Excel2000 SR-1」を使っています。 ファイルを新規作成し、シート上に「コントロール ツールボックス」中から コンボボックスを作成しました。 作成したコンボボックスのプロパティで"オブジェクトを印刷する"にチェックを 入れるとボックス右端にある下向きの三角形まで印刷され、 "オブジェクトを印刷する"のチェックを外すと、そのコンボボックスは 何も印刷されません。 できれば下向きの三角形がない状態で、印刷したいのですが、 どうしたら良いのでしょうか。
- ベストアンサー
- オフィス系ソフト
- ACCESSのコンボボックスについて
ACCESSでコンボボックスを使っているときに たまに入力できなくなってしまう時があり困っています。 例えばA,B,Cという3つのデータを選択できるコンボボックスがあり、 現在、Aが選択されていてBに変更しようとした時に コンボボックスの表示部分が突然空欄(または選択されているのに表示されていない)になってしまいます。 その後、どれを選択してもコンボボックスには何も表示されなくなってしまいます。 この現象が起こるとなぜか同じフォーム内のボタンなどにも不都合が起こるようになってしまいます。 (テキストボックスのデータを削除するボタンがあるのですがおしてもなにも起こらなくなってしまいました) いろいろ試しているのですが全く原因がわかりません。 どのようなところに原因がありそうかなどあれば教えてください。 宜しくお願いします。
- ベストアンサー
- オフィス系ソフト
- Access コンボボックスのリンク?
初心者です。 宜しくお願いします。 Accessのフォームでコンボボックスを2つ配置し、 コンボボックスAで選んだアイテムによって、 コンボボックスBに表示されるアイテムを変えることは出来ますか?
- ベストアンサー
- オフィス系ソフト
- ACCESSのコンボボックスについて
ACCESSのコンボボックスに「012/015/028/125」等が設定されているて、 コンボボックスのプロパティの「入力チェック」は「はい」の設定になっております。 そういった場合、「12」と入力した場合、「012」とすることは可能でしょうか? テキストボックスの場合には、そのテキストボックスの更新後処理で Me.コード = Format(Me.コード, "000") のように記述し変更していたのですが・・・。 コンボボックスでは、「指定した値はリストにありません」と表示され、更新後処理がが実行されません。
- ベストアンサー
- その他([技術者向] コンピューター)
お礼
s_huskyさん、お手間をとらせてしまって本当に申し訳ありません。 もともと、今回のコンボボックスの変更は、できるだけ表示を大きくしたいというニーズがあってのことです。 今つくっているシステムを利用される方は、視覚障害者の方です。そういう私もその一人ですが、その方がされているマッサージの治療院の予約管理システムをパソコンでしたいという要望からスタートしました。市販のパッケージではやはり見づらく、使いづらいということで、素人同然の私がつくることとなりました。 始めの提案は、標準的な表示・レイアウトのものでしたが、やはり見づらいというご意見と、操作はほとんどキーボードで行いたいということで、今回の問題が発生しました。(多少はマウスも使うので▼も大きくしたいとのことでした) 出来るだけ要望に沿うようにしたいと思ってはいるのですが、私自身がACCESS、VBAはそれほど経験が無いので、いろいろ皆様に助けていただいております。 s_husky さんには、丁寧にご指導いただき、本当に感謝しております。これに懲りずに、またアドバイスをお願いできれば幸いです。