2016-06-28 49 views
0

我有兩個工作表,接收和訂單存檔,它們都有相同標題的表格:sku,qty,患者姓名,產品信息,供應商,L/R,臨牀醫生,日期訂購,採購訂單編號,收貨,成本 。VBA Excel在不同的表中查找表中的數據

我想寫一個宏,開始接收頁表,並拉取訂單歸檔表命名爲「OrderArchive」中找到的所有行,複製到「接收」表上的行信息。不過,我只希望它將在「已收到」列中指定爲「[待定]」的項目拉出來。

+1

'試圖寫一個宏'所以試圖在哪裏? – findwindow

回答

0

平時不喜歡手工編寫代碼,而不必在你結束的任何努力,而是讓這個嘗試,讓我知道,如果這是你在找什麼:

enter image description here

'I named the Receiving tab's table "receivingTable" 
'I named the Order Archive tab's table "orderArchiveTable" 

Dim cnt As Integer 
Dim x As Integer 
Dim y As Integer 
Dim cntPending As Integer 
Dim myArray() As Variant 

'count number of rows that are in orderArchiveTable 
cnt = Range("orderArchiveTable").Rows.Count 

'Scan orderArchiveTable for 'Pending' Orders in the 'Received' column 
cntPending = 0 
For x = 1 To cnt 

    'count number of row that are Pending to use for array size 
    If Range("orderArchiveTable[Received]")(x).Value = "Pending" Then 
     cntPending = cntPending + 1 
    End If 

Next x 


If cntPending = 0 Then Exit Sub 'no pending orders 


'ReDim array for correct size... remember that it starts at zero! NOT 1 
ReDim myArray(cntPending - 1, 9) 

'Fill array with values 
y = 0 
For x = 1 To cnt 
    If Range("orderArchiveTable[Received]")(x).Value = "Pending" Then 
     myArray(y, 0) = Range("orderArchiveTable[sku]")(x).Value 
     myArray(y, 1) = Range("orderArchiveTable[qty]")(x).Value 
     myArray(y, 2) = Range("orderArchiveTable[Patient Name]")(x).Value 
     myArray(y, 3) = Range("orderArchiveTable[Vendor]")(x).Value 
     myArray(y, 4) = Range("orderArchiveTable[L/R]")(x).Value 
     myArray(y, 5) = Range("orderArchiveTable[Clinician]")(x).Value 
     myArray(y, 6) = Range("orderArchiveTable[Date Ordered]")(x).Value 
     myArray(y, 7) = Range("orderArchiveTable[PO Number]")(x).Value 
     myArray(y, 8) = Range("orderArchiveTable[Received]")(x).Value 
     myArray(y, 9) = Range("orderArchiveTable[Cost]")(x).Value 

     'Not sure if you want to delete the rows taken, but you would do this here and subtract 1 from x and cnt 
     Selection.ListObject.ListRows(x).Delete 
     x = x - 1 
     cnt = cnt - 1 

     'go to next row in array 
     y = y + 1 
    End If 
Next x 

'count number of rows that are in receivingTable 
cnt = Range("receivingTable").Rows.Count + 1 

'Dump array into receivingTable 
For x = 0 To UBound(myArray) 
    Set NewRow = Range("receivingTable").ListObject.ListRows.Add(AlwaysInsert:=True) 
    Range("receivingTable[sku]")(cnt + x).Value = myArray(x, 0) 
    Range("receivingTable[qty]")(cnt + x).Value = myArray(x, 1) 
    Range("receivingTable[Patient Name]")(cnt + x).Value = myArray(x, 2) 
    Range("receivingTable[Vendor]")(cnt + x).Value = myArray(x, 3) 
    Range("receivingTable[L/R]")(cnt + x).Value = myArray(x, 4) 
    Range("receivingTable[Clinician]")(cnt + x).Value = myArray(x, 5) 
    Range("receivingTable[Date Ordered]")(cnt + x).Value = myArray(x, 6) 
    Range("receivingTable[PO Number]")(cnt + x).Value = myArray(x, 7) 
    Range("receivingTable[Received]")(cnt + x).Value = myArray(x, 8) 
    Range("receivingTable[Cost]")(cnt + x).Value = myArray(x, 9) 
Next x 
相關問題