我已经在 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
我已经修改了你的代码很多。需要注意的主要事情是我没有在任何地方使用 Activate
或 Select
。直接引用工作簿/工作表/单元格而不是激活它并使用选择是一种更好的风格,如果您想编写无错误的代码,这是首先要学习的事情。
关于vba - 在 Excel 中处理 VBA Find 的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44566569/