[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『TextBox内のスクロールバーを常時表示する方法』(まさ)
お世話になっております。
TextBox内のスクロールバーを表示する方法についてお願いします。
現在は、必要なときにスクロールバーを表示する設定になっておりますが
これを、常時表示する方法はないかと調べています。
調べると「.KeepScrollBarsVisible」がそれらしいようなのですが
使い方がわかりません。
皆さまアドバイスの程よろしくお願い致します。
With TextBox1
'※垂直スクロールバーを必要なときに表示
'これを常時表示にしたい。'.KeepScrollBarsVisible ←? ↓ .ScrollBars = fmScrollBarsVertical
End With
< 使用 Excel:Excel2010、使用 OS:Windows7 >
それっぽく簡単に実現するには、例えば以下のように、改行だけ先に埋めて、バーを出してしまうのはいかが?
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.