2017-04-12 98 views
2

我有兩張工作表,一個標記爲「Assignments」,另一個標記爲「備份」。我試圖實現的是將「分配」信息複製到「備份」以允許輸入新數據。但是,一旦複製到「備份」並且新信息被提供給「分配」,我正在循環遍歷「備份」列A中的每個項目,並將相鄰單元格(B列)複製到相應的單元格值在「作業」中找到。VBA匹配和工作表之間複製單元格值

到目前爲止,這是我,但我不返回任何結果可行代碼:

Option Explicit 
Sub Match() 
Dim RNG As Range 
Dim RI As Range 
Dim WS As Worksheet 
Dim f As Range 
Set WS = ActiveWorkbook.Sheets("Assignments") 
Set RNG = Sheets("Assignments Backup").Range("A2:A400") 
For Each RI In RNG 

With WS 
    'RI.Select 

    Set f = .Columns(1).SpecialCells(xlCellTypeConstants).Find(What:=Cells(Target.Row, 1), LookIn:=xlFormulas, LookAt:=xlWhole) '<--| try finding "Emp #" from Assignments sheet changed cell row column B in referenced sheet ("i.e. "Checklist") column "A" cells not blank cells 

     If f Is Nothing Then '<--| if "Emp #" match not found 



      'MsgBox "I couldn't find " & Cells(Target.Row, 1).Value & " in worksheet 'Checklist'" 
     Else ' <-- if "Emp #" match found 
      .Range("F:F").Rows(f.Row).Value = Range("F:F").Rows(Target.Row).Value '<--| paste "Assigmnents" sheet changed cell row columns "AA:AF" content in corresponiding columns of referenced sheet ("i.e. "Checklist") row where "Emp #" match was found 
     End If 

     End With 
     Next 


End Sub 

對於延遲道歉,我已經上傳的示例文件到我的谷歌驅動器。 [https://drive.google.com/open?id=0B0jgh8FwPVvkWk40TEczYVFjX0k][1]

正如您會注意到列B包含兩張表之間的不同數據。但是,如上所述,我希望備份中B列的信息根據列A中的數據替換分配B列中的內容。我還包括下面的代碼。

編輯 我更新了上面的代碼,因爲我意識到我沒有發佈正確的代碼,我最初嘗試使用。

+0

你可以在之前和之後發佈示例數據(電子表格圖像)嗎? – 0m3r

+0

'對於RNG中的每個RI',則使用'Target.Row' ... ...您的變量名稱會令人困惑/困惑。在請求任何進一步幫助之前,請使用'Option Explicit'並驗證您的變量是否已正確聲明。 –

+0

我嘗試過使用'Option Explicit',但它沒有解決問題。 –

回答

1

我親愛的朋友,你的「代碼」是一團糟 - 這是一個非常有禮貌的方式。我花了半個小時才把它清理乾淨。但那只是爲了讓問題可見。

Sub MatchEntries() 

    Dim WsA As Worksheet      ' Worksheet "Assignments" 
    Dim WsB As Worksheet      ' Worksheet "Assignments Backup" 
    Dim WsC As Worksheet      ' Worksheet "Checklist" 
    Dim Cell As Range       ' Cells in RngA 
    Dim Fnd As Range       ' Find match 
    Dim R As Long, C As Long     ' row and column 

    With ActiveWorkbook 
     Set WsA = .Worksheets("Assignments") 
     Set WsB = .Worksheets("Assignments Backup") 
     Set WsC = .Worksheets("Checklist") 
    End With 

    For Each Cell In WsB.Range("A2:A400") 
     Set Fnd = WsC.Columns(1).Find(What:=Cell.Value, LookIn:=xlFormulas, LookAt:=xlWhole) 
        ' <--| try finding "Emp #" from Assignments sheet changed cell row column B 
        ' in referenced sheet ("i.e. "Checklist") column "A" cells not blank cells 

     If Fnd Is Nothing Then '<--| if "Emp #" match not found 
      MsgBox "I couldn't find " & Cell.Value & " in worksheet 'Checklist'" 

     Else ' <-- if "Emp #" match found 
      R = Fnd.Row 
      For C = 27 To 32    ' columns AA to AF 
       WsA.Cells(R, C).Value = WsC.Cells(R, C).Value 
      Next C 
'   .Range("Fnd:Fnd").Rows(Fnd.Row).Value = Range("Fnd:Fnd").Rows(Target.Row).Value 
      ' <--| paste "Assigmnents" sheet changed cell row columns "AA:AF" content 
      ' in corresponiding columns of referenced sheet ("i.e. "Checklist") row 
      ' where "Emp #" match was found 
     End If 

    Next Cell 
End Sub 

首先,不要打電話給你的子「匹配」。 Match是一個工作表函數,並且不會告訴Excel在遇到「您的」名稱選擇時將執行什麼操作。

其次,你似乎有3張。所以,我宣佈3張。從你的文章中無法判斷這個假設是否正確,但我相信你可以看到邏輯。另外,一旦你有這麼多的變量,你將需要一個有點想象力的名字。你不能打電話給你所有的8個兒子John1,John2,John3等等。同樣的道理,我命名了你的一個範圍Cell和另一個Fnd。你將能夠通過他們的名字來區分他們。

現在您可以看到您正在查看「備份」表(列表WsB)A列中的所有單元格。這看起來不是一個好主意,因爲可能會有很多空白單元格。匹配將爲他們找到。我冒昧地假設你正在查看清單表。如果這是錯誤的,現在很容易更改工作表或列。

如果找到匹配項,您想要做某件事。我無法弄清楚你想做什麼,但是我在那裏寫了代碼,這些代碼應該很容易理解和修改,以便它能夠實現你真正想要的。