2014-01-14 3 views
1

У меня есть текстовое поле на пользовательской форме. Когда отображается пользовательская форма, текстовое поле открывается с по умолчанию значением .заблокировать строку для редактирования в текстовом поле в VBA

Я хочу, чтобы это было так, что строка 1 (или несколько слов) сообщения по умолчанию отображается серым цветом и должна быть заблокирована для редактирования. Является ли это возможным?

+0

Что вы имеете в виду с "заблокировано для редактирования"? Пользователь не может удалить сообщение по умолчанию, но добавить больше текста? – Manu

+0

Не могу удалить, не могу добавить. На самом деле я хочу, чтобы первая строка была заблокирована для редактирования. Я не думаю, что это возможно. –

+0

Я также предложил альтернативу. Возможно, вам придется обновить страницу. –

ответ

2

Блокировка TextBox для редактирования?

Да. можно.

Просто установите .Locked свойства в True

Блокировка/Раскраска только в первой строке или части текста в TextBox?

No. Это невозможно в VBA. Для частичной окраски вы можете использовать RichTextBox вместо TextBox, но затем вы не сможете частично заблокировать управление.

Редактировать

Альтернатива: Поскольку первая строка текста содержит текст, который не должен быть отредактирован, то почему бы не показать, что данные в ToolTip используя .ControlTipText свойство TextBox или сказать Label который отображается, когда вы наводите мышь на верхнюю часть TextBox?

Например (Использование .ControlTipText собственности)

Option Explicit 

'~~> This is what goes in the tooltip. Amend as applicable. 
Const sMsg As String = "Hello World! This is an example of tooltip text" 

Private Sub UserForm_Initialize() 
    Dim sSample As String 
    Dim i As Long 

    For i = 1 To 10 
     sSample = sSample & "Blah Blah" & i & vbNewLine 
    Next i 

    TextBox1.Text = sSample 

    '~~> Set to starting point 
    TextBox1.SelStart = 0 
End Sub 

Private Sub TextBox1_MouseMove(ByVal Button As Integer, _ 
           ByVal Shift As Integer, _ 
           ByVal X As Single, _ 
           ByVal Y As Single) 
    TextBox1.ControlTipText = sMsg 
End Sub 

И теперь при наведении курсора текст на верхней части TextBox, то будет показано ToolTip

enter image description here

0

Это решение гораздо сложнее, чем решение, но оно идеально работает (по крайней мере, на моем компьютере).

Const defaultLine As String = "YourText" & vbcrlf 

Private Sub TextBox1_Change() 
    Static oldValue As String 

    'set oldValue if empty 
    If oldValue = "" Then 
     oldValue = defaultLine 
    End If 

    'disable the change of the first line 
    If Left(TextBox1.Value, Len(defaultLine)) <> defaultLine Then 
     TextBox1.Value = oldValue 
    Else 
     oldValue = TextBox1.Value 
    End If 
End Sub 

Private Sub UserForm_Initialize() 
    TextBox1.Value = defaultLine 
End Sub 
Смежные вопросы