请教,在Excel 中使用VBA查找问题。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教,在Excel 中使用VBA查找问题。相关的知识,希望对你有一定的参考价值。

我的程序中:
Set Rng = Worksheets(2).Range("C:C").Find(UserForm1.TextBox4.Text)
问题是:
当单元格中有55,当我要查询5时,却能提示找到了。
请教:如何修改才能精确查找到5?谢谢。

指定LookAt的值 Variant 类型,可选。可为以下 XlLookAt 常量之一:xlWhole 或 xlPart。

find如果指定lookat的值, 默认lookat是xlpart, 是部分匹配指定值 也可以理解为包含的意思, 如果要完全匹配就要指定lookat选项为xlwhole,
Set Rng = Worksheets(2).Range("C:C").Find(UserForm1.TextBox4.Text,lookat:=xlwhole)
参考技术A 因为55中的确有5,所以无法避免,想要只找5,就不要用find函数,你既然在VBA中写代码,当然可以用instr函数判断了 参考技术B Set Rng = Worksheets(2).Range("C:C").Find(What:=UserForm1.TextBox4.Text,lookat:=xlwhole)

基于Excel中数据库的VBA在word中查找和替换

【中文标题】基于Excel中数据库的VBA在word中查找和替换【英文标题】:VBA Find and Replace in word based on Database in Excel 【发布时间】:2014-02-26 21:52:47 【问题描述】:

我正在寻找一种基于 Excel 中的数据在 Word 文档中查找和替换文本的方法

更具体地说:

A 列 = 我要查找的文本 B 列 = 文本我想将找到的文本替换为

我已经知道 VBA 中的基本查找和替换代码,但我正在努力弄清楚如何做到这一点(跨应用程序)。

谁能帮帮我?

谢谢:)

请求的屏幕截图:

由于显示了潜在的敏感信息,我截取了我的电子表格示例,但这给出了要点。

【问题讨论】:

【参考方案1】:

以下代码需要引用MS Word 14.0 Object Library 或您的任何等效项。如果您不想要早期绑定,则由您决定将其转换为后期绑定。

Sub FindReplaceInWord()

    Dim Wbk As Workbook: Set Wbk = ThisWorkbook
    Dim Wrd As New Word.Application
    Dim Dict As Object
    Dim RefList As Range, RefElem As Range

    Wrd.Visible = True
    Dim WDoc As Document
    Set WDoc = Wrd.Documents.Open("C:\xxx\Doc1.docx") 'Modify as necessary.

    Set Dict = CreateObject("Scripting.Dictionary")
    Set RefList = Wbk.Sheets("Sheet1").Range("A1:A3") 'Modify as necessary.

    With Dict
        For Each RefElem In RefList
            If Not .Exists(RefElem) And Not IsEmpty(RefElem) Then
                .Add RefElem.Value, RefElem.Offset(0, 1).Value
            End If
        Next RefElem
    End With

    For Each Key In Dict
        With WDoc.Content.Find
            .Execute FindText:=Key, ReplaceWith:=Dict(Key)
        End With
    Next Key

    'Enable the following three if you want.
    'WDoc.Save
    'WDoc.Close
    'Wrd.Quit

End Sub

截图:

Word Document (before running code)

Reference List in Excel

Word Document (after running code)

如果这有帮助,请告诉我们。

编辑:

作为参考,代码与您的列表没有问题。我认为这完全是另一回事。看我的截图。

如您所见,使用Debug.Print Key, Dict(Key) 表明它是安全的。我已经修改了上面的代码以更改可能导致此问题的某些内容。 :)

【讨论】:

哇@BK201 谢谢。这与我正在寻找的非常接近!唯一的挫折是这段代码无法处理重复项(我使用的索引将用相同的文本替换一些不同的单词)和Run-Time error '457': This Key is already associated with an element of this collection. 的错误有什么办法吗?我现在在那里弹出了一个“On Error Resume Next”,但这不会注册所需的字典条目。 如果我理解正确的话,列表的左边是要替换的词,右边是替换词,是吗?这基本上意味着您不应该在左侧有重复项,否则它将被替换两次。左侧应该是唯一的,但右侧可以有重复项。或者我在这里错过了什么?你能张贴你的参考列表的截图吗? 上面添加的屏幕截图... A 列完全是唯一的,但 B 列包含一些重复项,其中数据被压缩到 word 文档中。我逐步浏览了显示 MsgBox 的代码,它在哪里为字典捕获数据,据我所知,当在引用的“B 列”中遇到重复项时会发生错误 我想我知道为什么。 :) 您是否偶然提到了整个 A 列?因为如果是这样,它必须将空白单元格也视为键。最好是真正明确并使用适当的“结束”单元格分配范围。此外,将上面的代码更改为检查If Not IsEmpty 而不是Is Not Nothing。这一区别至关重要。这次使用上面修改过的代码再次运行它。 :) 那好多了,谢谢/ 不过还有一个小问题。当我运行它时,我的所有字段都被删除而不会被新文本替换 - 有点。我浏览了它(花了一段时间),我看到文本首先被我的工作表中的数据成功替换并且看起来很好,但是在.Execute FindText:=Key, ReplaceWith:=Dict(Key) 的下一个循环中它再次消失并留空。你能想出一个原因吗?我认为我的范围还可以 - 设置为 .Range("A1:B236")

以上是关于请教,在Excel 中使用VBA查找问题。的主要内容,如果未能解决你的问题,请参考以下文章

VBA怎样取到查找到的单元格位置

在 Excel VBA 中使用查找的连续循环

如何使用 VBA 在 Excel 注释中查找和替换日期格式

如何使用 VBA 宏在 Excel 表中查找条件累积和

在excel中如何用vba来实现查找特定的字符串?

VBA如何模拟CTRL+F 查找效果