首页 > 解决方案 > 使用 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

标签: excelvba

解决方案


好的,所以我尝试创建一个通用例程来演示我建议的解决方案。它绝不是最有效的,但它应该完成您所追求的任务。

首先,一些澄清。该例程接受两个参数,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

推荐阅读