【问题标题】:Mechanism to Prevent Inventory Amount for an Item Falling Below Zero防止物品库存量低于零的机制
【发布时间】:2021-07-21 12:59:17
【问题描述】:

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

非常感谢任何帮助。

谢谢。

编辑:

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

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:这是一个旧股票交易跟踪器的快照,我将其用作参考,以创建此库存电子表格。它将使用许多相同的功能。所以....我想使用表列“数量”中与表列“库存(交换:股票代码)”中的值相对应的值,以确定项目的数量是否低于零。

example

【问题讨论】:

  • if inventoryValue < 0 Then?您希望我们如何在不向我们展示您的代码的情况下为您提供帮助?
  • 嗨,雷蒙德。我包含了用于将数据填充到表中的代码。我为遗漏它而道歉。我不确定这会有多大帮助。
  • 不那么简单,如果inventoryValue
  • 您能否说明如何确定库存价值是否低于 0?是否有要检查的单元格/工作表/表格?您的问题和代码都没有解释这一点。我们需要具体信息,如果您能附上表格的屏幕截图和任何相关信息,那就太好了。
  • @isinkzat,你的列标签是什么?哪一列是什么数据。这对我有帮助。

标签: excel vba


【解决方案1】:

根据你的 cmets,试试这个版本:

编辑:

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. 在“Stock (Exchange:Ticker)”列中获取唯一股票列表并汇总相同股票的数量。
  3. 遍历每只股票并检查它是否

【讨论】:

  • 感谢您的帮助,但这不起作用。基本上,我正在寻找是否有任何方法可以识别“Table1”中“Stock(Exchange:Ticker)”列中唯一值的总和,并发出警报让我知道其中任何一个的总和小于零。
  • @isinkzat 已编辑代码,请尝试新版本!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多