Excel VBA 用户窗体文本框 - 以不同字体颜色突出显示所做的更改

3

我在用户表单上有几个文本框,它们的值会被一个搜索宏自动填充。 一旦文本框被自动填充,用户可以选择编辑文本框的值。 我想通过不同的字体颜色突出显示用户所做的任何更改,以区分自动填充的宏值和用户的值。

这将是一种尝试“跟踪更改”的方式,就像在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 中是否有跟踪更改功能,我是否忽略了? 还是无法实现?
感谢您的时间,
乔纳森。
2个回答

0

我能想到的唯一方法是将文本框设置为透明,然后使用textbox_change事件来检测字符串的更改,并动态生成不同颜色的标签放在文本框后面,以“突出显示”已更改的文本与最初存在的文本。

这似乎是可行的,但我个人从未尝试过这样的操作。


0

这是一个很好的问题,J先生。

然而,我认为在VBA中无法修改TextBox的部分内容。你需要使用RichTextBox,但不幸的是,VBA也没有这个功能。所以看起来你需要另一种策略。

检测文本框是否已被编辑(添加或删除文本)将是相当简单的。在这种情况下,您可以有一个小指示器来提醒这一点(或改变整个文本颜色?),然后使用注释框或类似的弹出框来显示原始自动填充的文本。这可能会触发MouseOver事件。

也许不是理想的解决方案,但它将满足您警报编辑、允许用户检查更改内容并编译更改日志的标准。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接