Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 库存问题,只有在有库存时才进行收款_Excel_Vba - Fatal编程技术网

Excel 库存问题,只有在有库存时才进行收款

Excel 库存问题,只有在有库存时才进行收款,excel,vba,Excel,Vba,我正在使用VBA使用Excel制作库存库存。如果sheet1收据有库存中的项目,则使用此代码,然后从sheet2库存中削减库存量。但我的问题是,即使库存已经等于1,您也可以将该项目添加到收据中 有人能帮我处理这个代码吗 这是我的代码,我试着做If-Else语句,但不起作用: Sub printInvoice() Sheet1.PrintPreview 'sheet1.printout ' we declare 4 variables Dim rng1, rng2, cell1, cell2, c

我正在使用VBA使用Excel制作库存库存。如果sheet1收据有库存中的项目,则使用此代码,然后从sheet2库存中削减库存量。但我的问题是,即使库存已经等于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

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

尝试以下代码我刚刚更改了您的循环:

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语句过早地退出for循环。即,当第一张工作表中的第一个单元格为空时,您退出循环,不做任何其他操作。我还删除了的第二个出口。

您的if在计算之前结束。因此需要是if缺货显示msg else减去end if为什么在最后一个if中结束if?“没有必要吗?”内森·萨夫说,只有在一条线上。我已将此对账单分散到多行,这就是为什么。它运行但不起任何作用,我仍然可以打印收据。。你知道为什么吗?