Проблема с запасами, делайте квитанции только при наличии на складе - PullRequest
0 голосов
/ 25 февраля 2019

Я делаю инвентаризацию с помощью Excel, используя VBA.Я использовал этот код, если sheet1 (Receipt) имеет предмет из инвентаря, а затем сократил количество запаса с sheet2 (inventory).Но моя проблема в том, что, хотя запас уже <0, он все равно может сократить запас (так что я получил - в моем складе).Что я хочу, так это если запас из инвентаря равен 0, тогда вы не можете сделать квитанцию ​​с этим предметом, если запас еще есть (> = 1), тогда вы можете добавить этот товар в квитанцию.

Может ли кто-нибудь помочь мнес этим кодом?

Итак, это мой код, я попытался сделать оператор If Else, но он не работает:

Sub printInvoice()
Sheet1.PrintPreview
'sheet1.printout
' we declare 4 variables
Dim rng1, rng2, cell1, cell2, cell3 As Range
Dim lastRow1 As Long
lastRow1 = Sheets("Sheet1").Range("B" & Rows.Count).End(xlUp).Row
Set rng1 = Worksheets("Sheet1").Range("B16:B" & lastRow1)

Dim lastRow2 As Long
lastRow2 = Sheets("Sheet2").Range("A" & Rows.Count).End(xlUp).Row
Set rng2 = Worksheets("Sheet2").Range("B2:B" & lastRow2)

For Each cell1 In rng1
    If IsEmpty(cell1.Value) Then Exit For
        For Each cell2 In rng2
            If IsEmpty(cell2.Value) Then Exit For
                If cell1 = cell2 Then
                    If cell2.Offset(0, 1).Value < 1 Then
                        Debug.Print "Out Of Stock"
                        End If
                    Else
                     cell2.Offset(0, 1) = cell2.Offset(0, 1) - cell1.Offset(0, 1)
                End If
        Next cell2
Next cell1
End Sub

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Попробуйте код ниже (я только что изменил ваши циклы):

For Each cell1 In rng1
    If Not IsEmpty(cell1.Value) Then
        For Each cell2 In rng2
            If cell1 = cell2 Then
                If cell2.Offset(0, 1).Value < 1 Then
                    Debug.Print "Out Of Stock"
                    End If
                Else
                    cell2.Offset(0, 1) = cell2.Offset(0, 1) - cell1.Offset(0, 1)
                End If
            End If
        Next cell2
    End If
Next cell1

Дело в том, что вы преждевременно выходите из цикла с Exit For инструкциями.Т.е. когда первая ячейка на первом листе пуста, вы выходите из цикла и больше ничего не делаете.Я также удалил второй Exit For.

0 голосов
/ 25 февраля 2019

Ваш if заканчивается до вычисления.Так должно быть

   if out of stock 
        show msg  
   else 
        subtract 
   end if

как и так ..

If cell2.Offset(0, 1).Value < 1 Then
      Debug.Print "Out Of Stock"
Else
      cell2.Offset(0, 1) = cell2.Offset(0, 1) - cell1.Offset(0, 1)
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...