2016-01-19 107 views
2

我正在完成一些课程以完成高级电子表格。当另一个单元格=“TRUE”时将计算应用于单元格的值

我正在为销售电子设备的零售商创建电子表格。我有多张表格,包括客户详细信息,产品详细信息(包括库存和重新订购功能),“订单处理屏幕”和“订单历史记录屏幕”。在这个订单处理屏幕上,用户可以从列表中选择他们的名字,从列表中选择他们想要的产品,然后点击一个按钮来注册他们的订单。

当用户单击以注册他们的订单时,它会完全显示在订单历史记录表单中,并且在每次点击后都不会被替换。每当产品被购买时,我都被困在如何减少1。

我目前的解决方案是,当订单出现在订单历史记录列表中(即单击宏并从订单处理屏幕提取详细信息并放入订单历史记录列表中)后,会比较产品名称针对产品列表中的所有产品名称,并在达到匹配时显示“TRUE”。喜欢的东西:

IF <TRUE/FALSE cell> = "TRUE" 
-1 from <stock number cell> 

当一个新的订单进来,通式检查其名称,并在产品列表表,发现其股票数量和减少1.它,我无法弄清楚如何降低当我的TRUE/FALSE行显示TRUE时,数字加1。

编辑:这是形势的一些照片陪它:

Product List

Order purchase list

+0

看像偏移( '刺针'!$ A $ 1,比赛(督促,督促山坳,0),列的股票NUM ).value = offset('prods'!$ a $ 1,match(prod,prod col,0),col number of stock).value-1 –

+0

更好的解决方案可能有一个开始,实际股票,然后是一个浮动股票这个价值减去订单?就像一个公式 –

回答

1

我的建议是使用Worksheet_Change事件包括表示该产品有电池片改变。您的函数查看产品列表以获得TRUE/FALSE,然后将产品计数减1。 (不要忘了标志重置回假的!)

Option Explicit 

Private Sub Worksheet_Change(ByVal Target As Range) 
    '--- example assumes flag indicating product has changed in column B, rows 2-100 
    ' and the product count is on the same row as the flag in column G 
    Dim productChangeFlag As Variant 
    Dim ws As Worksheet 

    Set ws = Target.Parent 
    If Intersect(Target, ws.Range("B2:B100")) Is Nothing Or IsEmpty(Target) Then Exit Sub 

    Application.EnableEvents = False 
    For Each productChangeFlag In Target 
     If WorksheetFunction.IsLogical(productChangeFlag) And productChangeFlag = True Then 
      ws.Cells(productChangeFlag.Row, 7).Value = ws.Cells(productChangeFlag.Row, 7).Value - 1 
      ws.Cells(productChangeFlag.Row, productChangeFlag.Column).Value = False 
     End If 
    Next productChangeFlag 
    Application.EnableEvents = True 

End Sub 
相关问题