2017-05-07 31 views
-3

表1持有工單的當前狀態
表2持有最近更改的工作訂單和任何新的工作訂單的完整列表VBA:使用一個Excel工作表,以插入和/或更新其他

兩個片材具有與數據中的列A中的相同的格式,以L.

我需要使用表2,以更新表保持1.工作訂單具有被在列A舉行的唯一標識符的完整列表的每張紙。

一般條款:
處理工作表2的每一行。 如果工作表1中存在匹配的工單,請更新它。 如果工作表1中不存在匹配的工單,則將其作爲工作表1中的新行添加。

在列A中是工單號。

+3

如果你不知道如何使用'iferror(application.match(...))',那麼只需將sheet2的所有內容複製到sheet1的頂部並刪除重複項。這個問題已被問及無數次回答。寫一些代碼,如果你有問題,回來,我們會幫你解決它。 – Jeeped

+0

這個問題沒有明確的措辭。我認爲你需要這樣:sheet1保存所有工作訂單的當前狀態,sheet2保存新的工作訂單和對現有訂單的更改。因此,您需要處理這些更改/添加並相應更新sheet1,其中每個工作訂單的標識符都保留在第一列中。 –

+0

是的,那就是我想要做的。 –

回答

0

可能有更好的方法來做到這一點,正如@Jeeped所說,這可能以前(但我找不到)。希望以下是你需要的。我已經包含了很多評論,以幫助您瞭解代碼並在需要時對其進行修改。

Sub ProcessDelta() 

    'Define the worksheets 
    Dim shtDelta As Worksheet 
    Dim shtMaster As Worksheet 
    Set shtDelta = Worksheets("Sheet2") 
    Set shtMaster = Worksheets("Sheet1") 

    Dim intDeltaStartRow As Integer 
    'I assume there is a header row in the Delta sheet, if not, set this to 1 
    intDeltaStartRow = 2 

    Dim intMaxEverWorkOrders As Integer 
    'One of several ways to find the first blank row in the Master 
    'sheet is to start somewhere beyond the data and move up 
    'we use this later 
    intMaxEverWorkOrders = 1000000 

    Dim cellDeltaWorkOrder As Range 
    'Work order from Delta to be processed 
    Set cellDeltaWorkOrder = shtDelta.Cells(intDeltaStartRow, 1) 

    'For the destination to which we copy 
    Dim cellMasterWorkOrder As Range 

    Dim boolNewWorkOrder As Boolean 
    'Default to assume it's not a new workorder 
    boolNewWorkOrder = False 

    'We'll work from top to bottom in the Delta sheet. When the cell is blank we've finished 
    While cellDeltaWorkOrder.Value <> "" 

     'We're going to search for the "current" workorder from the Delta in the Master. 
     'If it's not there, we'll get an error. So we use "On Error" to handle it 
     On Error GoTo ErrorStep 
     'If there is no error, after the following line cellMasterWorkOrder will be the cell containing the matching workorder 
     Set cellMasterWorkOrder = shtMaster.Cells(WorksheetFunction.Match(cellDeltaWorkOrder.Value, shtMaster.Cells(1, 1).EntireColumn, 0), 1) ' 

     'Reset error handling so any other errors are reported normally 
     On Error GoTo 0 

     'Check whether there was an error, if there was this was a new Workorder and needs to go at the end, so set the target cell accordingly 
     If boolNewWorkOrder = True Then 
      Set cellMasterWorkOrder = shtMaster.Cells(intMaxEverWorkOrders, 1).End(xlUp).Offset(1, 0) 
      boolNewWorkOrder = False 'reset this so we can check again for the next row to be processed 
     End If 

     'Output Row into Master 
     cellMasterWorkOrder.EntireRow.Value = cellDeltaWorkOrder.EntireRow.Value 

     'Move to next row in the Delta 
     Set cellDeltaWorkOrder = cellDeltaWorkOrder.Offset(1, 0) 
    Wend 

    'We don't want to run the error step at this point so .. 
    Exit Sub 

ErrorStep: 
    'It wasn't found, which throws an error, and so it needs added as a new row. 
    boolNewWorkOrder = True 
    Resume Next 

End Sub 
+0

這有效嗎@ R.Green? –

相關問題