Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Home Premium : Excel 2010)
ListBoxをクリックしたとき、ControlTipTextを設定
投稿日時: 21/09/25 00:37:39
投稿者: shimoichimabu

UserFormに配置したListBoxは3列です。
2列目に商品名を取り込んでいます。
商品名が長い場合があり、2列の幅はかなり広くしています。
商品名が長すぎて途中までしか表示されません。
そこで、長い場合はControlTipTextを利用して、確認しようと思います。
 
Private Sub 商品_ListBox_Click()
    UserForm.商品_ListBox.ControlTipText = UserFormForm.商品_ListBox.Column(1)
    DoEvents
End Sub
 
しかし、上記コードでは商品名をクリックしたのち、マウスをいったんListBox外に移動して
再度、ListBoxにマウスを近づけないと、ControlTipTextが機能しません。
マウスでクリックしたらリアルタイムでControlTipTextにて商品名を表示させたいです。
コードはどのようにしたらよろしいでしようか?

回答
投稿日時: 21/09/25 13:08:13
投稿者: simple

ControlTipTextそのものをコントロールするメソッドなりイベントは無いようですね。
今のレベルで精一杯、ということではないですか?
制約条件として、それを前提にするしかないと思います。
 
# 複数行に表示することもできないようです。vbLfなどは無効のようです。
# 個人的には、横幅を画面一杯使っても表示するのに支障があるなら、
# ネーミングそのものを修正すべきか、なぞと思います(身も蓋もない話で恐縮です)
# ただ、どんな名案が提供されるか知れませんので、他の回答をお待ち下さい。

回答
投稿日時: 21/09/25 18:47:18
投稿者: WinArrow
投稿者のウェブサイトに移動

ControlTipText は、リアルタイムには反映されません。
 
代案を提案します。
 
ラベルコントロールを使います。
但し、ラベルコントロールをリストボックスの前面に表示することはできないので、
リストボックスの下に配置します。
 
コード例

Private Sub ListBox1_Click()
    With Me.ListBox1
        If .ListIndex < 0 Then Exit Sub
        Me.Label1.Caption = .List(.ListIndex, 0)
    End With
        
End Sub

Private Sub UserForm_Click()
    Me.Label1.Top = .Top + .Height
    Me.Label1.Left = .Left
End Sub

回答
投稿日時: 21/09/26 09:41:45
投稿者: WinArrow
投稿者のウェブサイトに移動

前レスで、代案として「ラベルコントロール」を提案しましたが、
ラベルコントロールは、リストボックスコントロールの裏側に潜ってしまうので、
リストコントロールの下側に配置とあいました。
 
しかし、フレームコントロールの中にラベルコントロールを入れると、
工夫すれば、ControlTipTextと同じ効果にすることができます。
 
参考コード

Private Sub ListBox1_Click()
    With Me.ListBox1
        If .ListIndex < 0 Then Exit Sub
        Me.Label1.Caption = .List(.ListIndex, 0)
        Me.Frame1.Visible = True
        Me.Frame1.Top = .Top + (.ListIndex + 1) * .Font.Size
        Application.Wait Now() + TimeValue("0:0:2")
        Me.Frame1.Visible = False
        Me.Repaint
    End With
        
End Sub

Private Sub UserForm_Initialize()
    With Me.ListBox1
        .Clear
        .AddItem "AAAAA"
        .AddItem "BBBBB"
        .AddItem "CCCCC"
    End With
    Me.Frame1.ZOrder 0
    Me.Frame1.Visible = False
End Sub

投稿日時: 21/09/27 12:55:54
投稿者: shimoichimabu

simpleさん、WinArrowさん回答ありがとうございます。
 
>ControlTipTextそのものをコントロールするメソッドなりイベントは無いようですね。
>ControlTipText は、リアルタイムには反映されません。
 
そもそも、出来ないのですね。知らなかったです。
 
>ラベルコントロールは、リストボックスコントロールの裏側に潜ってしまうので、
>フレームコントロールの中にラベルコントロールを入れると、工夫すれば、
>ControlTipTextと同じ効果にすることができます。
フレームコントロールの中に入れれば、いいのですね!!
なるほど、こういう方法があるのですね。
早速、トライしてみます。
 
本当にありがとうございました。