在VBA的文本框中锁定要编辑的行

在VBA的文本框中锁定要编辑的行,vba,excel,userform,Vba,Excel,Userform,我在用户表单上有一个文本框。当userform显示时,文本框将打开并显示一些 默认值 我希望默认消息的第1行(或某些单词)显示为灰色,并且必须锁定以进行编辑。有可能吗?这与其说是解决方案,不如说是一种变通方法,但它工作得很好(至少在我的电脑上) 常量defaultLine为String=“YourText”&vbcrlf 专用子文本框1_Change() 静态值作为字符串 '如果为空,则设置oldValue 如果oldValue=“”,则 oldValue=defaultLine 如果结束 '禁

我在用户表单上有一个文本框。当userform显示时,文本框将打开并显示一些 默认值


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

这与其说是解决方案,不如说是一种变通方法,但它工作得很好(至少在我的电脑上)

常量defaultLine为String=“YourText”&vbcrlf 专用子文本框1_Change() 静态值作为字符串 '如果为空,则设置oldValue 如果oldValue=“”,则 oldValue=defaultLine 如果结束 '禁用第一行的更改 如果左(TextBox1.Value,Len(defaultLine))defaultLine,则 TextBox1.Value=oldValue 其他的 oldValue=TextBox1.Value 如果结束 端接头 私有子用户表单_初始化() TextBox1.Value=defaultLine 端接头 锁定文本框进行编辑

是。这是可能的

只需将
.Locked
属性设置为
True

在文本框中仅锁定/着色文本的第一行或部分

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

编辑

备选方案:既然第一行文本包含不应编辑的文本,那么为什么不使用
文本框
.controlTiptText
属性在
工具提示
中显示该信息,或者说在将鼠标悬停在
文本框
顶部时显示的
标签

例如(使用
.ControlTipText
属性)

现在,当您将文本悬停在文本框顶部时,将显示
工具提示


你说的“锁定编辑”是什么意思?用户不能删除默认消息,但可以添加更多文本?不能删除,不能添加。实际上,我希望第一行被锁定以进行编辑。我认为这是不可能的。我也提出了一个替代方案。你可能需要刷新页面。你想让我展示一下替代方案是如何工作的吗?不,谢谢。聪明的回答。
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
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