excel - 在 UserForm.Show 上显示文本框滚动到顶部而没有突出显示的文本
问题描述
我知道如何在UserForm.Show
事件中显示滚动到顶部的文本框,但这涉及方法SetFocus
,如果我设置焦点,它会自动突出显示我不想要的文本。我正在使用用户窗体来显示消息,因为我的消息对于 MsgBox 来说太长了。有没有办法阻止它自动选择文本,同时仍然让框滚动到顶部.Show
?这会滚动到顶部,但尽管值为 0,但仍会选择文本:
Messages.MessageBox.SetFocus
Messages.MessageBox.SelStart = 0
Messages.MessageBox.SelLength = 0
Messages.MessageBox.TabStop = False
非常接近工作,但是您可以滚动的事实并不明显(滚动条仅在您单击文本框时出现),并且当您单击文本框时,它会再次自动滚动到底部。
如果没有办法解决这个问题,对于我正在尝试做的事情(显示长消息)是否有更好的解决方案?我也不能使用标签而不是文本框,消息超出了.Caption
属性的字符限制。
解决方案
我修复了它,但我不会接受这是真正正确的答案,因为我认为它不会解决每个人的问题。我需要允许我的用户在用户表单打开时仍然编辑电子表格,所以当我设置Messages.Show vbModeless
它时修复了所有内容。没有选择任何文本,滚动条可见,并且滚动到顶部。我有一种感觉,因为从技术上讲,焦点不再专门针对用户表单,所以它没有突出显示文本。如果您需要确保在用户表单打开时没有人弄乱电子表格,这不会为您解决问题。
完整代码例如:
Sub ValidateData()
'Do all your stuff
Call Messages_Initialize(msgDict)
Messages.Show vbModeless
End Sub
Sub Messages_Initialize(msgs As Dictionary)
Dim msgString As String
If Not msgs.Exists("success") Then
msgString = "The cells highlighted in red contain invalid values. Please fix before attempting to validate them again."
msgItems = msgs.Items
For i = 0 To msgs.Count - 1
msgString = msgString + vbNewLine + vbNewLine + msgItems(i)
Next i
Else
msgString = msgs("success")
End If
Messages.MessageBox.Text = msgString
Messages.MessageBox.MultiLine = True
Messages.MessageBox.Locked = True
Messages.MessageBox.WordWrap = True
Messages.MessageBox.SetFocus
Messages.MessageBox.CurLine = 0
End Sub
推荐阅读
- java - 如何将我的阵列从 1 行更改为 20x20 正方形?(爪哇)
- bash - 简单的 bash 脚本无法正确 cron
- r - 子矩阵的最大行列式
- html - 试图将带有 html + scss 的站点部署到 gitlab,但不知道该怎么做
- html - Abosultely 位置表在页面末尾被截断
- python - 有没有办法在不使用字典的情况下计算列表中字符串的出现次数?
- r - 等效于 R 中用于 logit 回归的 SignifReg 函数?
- php - 数据库公告表 - 在其中添加可执行代码
- regex - 获取bash中两个特殊字符之间的数字
- javascript - 为什么 NodeJS MySQL 在对正确转义的 JSON 数组进行查询期间添加额外的退格键?