秘密基地、どこに作った?

お世話になります。
今、Excel_VBAで、あるデータをリスト表示にしているのですが、ながいデータになりますので水平スクロールバーをつけたいと思います。
標準のプロパティにはないので、"SendMessage"APIを使用し、コーティングをしているのですがうまくいきません。

[標準モジュール]
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA"(ByVal hwnd As Long, ByVal wMsg As Long,ByVal wParam As Long, lParam As Long) As Long

[フォーム/ボタンクリックイベント]
Private Sub Form_Load()
List1.AddItem "あああああああああああ"
List1.AddItem "いいいいいいいいいいい"
List1.AddItem "ううううううううううう"

lRtn = SendMessage(List1.hwnd,LB_SETHORIZONTALEXTENT, 240, 0)
            
End Sub

以上を実行すると、上記の"List1.hwnd"のhwndの部分で
エラーになってしまいます。

エラー内容は、「メソッドまたはデータメンバがみつかりません」です。
宜しくお願い致します。

A 回答 (2件)

回答ではないのですが。


VBAのリストボックスはハンドルを持たないので、List1.hWndと書いてもエラーになります。
参考にされたコードはVB6.0のものと思います。
VB6のリストボックスならばハンドルが取れるので、使えるのです。

私もVBAで横スクロールバーを出したいなっと思ったのですがなかなか面倒・・・というかやりかたを見つけ出せず、私の場合リストボックスは使わずにリストビューを使うのが通常になっています。
もし可能ならば、その線もご検討なさってはいかがでしょうか?
リストビューなら縦横自由にスクロールバーは出せるし、列の幅をユーザーが自由に動かせます。
スクロールするときにマウスホイールにも反応します。
回答でなくてすみません。
    • good
    • 0
この回答へのお礼

PCの調子が悪く、返答が遅くなり大変申し訳御座いません!!何とか解決いたしました。有難う御座いました。

お礼日時:2005/12/28 09:58

ハンドルは、


 Dim c As Control
 Set c = ListBox1
 Debug.Print c.[_GethWnd]
って、取り出せると思います。
でも、SendMessage(LB_SETHORIZONTALEXTENT) が効くのかな?
素朴に ColumnWidths を設定するのはどうかしら?
    • good
    • 1
この回答へのお礼

PCの調子が悪く、返答が遅くなり大変申し訳御座いません!!何とか解決いたしました。有難う御座いました。

お礼日時:2005/12/28 09:59

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

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A