2014-05-07 67 views
0

我有一个窗体上的列表框,用户在选择这些记录之前手动选择包含需要添加到表单上输入的总数量的单个数量的行。然后将选定的行发送到打印输出表,以便正确更新实际库存。总计到匹配列表框选择

我不知道如何减去部分数量,当选择的总数高于指定的数量并将差值发送到我的表格。我已经包括了我有什么设置到目前为止...

Private Sub ctrSend_Click() 
Dim intI As Integer 
Dim lst As ListBox 
Dim varItem As Variant 
Dim rst As DAO.Recordset 
Dim qtySum As Variant 
Dim qtyDiff As Variant 
Dim rowMax As Variant 
Dim rowUpdate As Variant 

Set lst = Me![lstShipping] 
Set rst = CurrentDb.OpenRecordset("ShipInv", dbOpenTable) 

With lst 
    If .ItemsSelected.count = 0 Then Exit Sub 
     For Each varItem In .ItemsSelected 
      qtySum = qtySum + .Column(3, varItem) 
     Next 

    If Me.[ctrQtyProd] = qtySum Then 
     MsgBox "Qty Selected EQUALS Qty Being Shipped.", vbOKOnly, "Quantity Confirmation" 
    ElseIf Me.[ctrQtyProd] > qtySum Then 
     MsgBox "Qty Selected LESS THAN Qty Being Shipped, please select more Inventory.", vbOKOnly, "Inventory Confirmation" 
    Else Me.[ctrQtyProd] < qtySum Then 
     qtyDiff = qtySum - Me.[ctrQtyProd] 
     .Column(3, .ItemSelected.count - 1) = .Column(3, .ItemSelected.count - 1) - qtyDiff 

    End If 
End With 

With lst 
    For Each varItem In .ItemsSelected 
     rst.AddNew 
     rst!Order = Me.[ctrSOrder] 
     rst!EntDate = Date 
     rst!ShipDate = Me.[ctrSDate] 
     rst!BIN = .Column(0, varItem) 
     rst!SKU = .Column(1, varItem) 
     rst!Lot = .Column(2, varItem) 
     rst!QtyProd = .Column(3, varItem) 
     rst.Update 
    Next 
End With 
rst.Close 

Set rst = Nothing 
MsgBox "Warehouse Inventory Updated", vbOKOnly, "Update Confirmation" 
End Sub 
+0

您可以扩展问题与一个小例子?我在更正目标时正确如下:**如果qtySum> ctrQtyProd然后减去列表中最后一个选定数量的差异**?因此,如果我在列表中选择数量“2,3和5”并且运输数量=“8”,那么在您的表格中您想要查看数量“2,3和3”。它是否正确? – Yoh

+0

是的,这是正确的,但我昨天晚上都解决了。现在我遇到了DAO对象的问题,它不想在特定的表中查找和更新记录。 –

回答

1

这是我想通了,让它做什么,我想它做的事...

Private Sub ctrSend_Click() 
Dim intI As Integer 
Dim lst As ListBox 
Dim varItem As Variant 
Dim rst As DAO.Recordset 
Dim rst2 As DAO.Recordset 
Dim qtySum As Variant 
Dim qtyDiff As Variant 
Dim rowMax As Variant 
Dim rowUpdate As Variant 
Dim rowBIN As Variant 
Dim sqlShip As String 

Set lst = Me![lstShipping] 
Set rst = CurrentDb.OpenRecordset("ShipInv", dbOpenTable) 
Set rst2 = CurrentDb.OpenRecordset("Storage", dbOpenTable) 
qtySum = 0 
rowMax = 0 

With lst 
    If .ItemsSelected.count = 0 Then Exit Sub 
     For Each varItem In .ItemsSelected 
      qtySum = qtySum + .Column(3, varItem) 
     Next 

    If Me.[ctrQtyProd] = qtySum Then 
     MsgBox "Qty Selected EQUALS Qty Being Shipped.", vbOKOnly, "Confirmation Message" 
    ElseIf Me.[ctrQtyProd] > qtySum Then 
     MsgBox "Qty Selected LESS THAN Qty Being Shipped, please select more Inventory.", vbOKOnly, "Confirmation Message" 
    Else 
     qtyDiff = qtySum - Me.[ctrQtyProd] 
     rowMax = lst.Column(3, lst.ItemsSelected.count) 
     rowUpdate = rowMax - qtyDiff 

     MsgBox "Qty Successfully Updated.", vbOKOnly, "Confirmation Message" 
    End If 
End With 

With lst 
    For Each varItem In .ItemsSelected 
     rst.AddNew 
     rst!Order = Me.[ctrSOrder] 
     rst!EntDate = Date 
     rst!ShipDate = Me.[ctrSDate] 
     rst!BIN = .Column(0, varItem) 
     rst!SKU = .Column(1, varItem) 
     rst!Lot = .Column(2, varItem) 
     rst!QtyProd = rowUpdate 
     rst.Update 
    Next 
End With 
rst.Close 

Set rst = Nothing 
End Sub