Прилагане на изчисление към стойността на клетка, когато друга клетка = TRUE

Правя курсова работа, за да попълня електронна таблица за напреднали.

Създавам електронна таблица за търговец на дребно, който продава електронно оборудване. Имам създадени няколко листа с таблици с подробности за клиента, подробности за продукта (с функции за наличност и повторна поръчка), „екран за обработка на поръчки“ и „екран с история на поръчките“. На този екран за обработка на поръчка потребителят може да избере името си от списък, да избере желания продукт от списък и да щракне върху бутон, който регистрира поръчката му.

Когато потребителят щракне, за да регистрира своята поръчка, тя се появява изцяло в листа с хронология на поръчките и не се заменя след всяко щракване. Закъсал съм как да намаля наличността с 1 при всяко закупуване на този продукт.

Текущото ми решение е, че когато дадена поръчка се появи в списъка с хронологията на поръчките (което е след като се щракне върху макроса и детайлите се изтеглят от екрана за обработка на поръчки и се поставят в списъка с хронология на поръчките), името на продукта се сравнява с всички продукти имена в таблицата със списък на продукти и когато достигне съвпадение, показва „ВЯРНО“. Нещо като:

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

Когато постъпи нова поръчка, формулата проверява нейното име и в листа със списъка на продуктите намира стоковия й номер и го намалява с 1. Не мога да разбера как да намаля цифрата с 1, когато моят ред TRUE/FALSE показва TRUE.

РЕДАКТИРАНЕ: Ето няколко снимки на ситуацията, които да я придружават:

Списък с продукти

Списък за покупки


person Aphex    schedule 19.01.2016    source източник
comment
Вижте нещо като offset('prods'!$a$1,match(prod,prod col,0),col num of stock).value = offset('prods'!$a$1,match(prod,prod col,0) ),кол. номер на склад).стойност-1   -  person Nathan_Sav    schedule 19.01.2016
comment
Може би е по-добро решение да имате първоначална физическа наличност, след това плаваща наличност на тази стойност минус поръчките? Само като формула   -  person Nathan_Sav    schedule 19.01.2016


Отговори (1)


Моето предложение е да използвате събитието Worksheet_Change за листа, който съдържа клетките, показващи, че продуктът е променен. Вашата функция преглежда списъка с продукти за TRUE/FALSE, след което намалява броя на продуктите с единица. (Не забравяйте да нулирате флага обратно на FALSE!)

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
person PeterT    schedule 19.01.2016