2017-06-15 43 views
2

我已經通過谷歌幾個小時尋找這一答案拖網,所以我很抱歉,如果這似乎是顯而易見的幫您找到,它真的不是我!用VBA的結果,工作在Excel

我想從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,但我有一個問題:

如果項目不存在,它跳到下一個正確。 如果該項確實存在,它會選擇在搜索系列的第一空白單元格,並把它僞裝成搜索結果?我不知道爲什麼!

回答

1

試試這個:

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

+0

我得到「對象不支持此屬性或方法」。我已經通過使用上面編輯的代碼解決了這個小問題。但它仍然不能正常工作。它現在沒有找到準確的搜索結果,這是之前! –

+0

啊是的 - 你也需要包括工作表名稱!我會更新答案 – CallumDA

+0

@PhilipDay更新 - 您將需要編輯頂部的表名,儘管 – CallumDA