dポイントプレゼントキャンペーン実施中!

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

A 回答 (7件)

s_husky です。



素人ながら、そういう事情でしたら全力を尽くします。

*返信不要ですよ!
    • good
    • 0

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

・↓でコンボボックスは更新されます。
・後は、カーソルの移動を阻止する。
・↓のコードを無効化する。

これで不具合は解消されます。

※単なるスーツのデザイナーに過ぎない素人プログラマを振り回す発端である三角問題の理由をチョコット聞きたいです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/03/11 21:30

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

s_husky です。



補足を拝見しました。
複数列とのこと、また、選択とキー操作に問題あり!

うーん!
解決出来ます。

が、複数列に対応しない SetComboBox関数の改良が先決のようです。
大体の方向性のみ示唆しておきます

1、SetComboBox関数---ListBox のRowSource を解析し ComboBox を更新するようにすべきです。
2、キー操作---ScreenオブジェクトでComboBox操作を感知して↓を{Shift}{Down}に変更すればOKです。
3、ComboBox.List(Select行, Select列)を利用することになります。

再回答しますのでお待ち下さい。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/03/11 16:49

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 の値を設定することが可能です。

※参考になれば幸いです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/03/11 13:49

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
    • good
    • 0

[挿入]-[AxtiveXコントロールの挿入]-[Microsoft Forms 2.0 ComboBox]



これですと、意図通りのコンボボックスです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/03/09 10:36

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

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