在VBA的文本框中锁定一行以进行编辑

时间:2014-01-14 11:08:16

标签: vba excel-vba userform excel

我在userform上有一个文本框。显示用户窗体时,文本框会打开一些 默认值。

我希望默认消息的Line1(或某些单词)以灰色显示,并且必须锁定才能进行编辑。有可能吗?

2 个答案:

答案 0 :(得分:2)

  

锁定TextBox以进行编辑?

是的。有可能。

只需将.Locked属性设置为True

即可
  

锁定/着色只是textBox中第一行或部分文本?

即可。在VBA中是不可能的。对于部分着色,您可能希望使用RichTextBox代替TextBox,但是您将无法再部分锁定控件。

修改

备用:由于第一行文字包含不应编辑的文字,因此为什么不使用ToolTip .ControlTipText属性在TextBox中显示该信息{1}}或说出当您将鼠标悬停在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

答案 1 :(得分: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