我的用户表单上有几个文本框,其中的值由搜索宏自动填充。 自动填充文本框后,用户就可以选择编辑文本框值。 我想用不同的字体颜色突出显示用户所做的任何更改,以区分自动填充的宏值和用户的宏值。
这将是一种尝试“跟踪更改”的方法,就像在 Microsoft Word 中一样,所有更改都会被标记和记录。
我已经考虑过拥有两个单独的文本框的想法,一个包含自动填充的值,另一个允许用户以不同的颜色输入,然后执行合并宏以在最后连接两个值。 但是,这不是一个可行的用户界面解决方案,因为用户需要能够动态跟踪实时更改。
我设计的用户界面由搜索、编辑、保存和 Bin 方法组成。
- 用户首先搜索产品
- 然后用户可以选择启用编辑模式(解锁文本框)
- 保存所做的任何更改(锁定文本框)
- 合并未保存的更改(重新执行初始搜索以返回默认值)
以下是三个子结构:
Private Sub CopyEditimg_Click()
If Menu.CopyValuetxt.Locked = True Then
Menu.CopyValuetxt.Locked = False
Menu.CopyValuetxt.SetFocus
With Menu.CopyValuetxt
.CurLine = 0
End With
Menu.CopyEditimg.Visible = False
Menu.CopySaveimg.Visible = True
Menu.CopyBinimg.Visible = True
Menu.CopyValuetxt.BackStyle = fmBackStyleOpaque
Menu.InfoEditimg.Enabled = False
Menu.CopyEditimg.Enabled = False
Menu.Feature1Editimg.Enabled = False
Menu.Feature2Editimg.Enabled = False
Menu.Feature3Editimg.Enabled = False
Menu.Feature4Editimg.Enabled = False
End If
End Sub
-
Private Sub CopySaveimg_Click()
If Menu.CopyValuetxt.Locked = False Then
Menu.CopyValuetxt.Locked = True
Menu.CopyValuetxt.SetFocus
With Menu.CopyValuetxt
.CurLine = 0
End With
Menu.SearchBox.SetFocus
Menu.CopyEditimg.Visible = True
Menu.CopySaveimg.Visible = False
Menu.CopyBinimg.Visible = False
Menu.CopyValuetxt.BackStyle = fmBackStyleTransparent
SaveChangesMacro
Menu.InfoEditimg.Enabled = True
Menu.CopyEditimg.Enabled = True
Menu.Feature1Editimg.Enabled = True
Menu.Feature2Editimg.Enabled = True
Menu.Feature3Editimg.Enabled = True
Menu.Feature4Editimg.Enabled = True
End If
End Sub
-
Private Sub CopyBinimg_Click()
SetCopy
Menu.CopyValuetxt.Locked = True
Menu.CopyValuetxt.SetFocus
With Menu.CopyValuetxt
.CurLine = 0
End With
Menu.SearchBox.SetFocus
Menu.CopyEditimg.Visible = True
Menu.CopySaveimg.Visible = False
Menu.CopyBinimg.Visible = False
Menu.CopyValuetxt.BackStyle = fmBackStyleTransparent
SaveChangesMacro
Menu.InfoEditimg.Enabled = True
Menu.CopyEditimg.Enabled = True
Menu.Feature1Editimg.Enabled = True
Menu.Feature2Editimg.Enabled = True
Menu.Feature3Editimg.Enabled = True
Menu.Feature4Editimg.Enabled = True
End Sub
-
我认为可能的解决方案包括使用 .SelStart 和 .SelLength 片段。
但是,用户不会简单地将文本添加到自动填充值的末尾。 他们可能会选择对多个位置的现有值进行多次更改,因此我不知道如何针对选择进行更改的每个不同位置有条件地使用 .SelStart。
我已突出显示用户输入的文本。这将被视为“更改”,并应以不同的颜色突出显示。
VBA 中是否有我忽略的跟踪更改功能? 或者这根本无法实现?
感谢您的时间,
乔纳森。
<小时/>最佳答案
这是一个很好的问题,J 先生。
但是,我认为不可能在 VBA 中更改 TextBox 的部分内容。为此,您需要一个 RichTextBox,但遗憾的是,VBA 也没有这些。所以看起来您需要一个替代策略。
检测文本框是否已被编辑(添加或删除文本)将相当简单。在这种情况下,您可以有一个小指示器来提醒这一点(或更改整个文本颜色?),然后使用注释框或类似弹出窗口来显示原始自动填充文本。这可以通过 MouseOver 事件触发吗?
也许并不理想,但它会满足您警告编辑的标准,允许用户检查已更改的内容并允许编译更改日志。
关于vba - Excel VBA 用户窗体文本框 - 突出显示以不同字体颜色所做的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27441750/