Excel VBA Userform文本框 – 突出显示以不同字体颜色进行的更改

我在我的用户表单上有几个texboxes,有一个searchmacros自动填充的值。 一旦文本框被自动填充,用户就可以select编辑文本框的值。 我想突出显示用户使用不同字体颜色所作的任何更改,以区分自动填充的macros值和用户的值。

这将是一种尝试“跟踪更改”的方式,就像在Microsoft Word中一样,所有更改都被标记和logging。

我已经想到了有两个单独的文本框的想法,一个包含自动填充的值,另一个允许用户input不同的颜色,然后执行合并macros在最后连接两个值。 但是,这不是一个可行的用户界面解决scheme,因为用户需要能够实时跟踪实时更改。

我devise了用户界面,包括search,编辑,保存和分类方法。

  • 用户首先search产品
  • 用户然后可以select启用编辑模式(解锁文本框)
  • 保存所做的任何更改(locking文本框)
  • Bin未保存的更改(重新执行初始search以返回默认值)

以下是三个子结构:

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 

我认为可能的解决scheme将包括使用.SelStart和.SelLength片段。

但是,用户不会简单地将文本添加到自动填充值的末尾。 他们可能会select在多个地方对现有值进行多重更改,所以我不知道如何使用.SelStart有条件地为每个不同的位置进行更改。

编辑文本(突出显示的变化) - 截图

我突出显示了用户input的文字。 这将被视为“变化”,应以不同的颜色突出显示。

VBA中有跟踪更改function,我忽略了吗? 或者这可以简单地实现吗?

欣赏你的时间,

乔纳森。


这是一个很好的问题。

但是,我不认为有可能在VBA中更改文本框的部分内容。 为此,您需要一个RichTextBox,但是,唉,VBA也没有这些。 所以看起来你需要一个替代策略。

检测一个文本框是否被编辑过(文本添加或删除)是相当直接的。 在这种情况下,您可以使用一个小指示器来提醒(或更改整个文本颜色?),然后使用评论框或类似的popup来显示原始的自动填充文本。 这可能是由MouseOver事件触发的?

也许不理想,但它会满足您提醒编辑的标准,允许用户检查已更改的内容,并允许编译更改的日志。

我能看到的唯一方法是使文本框透明,然后使用textbox_change事件来检测对string的更改,并在文本框后面dynamic生成不同颜色的标签,以突出显示已更改的文本与最初存在的文本。

这似乎是可行的,但我个人从来没有尝试过这样的事情。