vba - 逐个字母比较 2 个相似的字符串并突出显示差异

标签 vba ms-access

我们有 2 个数据库应该有匹配的表。我有一个(生产中)报告,它比较这些字段并以 MS-Access 表单(连续表单样式)将它们显示给用户以进行更正。

这一切都很好,只是很难找到差异。如何设置这些字段的格式以粗体/斜体/着色差异?

"The lazy dog jumped over a brown fox."
"The lazy dog jumped over the brown fox."

(一旦以某种方式突出显示两个相似的文本字段,就更容易看出它们之间的差异)

"The lazy dog jumped over a brown fox."
"The lazy dog jumped over the brown fox. "

由于我们正在讨论 MS Access 中的表单,因此我不抱太大希望。但我知道我不是第一个遇到这个问题的人。有建议吗?

<小时/>

编辑

我已经采用了 Remou 的解决方案。这不是我理想的解决方案,但它“足够好”,特别是因为我没有任何富文本选项。在构建源表的查询中,我使用 space() 添加尾随空格以使两个字段的长度相等。然后我将此代码添加到两个字段的 Click 事件中(另一个字段的 TextA 和 TextB 颠倒):

    Dim i As Integer
    For i = 1 To Len(Me.TextA.Text)
        If Right(Left(Me.TextA.Value, i), 1) <> _
        Right(Left(Me.TextB.Value, i), 1) Then
            Me.TextA.SelStart = i - 1
            Me.TextA.SelLength = Len(Me.TextA.Text)
            Exit For
        End If
    Next i

结果是,当您单击每个字段时,会选择字符串末尾的第一个“不同字母”。我能够如此快速地进行实验、编码和发短信,所以我就这么做了。但我迟早会重新审视这个想法,因为这个概念在几个项目中都很有用。

最佳答案

最后两个版本支持富文本并内置于 ms-access 中。因此,您可以构建一个类似以下的屏幕:

alt text

上面的第三列只是绑定(bind)到一个显示两列之间差异的函数。上面是使用以下代码运行第三列/函数的实际屏幕截图。

代码如下:

bolSame = True
i1 = 1: i2 = 1
   For i = 1 To Len(c2t)
      c1 = Mid(c1t, i1, 1)
      c2 = Mid(c2t, i2, 1)
      s = c2
      If c1 = c2 Then
         If bolSame = False Then
            bolSame = True
            s = "</strong></font>" & s
         End If
         i1 = i1 + 1: i2 = i2 + 1
      Else
         If bolSame = True Then
            bolSame = False
            s = "<font color=red><strong>" & s
         End If
         i1 = i1 + 1: i2 = i2 + 1
      End If
      strResult = strResult & s
   Next

If bolSame = False Then
   strResult = strResult & "</strong></font>"
End If
MyCompare = strResult

我真的不认为这里的问题是生成字符串,真正的难题是当字符串长度不同时。显示两个字符串中的差异远不是一个简单的编码练习。您当然可以从病房中不同的地方进行显示,但突出显示每个差异是一个困难的编码问题。

关于vba - 逐个字母比较 2 个相似的字符串并突出显示差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2858125/

相关文章:

c# - 在 Windows 服务器机器上注册用 C# 编写的 Dll -(安装 C# 类库)

vba - 如何使用 VBA 在 Outlook 中当前打开的窗口中获取对邮件项目的引用?

excel - 有没有办法在 Excel 中的 VBA 格式条件内编写与本地语言无关的公式?

excel - QueryTable.Refresh 导致 OLE 操作不完整;如何完成?

vba - 在不运行任何启动 vba 代码的情况下从命令行打开 MS-Access 数据库?

java - 使用 Java 管理数据库

excel - "Concatenate If"按行的 VBA 用户定义函数

vba - Excel 2010 VBA - 使用变量定义的范围更新图形

java.lang.ClassCastException : java. lang.String 无法转换为 java.lang.Boolean,使用 Table.addRow() 和 Jackcess

ms-access - 更新表单上的复选框时,以连续形式 Access oldValue 以进行控制会在更新之前生成错误 3251