我的userform上有几个texbox,其中的值由搜索宏自动填充。 文本框自动填充后,用户可以选择编辑文本框值。 我想强调用户以不同的字体颜色进行的任何更改,以区分自动填充的宏值和用户的。
这将是一种尝试和“跟踪更改”的方式,就像在Microsoft Word中标记和记录所有更改一样。
我已经考虑过拥有两个单独的文本框的想法,一个包含自动填充的值,另一个允许用户以不同的颜色输入,然后执行合并宏以在最后连接两个值。 但是,这不是一个可行的用户界面解决方案,因为用户需要能够即时跟踪实时更改。
我设计的用户界面包括Search,Edit,Save和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进行更改。
我突出显示了用户输入的文字。这将被视为“更改”,并应以不同的颜色突出显示。
我忽略了VBA中的曲目更改功能吗? 或者这根本无法实现?
感谢您的时间,
乔纳森。
答案 0 :(得分:0)
这是一个很好的问题J先生。
但是,我不认为可以在VBA中更改TextBox的部分内容。为此你需要一个RichTextBox,但是,唉,VBA也没有这些。所以看起来你需要另一种策略。
检测是否已编辑文本框(添加或删除文本)将非常简单。在这种情况下,您可以使用一个小指示器来提醒(或更改整个文本颜色?)然后使用注释框或类似弹出窗口显示原始自动填充的文本。这可能是使用MouseOver事件触发的吗?
可能不理想,但它会满足您提醒编辑的标准,允许用户检查已更改的内容并允许编辑更改日志。
答案 1 :(得分:0)
我能看到的唯一方法是使文本框透明,然后使用textbox_change事件检测字符串的更改,并在文本框后面动态生成不同颜色的标签,以突出显示"已更改的文本与最初出现的文本相比。
这似乎可行,但我个人从未尝试过这样的事情。