库存问题,仅在有存货时才收货

时间:2019-02-25 09:45:52

标签: excel vba

我正在使用VBA使用Excel进行库存盘点。如果sheet1Receipt)有一个库存项目,然后从sheet2inventory)削减了库存数量,则使用了此代码。但是我的问题是,即使库存已经小于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 :(得分:0)

尝试以下代码(我刚刚更改了循环):

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

答案 1 :(得分:-1)

您的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