我在用户表单上有几个文本框,它们的值会被一个搜索宏自动填充。 一旦文本框被自动填充,用户可以选择编辑文本框的值。 我想通过不同的字体颜色突出显示用户所做的任何更改,以区分自动填充的宏值和用户的值。
这将是一种尝试“跟踪更改”的方式,就像在Microsoft Word中标记和记录所有更改一样。
我已经考虑过使用两个独立的文本框,一个包含自动填充的值,另一个以不同的颜色允许用户输入,然后执行合并宏以在最后合并两个值。 但是,这不是可行的用户界面解决方案,因为用户需要能够即时跟踪更改。
我设计了用户界面包括搜索、编辑、保存和清空方法。
- 用户首先搜索产品
- 然后选择启用编辑模式(解锁文本框)
- 保存他们所做的任何更改(锁定文本框)
- 清空未保存的更改(重新执行初始搜索以返回默认值)
以下是三个子结构:
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 中是否有跟踪更改功能,我是否忽略了? 还是无法实现?
感谢您的时间,
乔纳森。