Применение вычисления к значению ячейки, когда другая ячейка = TRUE

Я делаю некоторую курсовую работу, чтобы заполнить продвинутую электронную таблицу.

Я создаю электронную таблицу для продавца, который продает электронное оборудование. У меня есть несколько листов с таблицами сведений о клиенте, сведениями о продукте (с функциями запаса и повторного заказа), «экраном обработки заказа» и «экраном истории заказов». На этом экране обработки заказа пользователь может выбрать свое имя из списка, выбрать желаемый продукт из списка и нажать кнопку, которая регистрирует его заказ.

Когда пользователь нажимает, чтобы зарегистрировать свой заказ, он полностью отображается в листе истории заказов и не заменяется после каждого щелчка. Я застрял в том, как уменьшить запас на 1 каждый раз, когда этот продукт покупается.

Мое текущее решение заключается в том, что когда заказ появляется в списке истории заказов (что происходит после нажатия макроса и получения деталей с экрана обработки заказа и помещения в список истории заказов), название продукта сравнивается со всеми продуктами. имена в таблице списка продуктов, и когда он достигает совпадения, отображается «ИСТИНА». Что-то типа:

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

Когда поступает новый заказ, формула проверяет его название, а на листе со списком продуктов находит его инвентарный номер и уменьшает его на 1. Я не могу понять, как уменьшить цифру на 1, когда моя строка ИСТИНА/ЛОЖЬ отображает ИСТИНА.

РЕДАКТИРОВАТЬ: Вот несколько фотографий ситуации, сопровождающих это:

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

Список покупок


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