excel - 使用 VBA/VlookUp 使用一个表中的数据来匹配另一个表中的数据并使用它来计算数量
问题描述
所以我正在处理一个库存电子表格,它基本上有两个大表。其中一张表有零件编号/描述/位置/批号/数量/等(称为“库存清单”),另一张只有零件编号/描述/供应商/总量(称为“订购清单”)。第一个表主要用于跟踪每个项目的批号,因此它具有一个 SKU/零件号的多个实例,而第二个表更多用于跟踪每个项目的总量以进行重新订购,因此每个项目只有一个实例零件号。表格被锁定给用户,并且用户通过使用用户表单来编辑表格以将项目“拾取并放置”到表格中。目前选择按钮已设置,因此他们从批号表中进行选择,它将从该行中减去他们从该行中取出或添加到库存中的数量,我的问题是,我如何将第一个表中选择的零件号与还从/添加到第二个表中的总量?我对 VBA 很陌生,我不确定这是否可能。两个表的共同点是每个表的第一列都列出了零件号。我可以在下面发布为拾取/放置按钮编写的当前代码。两个表的共同点是每个表的第一列都列出了零件号。我可以在下面发布为拾取/放置按钮编写的当前代码。两个表的共同点是每个表的第一列都列出了零件号。我可以在下面发布为拾取/放置按钮编写的当前代码。
Private Sub btnPick_Click()
Dim pickValue As Integer
Dim updateQTY As Integer
Dim invQTY As Integer
Dim findMe As Long
Dim sh As Worksheet
Set sh = ThisWorkbook.Sheets("Inventory List")
If Selected_List = 0 Then
MsgBox "You must select an Inventory Item Prior to Pick!", vbOKOnly + vbInformation, "Edit"
Exit Sub
End If
If Me.txtPPQty.Value = "" Then
MsgBox "Please enter a quantity to pick.", vbOKOnly + vbInformation, "Edit"
Exit Sub
End If
pickValue = Me.txtPPQty.Value
invQTY = Me.lstInventory.List(Me.lstInventory.ListIndex, 7)
findMe = Selected_List + 4
If pickValue > invQTY Then
MsgBox "The pick quantity is too high! Please select a lower Value.", vbOKOnly + vbInformation, "Edit"
Exit Sub
End If
If pickValue <= invQTY Then
updateQTY = invQTY - pickValue
End If
ThisWorkbook.Sheets("Inventory List").Cells(findMe, 9) = updateQTY
MsgBox "You have removed " + CStr(pickValue) + " units from the selected item.", vbOKOnly + vbInformation, "Edit"
Dim pickValue As Integer
Dim updateQTY As Integer
Dim invQTY As Integer
Dim findMe As Long
Dim sh As Worksheet
Set sh = ThisWorkbook.Sheets("Inventory List")
If Selected_List = 0 Then
MsgBox "You must select an Inventory Item to Return!", vbOKOnly + vbInformation, "Edit"
Exit Sub
End If
If Me.txtPPQty.Value = "" Then
MsgBox "Please enter a quantity to Return.", vbOKOnly + vbInformation, "Edit"
Exit Sub
End If
pickValue = Me.txtPPQty.Value
invQTY = Me.lstInventory.List(Me.lstInventory.ListIndex, 7)
findMe = Selected_List + 4
If pickValue > invQTY Then
MsgBox "The pick quantity is too high! Please use Inventory Edit functions.", vbOKOnly + vbInformation, "Edit"
Exit Sub
End If
If pickValue <= invQTY Then
updateQTY = invQTY + pickValue
End If
ThisWorkbook.Sheets("Inventory List").Cells(findMe, 9) = updateQTY
MsgBox "You have added " + CStr(pickValue) + " Units to the selected Item.", vbOKOnly + vbInformation, "Edit"
End Sub
解决方案
好的,所以我尝试创建一个通用例程来演示我建议的解决方案。它绝不是最有效的,但它应该完成您所追求的任务。
首先,一些澄清。该例程接受两个参数,part_number
并且order_qty
. 这order_qty
是您要在另一个表中设置的零件编号的新数量。
其次,我将一般声明用于演示目的,因此您可以在必要时根据您的情况调整这些声明。
第三,quantity_offset
是从Part Number
列到列的列偏移Total Quantity
。
这是代码:
Option Explicit
Sub Update_Quantity(part_number As String, order_qty As Long)
Dim ws1 As Worksheet, update_table_name As String, column_header As String
Dim rng_part_number As Range
Dim quantity_offset As Long
Set ws1 = ThisWorkbook.Sheets("Update_Sheet")
update_table_name = "myTable"
column_header = "Part Number"
quantity_offset = 10
'find part number
'assuming table object and column header Part Number
Set rng_part_number = ws1.Range(update_table_name & "[" & column_header & "]").Find(What:=part_number, LookAt:=xlWhole)
'assign new qty
rng_part_number.Offset(0, quantity_offset).Value = order_qty
End Sub
推荐阅读
- python - (-1, 784) 的形状与输入大小为 200 之间的冲突
- vue.js - 无法使用 vue.js 全局注册自定义组件
- vue.js - 如何使用 Vue Router 使用搜索过滤器和标签来实现这种路由结构?
- windows-store-apps - 从其“ID”中查找 Windows 商店应用程序的 .exe 路径
- powershell - 使用以 some-pattern 开头并以 other-pattern 结尾的搜索模式过滤 powershell 输出
- java - 如何通过拆分字符串来创建 Person 对象
- c# - 如何使用 ASP.NET 核心 mvc 中的下拉列表更新每页显示的元素数量?
- python - 没有找到“文件”的 Python 文档?
- flutter - 在 Flutter 中单击时,波纹效果出现在自定义列表视图项下
- arrays - 如何在 Delphi 中将项目添加到这种数组?