Хорошо, ребята, я уверен, что это чертовски просто, но меня это сбило с толку. Два листа внутри рабочей книги У меня есть список инвентаря на первом листе с 272 строками. Этот список имеет 7 столбцов, а в первом столбце перечислены номера деталей (составленные в виде таблицы), в последнем столбце H указаны запасы.

Второй, назовем его «Журналом», состоит из 7 столбцов, где первый столбец содержит раскрывающийся список любого элемента, а второй столбец содержит запись о количестве взятых материалов. 4-й столбец - это поле даты.

Какую формулу я могу вставить, чтобы журнал обновлял основной список всякий раз, когда берется какой-либо предмет, чтобы у нас всегда был точный счет? Было бы хорошо, если бы существовала формула, чтобы, когда кто-то заканчивает ввод строки, она либо автоматически сохраняет строку, либо автоматически сохраняет ее через ~ 2 минуты, либо может нажать кнопку (я уже сделал кнопку с вкладкой «Разработчик»). ) обновить изменения? Просто в основном ищу хороший способ построить правильную функцию подсчета.

Заранее спасибо.

1 ответ1

1

Этот ответ только идет от вашего описания того, что вы делаете, не видя вашей рабочей тетради. Это отправная точка для вас. Сделайте резервные копии вашего файла, прежде чем пытаться это сделать.

На втором листе создайте кнопку справа от последнего столбца на вкладке Разработчик. Если вкладка разработчика недоступна, перейдите сюда, чтобы узнать, как сделать ее видимой.

Щелкните правой кнопкой мыши и выберите « View Code . Откроется окно, и вы увидите что-то подобное на правой панели.

Между двумя строками вставьте следующий код.

Dim intCount As Integer
Dim lRow As Long
Dim LastRow As Long
Dim strPart As String

'Find last row in the log
LastRow = Worksheets("Sheet2").Cells(Worksheets("Sheet2").Rows.Count, "A").End(xlUp).Row

'Get the part number and amount taken from the last row
strPart = Worksheets("Sheet2").Range("A" & LastRow).Value
intCount = Worksheets("Sheet2").Range("B" & LastRow).Value

'Look for a match in the first sheet
lRow = Application.WorksheetFunction.Match(strPart, Worksheets("Sheet1").Range("A:A"), 0)

'Subtract the amount from the count
intCount = Worksheets("Sheet1").Range("H" & lRow).Value - intCount
Worksheets("Sheet1").Range("H" & lRow).Value = intCount

После того, как вы вставили его, вам нужно будет изменить имена листов, если у вас не указаны значения Sheet1 и Sheet2 по умолчанию. Sheet1 - это место, где находится ваш инвентарный список. Sheet2 - это журнал, который забирает из инвентаря.

Закройте окно VBA, щелкните правой кнопкой мыши и выберите « Properties . Измените заголовок на "Рассчитать", или что-то еще описательное, и закройте. НЕ меняйте (name) вверху, иначе ваша кнопка не будет работать.

Нажмите « Design Mode в меню, чтобы активировать кнопку.

Если при обращении к первому столбцу и второму столбцу вы имели в виду столбцы A и B , это позволит найти номер детали в последней строке журнала, затем сопоставить его с номером детали на другом листе, а затем вычесть принятую сумму. из инвентаря.

Он рассчитывает только последний ряд. Это не будет делать какие-либо предыдущие строки. Итак, если уже есть строки или вы забыли нажать кнопку после ввода данных, они будут пропущены. С другой стороны, если вы нажмете кнопку более одного раза, она будет вычитаться столько раз, сколько вы нажмете кнопку.

Это должно привести вас в правильном направлении. Кроме того, вы можете сделать это с помощью кнопки на ленте, а не на листе.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .