首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止商品库存量低于零的机制

防止商品库存量低于零的机制
EN

Stack Overflow用户
提问于 2021-07-21 20:59:17
回答 1查看 38关注 0票数 0

我有一个库存电子表格,其中包含一个交易表,在每一列中详细说明库存“收到”进货或“售出”的日期、描述、数量以及它是“收到”还是“售出”。所有这些信息都会通过我创建的宏在单击按钮时输入到表中。有没有一种使用VBA的方法,如果任何一件库存的价值低于零(由于试图出售没有库存的库存),则可以显示Msgbox,并且可以删除输入到transaction表中的最新信息行?

任何帮助都是非常感谢的。

谢谢。

编辑:

下面是我用来将单元格A4:E4中的数据填充到名为“Table1”的表中的代码。

代码语言:javascript
复制
Sub PlaceOrder()

Dim tbl As ListObject
Dim LastRow As Long
Set tbl = ActiveSheet.ListObjects("Table1")
LastRow = tbl.Range.Rows.Count    'get # of last row

With ActiveSheet

'copy and paste A4
.Range("A4").Copy
tbl.Range(LastRow, 1).Offset(1, 0).PasteSpecial Paste:=xlPasteValuesAndNumberFormats

'copy and paste B4
.Range("B4").Copy
tbl.Range(LastRow, 2).Offset(1).PasteSpecial Paste:=xlPasteFormulas

'copy and paste C4:F4
.Range("C4:F4").Copy
tbl.Range(LastRow, 3).Offset(1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats

'clear value in B4:E4
.Range("B4:E4").ClearContents

结尾为

结束子对象

编辑2:这是一个旧的股票交易跟踪器的快照,我正在使用它作为参考,以便创建这个库存电子表格。它将使用很多相同的功能。所以..。我想使用表列"Qty“中与表列"Stock (Exchange:Ticker)”中的值相对应的值来确定商品数量是否低于零。

example

EN

回答 1

Stack Overflow用户

发布于 2021-07-21 23:58:52

根据你的评论,试试这个版本:

编辑:

代码语言:javascript
复制
Sub PlaceOrder()
    With ActiveSheet
        Dim tbl As ListObject
        Set tbl = .ListObjects("Table1")
        
        Dim LastRow As Long
        LastRow = tbl.Range.Rows.Count    'get # of last row

        '====== Copy all content `
        'copy and paste A4
        .Range("A4").Copy
        tbl.Range(LastRow, 1).Offset(1, 0).PasteSpecial Paste:=xlPasteValuesAndNumberFormats

        'copy and paste B4
        .Range("B4").Copy
        tbl.Range(LastRow, 2).Offset(1).PasteSpecial Paste:=xlPasteFormulas

        'copy and paste C4:F4
        .Range("C4:F4").Copy
        tbl.Range(LastRow, 3).Offset(1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats

        'clear value in B4:E4
        .Range("B4:E4").ClearContents
    End With
    
    Dim stockList As Variant
    Dim qtyList As Variant
    stockList = tbl.ListColumns("Stock (Exchange:Ticker)").DataBodyRange.Value
    qtyList = tbl.ListColumns("Qty").DataBodyRange.Value
    
    '=== Start checking inventory of all stocks ===
    Dim inventoryDict As Object
    Set inventoryDict = CreateObject("Scripting.Dictionary")
    Dim i As Long
    
    'Get a unique list of stocks
    For i = 1 To UBound(stockList, 1)
        If inventoryDict.Exists(stockList(i, 1)) Then
            inventoryDict(stockList(i, 1)) = inventoryDict(stockList(i, 1)) + qtyList(i, 1)
        Else
            inventoryDict.Add stockList(i, 1), qtyList(i, 1)
        End If
    Next i
    
    'Loop through each stock and check if it's < 0
    Dim dictItem As Variant
    For Each dictItem In inventoryDict
        If inventoryDict(dictItem) < 0 Then
            'Inventory is negative
            MsgBox "Display Message that inventory is not in stock" & vbNewLine & vbNewLine & _
                    dictItem & ": " & inventoryDict(dictItem)
            tbl.ListRows(tbl.ListRows.Count).Delete
            Exit For
        End If
    Next dictItem
End Sub

这将执行以下操作:

  1. 在新行中输入A4:F4中的数据,并在“股票(交易所:股票代码)”列中输入唯一股票列表中的数据,并对相同股票的数量求和。
  2. 遍历每只股票并检查其是否< 0,显示消息框并删除最后一行(即刚输入的数据)。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68469940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档