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

标签 vba excel textbox

我的用户表单上有几个文本框,其中的值由搜索宏自动填充。 自动填充文本框后,用户就可以选择编辑文本框值。 我想用不同的字体颜色突出显示用户所做的任何更改,以区分自动填充的宏值和用户的宏值。

这将是一种尝试“跟踪更改”的方法,就像在 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。

Edit text (changes highlighted) - Screenshot

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

VBA 中是否有我忽略的跟踪更改功能? 或者这根本无法实现?

感谢您的时间,

乔纳森。

<小时/>

最佳答案

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

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

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

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

关于vba - Excel VBA 用户窗体文本框 - 突出显示以不同字体颜色所做的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27441750/

相关文章:

excel - 验证完成后自动关闭用户表单

c# - 如何同步两个 TextBox 控件的 Text 属性?

ASP.NET 在文本框中显示列表框中选定的项目

ms-access - Access 组合框存储 1 个值,显示另一个值

vba - 根据当前周打开文件

vba - 展平工作表中的循环

excel - 不要在单元格中显示公式

vb.net - 自动滚动到由 backgroundworker 更新的多行文本框的底部

class - 自定义类声明 - 相同的属性过程的定义

excel - 在连接函数中更改日期格式