我正在使用VBA使用Excel进行库存盘点。如果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
答案 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