• 締切済み

ACCESSのコンボボックスの右側の下向き三角について

教えてください。 ACCESS2000でつくったコンボボックスの高さを大きくしても、右側の下向き三角のところの高さが大きくなりません。これをコンボボックスの高さと同じにすることは出来るのでしょうか? よろしくお願いします。

みんなの回答

noname#22222
noname#22222
回答No.7

s_husky です。 素人ながら、そういう事情でしたら全力を尽くします。 *返信不要ですよ!

noname#22222
noname#22222
回答No.6

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 ・↓でコンボボックスは更新されます。 ・後は、カーソルの移動を阻止する。 ・↓のコードを無効化する。 これで不具合は解消されます。 ※単なるスーツのデザイナーに過ぎない素人プログラマを振り回す発端である三角問題の理由をチョコット聞きたいです。

guratan2005
質問者

お礼

s_huskyさん、お手間をとらせてしまって本当に申し訳ありません。 もともと、今回のコンボボックスの変更は、できるだけ表示を大きくしたいというニーズがあってのことです。 今つくっているシステムを利用される方は、視覚障害者の方です。そういう私もその一人ですが、その方がされているマッサージの治療院の予約管理システムをパソコンでしたいという要望からスタートしました。市販のパッケージではやはり見づらく、使いづらいということで、素人同然の私がつくることとなりました。 始めの提案は、標準的な表示・レイアウトのものでしたが、やはり見づらいというご意見と、操作はほとんどキーボードで行いたいということで、今回の問題が発生しました。(多少はマウスも使うので▼も大きくしたいとのことでした) 出来るだけ要望に沿うようにしたいと思ってはいるのですが、私自身がACCESS、VBAはそれほど経験が無いので、いろいろ皆様に助けていただいております。 s_husky さんには、丁寧にご指導いただき、本当に感謝しております。これに懲りずに、またアドバイスをお願いできれば幸いです。

noname#22222
noname#22222
回答No.5

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に置き換えるべきです。(この場合、格段に動作が速くなります。) ※ただし、質問者の理解し難いコードになると思い中止した次第です。

noname#22222
noname#22222
回答No.4

s_husky です。 補足を拝見しました。 複数列とのこと、また、選択とキー操作に問題あり! うーん! 解決出来ます。 が、複数列に対応しない SetComboBox関数の改良が先決のようです。 大体の方向性のみ示唆しておきます 1、SetComboBox関数---ListBox のRowSource を解析し ComboBox を更新するようにすべきです。 2、キー操作---ScreenオブジェクトでComboBox操作を感知して↓を{Shift}{Down}に変更すればOKです。 3、ComboBox.List(Select行, Select列)を利用することになります。 再回答しますのでお待ち下さい。

guratan2005
質問者

お礼

もう、諦めモードになっていたので、助かります。お手数をお掛けして申し訳ありません。

noname#22222
noname#22222
回答No.3

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 の値を設定することが可能です。 ※参考になれば幸いです。

guratan2005
質問者

お礼

具体的な例を有り難うございました。このことで少し悩んでいました。 このソースでうまく動作しましたが、実行時にコンボボックスを[F4]キーで開いて↓キーを押して選択しようとすると、一回だけ↓キーを押しただけで、その行が選択されたようにメニューが閉じてしまいます。 また、現在は1行に2列の表示をさせており、選択行の2列目の値を取得して、他で使うような仕組みになっています。この方法も、もし分かるようでしたらご教授いただければ助かります。調べてはいるのですが、なかなか見つかりません。 では、よろしくお願い致します。

noname#22222
noname#22222
回答No.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

noname#22222
noname#22222
回答No.1

[挿入]-[AxtiveXコントロールの挿入]-[Microsoft Forms 2.0 ComboBox] これですと、意図通りのコンボボックスです。

guratan2005
質問者

お礼

ご回答ありがとうございました。このAxtiveXコントロールはACCESSの標準のツールボックスにあるコンボボックスとプログラム的には同じソースでは扱えないのですね。例えば、表示する値のセット方法とか、複数列表示のときの選択行の各列データの取得など、ソースはどのように書き換えたらよいのでしょう?