我是一个尝试制定策略的初学者。
样本数据 表:成分 字段: FormulaIngredients 字段内容(长文本,纯文本):大头菜,韭菜,胡萝卜,小麦,面粉,黄油,糖,鸡蛋,牛奶,花生酱,玉米地面粗粉,全麦燕麦,白菜,姜黄,丁香,香料,天然牛肉风味,碎牛肉。
表:受限制的表 具有100个要比较的值的列:RestrictedItem 示例列值: 牛奶 烘烤 勺 萝卜 芥末 蒸汽
所需结果:想要突出显示/更改FormulaIngredients字段中与表列中任何〜100值匹配的匹配字体:RestrictedItem。想象一下斜体字是红色的。
大头菜,韭菜,胡萝卜,小麦,面粉,黄油,糖,鸡蛋,牛奶,花生酱,碎玉米粉,全谷物燕麦,白菜,姜黄,丁香,香料,天然牛肉风味,碎牛肉,芥末酱。
或者,将FormulaIngredients的内容复制并替换到新字段,该字段将红色应用于与“表列:RestrictedItem”相匹配的单词。
我已经探索过...
InStr 问题:我不想将信息字符串传递给表单/报表,也不想在乎该子字符串的位置,我想找到所有这些,无论如何都可以。
Dim strTemp, strTempEnd As String
Dim strSearch As String
strSearch = Me.OpenArgs
If InStr(1, Me.Text0, strSearch) <> 0 Then
strTemp = Left(Me.Text0, InStr(1, Me.Text0, strSearch) - 1)
strTempEnd = Mid(Me.Text0, Len(strTemp) + Len(strSearch) + 1)
strTemp = strTemp & "<font color=red>" & strSearch & "</font>"
strTemp = strTemp & strTempEnd
Me.Text0 = strTemp
End If
HTML 问题:该解决方案比较2列数据。我想将一个字段与一个值表进行比较,并在一个Long Text字段中找到多个匹配项。
Public Function MyCompare(c1t As Variant, c2t As Variant)
Dim strResult As String
Dim s As String
Dim i As Integer
Dim bolSame As Boolean
If IsNull(c1t) Or IsNull(c2t) Then Exit Function
bolSame = True
For i = 1 To Len(c2t)
s = Mid(c2t, i, 1)
If Mid(c1t, i, 1) = s Then
If bolSame = False Then
bolSame = True
s = "</strong></font>" & s
End If
Else
If bolSame = True Then
bolSame = False
s = "<font color=red><strong>" & s
End If
End If
strResult = strResult & s
Next
If bolSame = False Then
strResult = strResult & "</strong></font>"
End If
MyCompare = strResult
End Function
VBA 问题:我必须在我的长文本表单字段中输入要比较/搜索的表中的所有100个关键字,而REPLACE是区分大小写的搜索。有没有办法与值表进行比较?
Me.{ControlName}.Value = Replace(Me.{ControlName}.Value _
, "red", "<font color=red>red</font>")
答案 0 :(得分:0)
建议的VBA程序:
打开RestrictedTable的记录集
遍历记录集并在“成分”表上运行UPDATE操作SQL
示例:
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT * FROM RestrictedTable")
Do While Not rs.EOF
db.Execute "UPDATE Ingredients SET FormulaIngredients = Replace([FormulaIngredients], '" & rs!RestrictedItem & "', '<font color=red>" & rs!RestrictedItem & "</font>')"
rs.MoveNext
Loop
我使用静态参数进行了快速测试,并且可以正常工作。
CurrentDb.Execute "UPDATE Ingredients SET FormulaIngredients = Replace([FormulaIngedients], 'carrots', '<font color=red>carrots</font>')"
公式文本是否具有CARROTS
,carrots
,CArRoTs
都无关紧要-都将匹配并替换为carrots
。但是,如果公式文本具有carrot
,则将不匹配。
可能不需要担心部分匹配,但是如果要确保仅更改整个单词,请在搜索前后使用空格并替换字符串:' carrots '
。除非您要突出显示milk
中的buttermilk
。
如果您不想更改原始数据,请首先复制到另一个字段,然后在UPDATE语句中使用该另一个字段。这可以通过在Do While
块之前使用UPDATE语句来完成。
db.Execute "UPDATE Ingredients SET FormulaHighlight=FormulaIngredients"