mf1   为显示控件MSFlexGrid名称
db_sjk.mdb  为access数据库
tb_in  为数据表,“商品名称”、“入库数量”、“入库单价”为字段名数据库链接:Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\db_sjk.mdb;Persist Security Info=False求助问题:利用VB代码,根据出库单mf1.TextMatrix(i, 2)的“商品名称”,mf1.TextMatrix(i, 3)的“数量”,从“tb_in 数据表”中,按照商品入库登记先后顺序,统计同名商品的出库总额,在mf1.TextMatrix(i, 4)显示出库总额的计算,是按照商品入库登记先后顺序的“入库数量”*“入库单价”(如图例)

解决方案 »

  1.   

    在使用excel中用vba代码,单纯的以递进的方式查找和计算,可以很轻松的达到效果,分享一下vba的查询和统计代码,不知是否能作参考Sub lqxs() Dim arr, j&, i&, brr, aa, sl, je, zje, ca
      Dim d, k, t, tt
      Set d = CreateObject("scripting.dictionary")
      Sheet1.Activate
      [d4:d20].ClearContents
     arr = Sheet4.[a1].CurrentRegion
        For i = 3 To UBound(arr)
        d(arr(i, 2)) = d(arr(i, 2)) & i & ","
        Next
        k = d.keys: t = d.items
        brr = [a1].CurrentRegion
        For i = 4 To UBound(brr)
        If brr(i, 2) <> "" Then
        sl = brr(i, 3)
        zje = 0
        If d.exists(brr(i, 2)) Then
        tt = d(brr(i, 2))
        tt = Left(tt, Len(tt) - 1)
      
        aa = Split(tt, ",")
        For j = 0 To UBound(aa)
        ca = sl - arr(aa(j), 3)
        If ca < 0 Then
        zje = zje + sl * arr(aa(j), 4)
        Exit For
        Else
        zje = zje + arr(aa(j), 3) * arr(aa(j), 4)
        sl = ca
        End If
        Next
        Else
       
        End If
        Cells(i, 4) = zje
        Else
        Exit For
        End If
        Next
        End Sub
      

  2.   

    那就是入库批次按时间排序,出库的时候
    逐一出库记录拉出来。dim 累加出库金额
    for i= 1 to 出库数量小于入库记录条数
        if 入库记录 i的(入库数量-出库数量) 小于等于出库数量
           出库数量=出库数量-入库记录i的入库数量
           入库记录i标记出库数量=入库数量
           累加出库金额 = 累加出库金额额 + 入库金额
        else
           入库记录i标记出库数量= 入库记录i标记出库数量 + 出库数量
           出库数量=0
           累加出库金额 = 累加出库金额 + 出库数量* 入库记录i的单价
           退出循环
        end if 
    next
    输出累加出库金额