Excel VBA用户表单文本框 - 突出显示以不同字体颜色进行的更改

时间:2014-12-12 10:35:38

标签: excel vba excel-vba textbox

我的userform上有几个texbox,其中的值由搜索宏自动填充。 文本框自动填充后,用户可以选择编辑文本框值。 我想强调用户以不同的字体颜色进行的任何更改,以区分自动填充的宏值和用户的。

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

我已经考虑过拥有两个单独的文本框的想法,一个包含自动填充的值,另一个允许用户以不同的颜色输入,然后执行合并宏以在最后连接两个值。 但是,这不是一个可行的用户界面解决方案,因为用户需要能够即时跟踪实时更改。

我设计的用户界面包括Search,Edit,Save和Bin方法。

  • 用户首先搜索产品
  • 然后,用户可以选择启用编辑模式(解锁文本框)
  • 保存所做的任何更改(锁定文本框)
  • 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进行更改。

Edit text (changes highlighted) - Screenshot

我突出显示了用户输入的文字。这将被视为“更改”,并应以不同的颜色突出显示。

我忽略了VBA中的曲目更改功能吗? 或者这根本无法实现?

感谢您的时间,

乔纳森。


2 个答案:

答案 0 :(得分:0)

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

但是,我不认为可以在VBA中更改TextBox的部分内容。为此你需要一个RichTextBox,但是,唉,VBA也没有这些。所以看起来你需要另一种策略。

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

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

答案 1 :(得分:0)

我能看到的唯一方法是使文本框透明,然后使用textbox_change事件检测字符串的更改,并在文本框后面动态生成不同颜色的标签,以突出显示"已更改的文本与最初出现的文本相比。

这似乎可行,但我个人从未尝试过这样的事情。