在Excel中处理VBA查找的结果

我已经浏览了几个小时的谷歌寻找这个答案,所以我道歉,如果你看起来很明显,这真的不是我!

我试图从1个工作簿中获取单元格值,在另一个工作簿中进行search。 因此,在search结果的行中select一些数据,复制并粘贴到原始工作簿中search项的行中的单元格中。

这是我写的:

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 

我应该在Findvariables中search一个确切的结果。 我已经使用xlWhole,但我有一个问题:

如果条目不存在,则跳到下一个正确的位置。 如果条目确实存在,则selectsearch系列中的第一个空白单元格,并将其作为search结果? 我不知道为什么!

试试这个:

 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 。 直接引用工作簿/工作表/单元格而不是激活它,使用select是一个更好的风格,如果要编写无错代码,这是第一个要学习的东西。

更多这里: 如何避免使用selectExcel VBAmacros