[英]VBA Excel Find data in table on different sheet
我有兩個工作表,收貨和訂單存檔,兩個工作表上的表頭都相同:sku,qty,患者姓名,產品信息,供應商,L / R,臨床醫生,訂購日期,PO編號,已接收,成本。
我正在嘗試編寫一個從接收頁表開始的宏,並提取在名為“ OrderArchive”的訂購檔案表中找到的所有行,並將該行信息復制到“接收”表中。 但是,我只希望它拉出“已接收”列中指定為“ [Pending]”的那些。
通常,您不希望自己付出任何努力來分發代碼,但是請嘗試一下,讓我知道您是否在尋找它:
'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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.