У меня есть план производства, в котором перечислены производимые модели (столбец A), количество производства (столбец B) и даты производства (столбец C).На основании этих данных я рассчитываю даты ETA (столбец D) для полуразрушенных единиц (столбец E), которые будут превращены в готовые модели.Каждый день производится разное количество разных моделей, но если исходная дата производства одинакова, дата ETA (и, в конечном итоге, номер заказа на поставку) для всех полу-нокдаунов, необходимых в этот конкретный день, также будет одинаковой.
В качестве следующего шага я хочу автоматически прикрепить текущий номер заказа на покупку (счетчик в ячейке J1) к каждому заказу для полуразрушенных единиц - та же дата производства, тот же номер заказа.После изменения даты производства счетчик номера заказа на поставку обновляется +1.
При выполнении мой код сначала проверяет первую свежую строку в столбце G, а затем спрашивает, сколько PO создать.Все работает, за исключением того факта, что даты выходных / праздничных / и т. Д., Которые не указаны в производственном плане, также обновляют текущее ПО.Кроме того, для каждой пропущенной даты производства один из циклов ПО излишне «теряется».
Похоже, проблема в том, что PO и активная дата обновляются в конце моего цикла, независимо от даты, которая фактически указана в списке.
Я попытался исправить это, добавив второе условиек условию IF, после добавления отсутствующих дат и квалификатора («без прод.») в исходный производственный план, но код будет работать только до первого дня без прод.Я также предпочел бы не добавлять пропущенные даты в производственный план, поскольку это добавляет еще один предварительный шаг к процессу.
Другое решение может состоять в том, чтобы добавлять рабочие дни только к начальной дате, когда циклы изначально установлены.Это позволило бы убедиться, что в несуществующие даты циклы не будут потеряны, но я думаю, что счетчик PO будет обновляться и для пропущенных дат.
Sub create_PO_021()
'adds the running PO number
'running count of purchase orders
Dim PO As Integer
PO = Range("J1").Value
'counts total used lines based on SKU#
Dim lastRow As Long
lastRow = Range("A" & Rows.Count).End(xlUp).Row
'searches for first open cell in PO column
Dim rw As Integer
rw = Range("G" & Rows.Count).End(xlUp).Row + 1
'define first production date for which to create a PO
Dim firstDate As Date
'firstDate = Application.InputBox("On what production date do you want to start:", "Enter date")
firstDate = Cells(rw, 3).Value
MsgBox "Starting at production date" & " " & (firstDate)
'define how many POs you want to create
'count from start date to first gap (week-end or similar)
Dim POcycles As Integer
POcycles = Application.InputBox("How many orders do you want to do?", "Enter number")
'calculate last production date for which to create a PO
Dim lastDate As Date
lastDate = firstDate + POcycles
Dim activeDate As Date
activeDate = firstDate
Do Until activeDate = lastDate
For a = 1 To lastRow
If Cells(rw, 3).Value = activeDate Then
Cells(rw, 7).Value = PO + 1
Cells(1, 10).Value = PO + 1
rw = rw + 1
End If
Next a
PO = PO + 1
activeDate = activeDate + 1
Loop
End Sub
Текущий результат для начального PO = 100 и 5Для создания заказа на поставку: неверный результат
Желаемый результат с теми же параметрами: желаемый результат