vba - 在 Excel 中处理 VBA Find 的结果

标签 vba excel find

我已经在 Google 上搜索了几个小时来寻找这个问题的答案,所以如果你觉得这很明显,我深表歉意,但对我来说却不是!

我正在尝试从 1 个工作簿中获取单元格值,然后在另一个工作簿中搜索它。因此,选择搜索结果行中的一些数据,复制并粘贴到原始工作簿中搜索词行的单元格中。

这是我写的:

Sub AutoCableSize()
'
' AutoCableSize Macro
Dim Row As Integer
Dim CableRef As String
Dim Rng As Integer

Rng = 0
Row = 1
CableRef = ""
Windows("170615-Submains Cable Schedule.xlsx").Activate

For Each Cell In Range("F3:F303"):
On Error Resume Next
    If CableRef = "Finish" Then
    GoTo Finish:
    End If
    CableRef = Range("F" & Row).Value
    Windows("170601-B2-3-HL_BAS_SCH_61_0001.xlsx").Activate
    Columns("A:A").Select
Selection.Find(What:=CableRef, LookIn:=xlValues _
        , LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Select
        Rng = ActiveCell.Row
            If Rng = 1 Then
                GoTo Continue
            End If
        Range("C" & Rng, "D" & Rng).Copy
    Windows("170615-Submains Cable Schedule.xlsx").Activate
    Range("J" & Row).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

Continue:
    Row = Row + 1
Next Cell
Finish:
End Sub

我应该在查找变量中输入什么来搜索准确的结果。我已经使用了 xlWhole,但遇到了问题:

如果该条目不存在,则会正确跳到下一个。 如果该条目确实存在,它会选择搜索系列中的第一个空白单元格,并将其视为搜索结果?!我不知道为什么!

最佳答案

试试这个:

Option Explicit

Sub AutoCableSize()
    Dim r As Range, findRng As Range
    Dim ws1 As Worksheet, ws2 As Worksheet

    Set ws1 = Workbooks("170615-Submains Cable Schedule").Worksheets("Sheet1")
    Set ws2 = Workbooks("170601-B2-3-HL_BAS_SCH_61_0001").Worksheets("Sheet1")

    For Each r In ws1.Range("F3:F303")
        Set findRng = ws2.Columns("A:A").Find(What:=r.Value, LookIn:=xlFormulas _
            , LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
            MatchCase:=False, SearchFormat:=False)

        If Not findRng Is Nothing Then
            findRng.Copy
            ws1.Range("J" & r.Row).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        End If
    Next r
End Sub

我已经修改了你的代码很多。需要注意的主要事情是我没有在任何地方使用 ActivateSelect 。直接引用工作簿/工作表/单元格而不是激活它并使用选择是一种更好的风格,如果您想编写无错误的代码,这是首先要学习的事情。

更多信息请参见:How to avoid using Select in Excel VBA macros

关于vba - 在 Excel 中处理 VBA Find 的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44566569/

相关文章:

Matlab:查找矩阵每一列首次出现的行索引(不使用循环)

C# COM 服务器事件 “lost” 在 Excel 处于编辑模式时引发事件

algorithm - 如何比较两个形状?

excel - 将一个 var 的完整行复制到另一个 var

vba - Selenium VBA 代码在浏览器中粘贴数据

python - Python string.find 使用什么?

vba - 获取所有可能的过滤条件列表

arrays - 将 VBA 数组分配给 Excel 范围的公式时出现奇怪的行为

java - 使用JXL Java从Excel中的第N个元素到最后一个元素

C# Regex - 匹配不以特定单词开头的表达式