好吧,伙计们,我相信这很简单,但它让我感到困惑。工作簿中有两张工作表,第一张工作表上有一份库存清单,有 272 行。此列表有 7 列,第一列列出零件编号(制成表格),最后一列 H 有库存数量。
第二张表,我们称之为日志表,由 7 列组成,其中第一列允许任何项目的下拉列表,第二列包含所取数量的字段条目。第 4 列是日期字段。
我可以插入什么公式来让日志表在每次取走物品时更新主列表,以便我们始终获得准确的计数?如果有一个公式,当有人完成他们的行输入时,行会自动保存或在约 2 分钟后自动保存,或者他们可以按下按钮(我已经用“开发人员”选项卡制作了一个按钮)来更新更改,那就太好了?主要只是寻找一种构建适当计数函数的好方法。
提前致谢。
答案1
此答案仅基于您对所做工作的描述,无需查看您的工作簿。它只是您的起点。在尝试此操作之前,请先备份您的文件。
在第二张工作表上,在“开发人员”选项卡的最后一列右侧创建一个按钮。如果开发人员选项卡不可用,到这里学习如何让它可见。
右击按钮并选择View Code
。将打开一个窗口,您将在右侧窗格中看到类似以下内容。
在两行之间粘贴以下代码。
Dim intCount As Integer
Dim lRow As Long
Dim LastRow As Long
Dim strPart As String
'Find last row in the log
LastRow = Worksheets("Sheet2").Cells(Worksheets("Sheet2").Rows.Count, "A").End(xlUp).Row
'Get the part number and amount taken from the last row
strPart = Worksheets("Sheet2").Range("A" & LastRow).Value
intCount = Worksheets("Sheet2").Range("B" & LastRow).Value
'Look for a match in the first sheet
lRow = Application.WorksheetFunction.Match(strPart, Worksheets("Sheet1").Range("A:A"), 0)
'Subtract the amount from the count
intCount = Worksheets("Sheet1").Range("H" & lRow).Value - intCount
Worksheets("Sheet1").Range("H" & lRow).Value = intCount
粘贴后,如果您的工作表名称不是默认的,则需要更改工作表名称Sheet1
。Sheet1Sheet2
是您的库存清单。Sheet2 是从库存中取出的日志。
关闭 VBA 窗口,右键单击按钮并选择Properties
。将标题更改为“计算”或其他描述性内容,然后关闭。不要更改(name)
顶部,否则您的按钮将不起作用。
单击Design Mode
菜单即可激活该按钮。
假设您参考第一列和第二列时指的是列A
和B
,这将在日志的最后一行中找到零件编号,然后将其与另一张表中的零件编号进行匹配,然后从库存中减去所取的金额。
它只计算最后一行。它不会计算任何先前的行。因此,如果已经存在行,或者您在输入数据后忘记单击按钮,则会丢失该行。另一方面,如果您多次按下按钮,它会减去您按下按钮的次数。
这应该能让你找到正确的方向。或者,你可以使用功能区中的按钮(而不是工作表上的按钮)来执行此操作。
答案2
一个简单的方法是将工作表 1 中 272 个项目的所有起始总数输入到工作表 2 的数据中。最好在实际库存发生变化之前,但这对功能来说并非必不可少。
然后,工作表 2 的库存变化列会为增加的物品输入正数,为移除的物品输入负数。另一种方法是扩展工作表 2 的列用途,增加第二列用于库存变化,并使用一列用于增加的物品,一列用于移除的物品,这样做的好处是,每列都会使用正值。
最后,工作表 1 的库存水平列 (H) 会有一个简单的SUMIF()
公式,在简单版本中,该公式将工作表 2 的库存变化列中与工作表 1 上公式左侧 (A 列) 的零件编号匹配的所有项目相加。更复杂的想法 (两个库存相关列,一个用于增加,一个用于移除) 将使用增加列的公式执行相同的操作,但使用第二个列SUMIF()
来表示移除,但在前面放置一个“-”,以便SUMIF()
公式实际上减去它们 (在简单版本中,移除在其条目中都有自己的“-”,所以这不是必要的......就此而言,没有帮助!)。
现在,这不会每次都保存文件,但是正如您所写的“保存”一样,似乎很清楚您真正想说的是确保信息被保存并立即采取行动。上面的代码就是这样做的。