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