[[20150113184517]] 『TextBox内のスクロールバーを常時表示する方法』(まさ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『TextBox内のスクロールバーを常時表示する方法』(まさ)

お世話になっております。

TextBox内のスクロールバーを表示する方法についてお願いします。

現在は、必要なときにスクロールバーを表示する設定になっておりますが
これを、常時表示する方法はないかと調べています。

調べると「.KeepScrollBarsVisible」がそれらしいようなのですが
使い方がわかりません。

皆さまアドバイスの程よろしくお願い致します。

With TextBox1

  '※垂直スクロールバーを必要なときに表示

      'これを常時表示にしたい。'.KeepScrollBarsVisible ←?      
     ↓
     .ScrollBars = fmScrollBarsVertical    

End With

< 使用 Excel:Excel2010、使用 OS:Windows7 >


KeepScrollBarsVisibleは、フォームのプロパティですねぇ。TextBoxでは使えないです。
Excelの造りが、データが少ないときはバーを消すようになっているので、諦めたほうが良いかも。

それっぽく簡単に実現するには、例えば以下のように、改行だけ先に埋めて、バーを出してしまうのはいかが?

 Private Sub UserForm_Initialize()
    TextBox1.Text = String(20, vbLf)
    TextBox1.SelStart = 0
 End Sub
(???) 2015/01/14(水) 09:35

??? さん

なるほどですね。
ありがとうございました。
解決です(^^ゞ
(まさ) 2015/01/14(水) 10:54


 スクロールバーコントロールを代替で何とかなるかなーと思ったら
 変なエラーが残ってる? → CurLine
 修正プログラム当ててないだけ?
 「それらしい」動きはしますが
 1行目に行けなかったり、表示場所を制御しているわけではないので
 カーソル移動になったり。

    Option Explicit
    Private PreScrlVal As Long
    Private WithEvents TB1 As MSForms.TextBox
    Private WithEvents SB1 As MSForms.ScrollBar
    Private WithEvents LB1 As MSForms.Label
    Private Sub UserForm_Initialize()
        Set TB1 = Me.Controls.Add("Forms.TextBox.1")
        With TB1
            .Top = 10
            .Left = 10
            .Width = 200
            .Height = 100
            .MultiLine = True
        End With
        Set SB1 = Controls.Add("Forms.ScrollBar.1")
        With SB1
            .Top = 10
            .Left = 210
            .Width = 12
            .Height = 100
        End With
        ScrollBarPoint
    End Sub
    '_/_/イベント
    Private Sub SB1_Change()
        TextBoxCnt
    End Sub
    Private Sub SB1_Scroll()
        TextBoxCnt
    End Sub
    Private Sub TB1_Change()
        ScrollBarPoint
    End Sub
    Private Sub TB1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
        ScrollBarPoint
    End Sub
    Private Sub TB1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal Y As Single)
        ScrollBarPoint
    End Sub
    '_/_/アクション
    Private Sub ScrollBarPoint()
        Dim sMin As Long
        Dim ErrChk As Long
        sMin = Int(TB1.Height / 10)
        TB1.SetFocus
        With SB1
            If TB1.LineCount > sMin Then
                .Min = 0
                .Max = TB1.LineCount - 1
                On Error Resume Next
                    Debug.Print TB1.CurLine '★0だとエラー
                    If Err > 0 Then
                        .Value = 0
                    Else
                        .Value = TB1.CurLine
                    End If
                On Error GoTo 0
            Else
                .Min = 0
                .Max = 0
                .Value = 0
            End If
        End With
    End Sub
    Private Sub TextBoxCnt()
        With TB1
            .SetFocus
            .CurLine = Application.Max(SB1.Value, 1) '★0だとエラー
        End With
    End Sub
(稲葉) 2015/01/14(水) 11:21

 新規ブックにて ユーザーフォームを一つ作成してください(UserForm1)。

 コントロールは、コードで作成するので何も配置しないでください。

 Userform1のモジュールに

 '============================================================================
 Option Explicit
 Private WithEvents txt As MSForms.TextBox
 Private scrbar As MSForms.ScrollBar
 Private Sub Txt_Change()
    With txt
       If .LineCount > .Height / .Font.Size Then
          scrbar.Visible = False
       Else
          scrbar.Visible = True
       End If
    End With
 End Sub
 Private Sub UserForm_Initialize()
    With Me
       .Width = 240
       .Height = 250
       Set txt = .Controls.Add("Forms.TextBox.1", "Textbox1")
       With txt
          .Left = 42
          .Top = 27
          .Width = 138
          .Height = 150
          .MultiLine = True
          .ScrollBars = fmScrollBarsVertical
       End With
       Set scrbar = .Controls.Add("Forms.ScrollBar.1", "ScrollBar1")
       With scrbar
          .Left = txt.Left + txt.Width - 12
          .Top = txt.Top
          .Width = 12
          .Height = txt.Height
          .Max = 0
          .Min = 0
       End With
    End With
 End Sub

 標準モジュール

 sub main()
    userform1.show
 end sub

 main を実行して試してみてください。

(ichinose ) 2015/01/15(木) 07:19


 なるほど隠しちゃえばいいわけですね!
 そしたら、スクロールバーコントロールで文字が隠れる分考慮して、
 txtチェンジイベントを
        If .LineCount > .Height / .Font.Size Then
          scrbar.Visible = False
          txt.Width = 138
       Else
          scrbar.Visible = True
          txt.Width = 138 - 12
       End If

 イニシャライズイベントを
        With txt
          〜〜
          .Width = 138 - 12

        With scrbar
          .Left = txt.Left + txt.Width '- 12
 こんな感じに直せば文字が隠れずに済みそうですね!
(稲葉) 2015/01/15(木) 09:08

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.