Использование VBA / VlookUp для использования данных из одной таблицы для сопоставления данных в другой таблице и использования их для расчета количества - PullRequest
0 голосов
/ 21 апреля 2020

enter image description hereenter image description here Итак, я работаю над таблицей инвентаризации, в которой в основном две большие таблицы. Одна из таблиц имеет номер детали / описание / местоположение / номер партии / количество / et c (называемый «Инвентарный список»), а другая просто имеет номер детали / описание / поставщика / общее количество (называемая «Список для заказа») ). Первая таблица в основном предназначена для отслеживания номеров партий каждого элемента, поэтому в ней имеется несколько экземпляров одного номера 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

1 Ответ

0 голосов
/ 21 апреля 2020

Хорошо, поэтому я попытался создать общую процедуру для демонстрации предложенного решения. Это ни в коем случае не самый эффективный, но он должен выполнить задачу, которую вы после.

Сначала несколько уточнений. Процедура принимает два аргумента, 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...