首页 > 解决方案 > 根据另一个表单值与工作表范围的匹配,分配和显示工作表中的表单值

问题描述

Private Sub invItem_AfterUpdate()
 Dim sh As Worksheet
' Dim ckItem As Long

 Set sh = ThisWorkbook.Sheets("ACS_Report")
With Me
' ckItem = sh.Range("B:B").Value
    If WorksheetFunction.CountIf(sh.Range("B:B"), invItem) = 0 Then 'Checks to see if the scanned value exists.
       
        MsgBox "That Item ID does not exist."
            invItem.SetFocus     *This does not work the focus is not set back to invItem or the form.*
            
            Exit Sub
    End If
    
   iRow = WorksheetFunction.Match(invForm.invItem, sh.Range("B:B"), 0) 'Returns the Row number from the worksheet.
   invForm.invUnits = (sh(F) & iRow) *This does not work*
   '  Application.WorksheetFunction.VLookup(Me.invItem, ACS_Report.Range("Lookup") 2, False)
End With
    
End Sub

输入表单有三个输入,只有两个是用户输入。用户将扫描项目 ID 表单将根据扫描输入更新单位并等待用户键入或扫描真实的单位 我还没有为此编写代码,因为我无法获取要更新的单位字段。当它这样做时,实际单位需要添加到 invReal 中的任何值,无论它是零还是已经有一个数字。输入完成后,它会更新电子表格并移回表格的开头以进行下一次库存更新。

标签: excelvbasetmatchfocus

解决方案


我会在这里使用 Vlookup - 如果有匹配项,您需要提取一个值,因此您可以在一次调用中执行此操作:

Private Sub invItem_AfterUpdate()
    Dim sh As Worksheet, m
    
    Set sh = ThisWorkbook.Sheets("ACS_Report")
    
    m = Application.VLookup(Me.invItem, sh.Range("B:F"), 5, False) 'no WorksheetFunction
    If Not IsError(m) Then 'check for no match
        Me.invUnits = m
    Else
        MsgBox "Item ID " & Me.invItem & " does not exist."
        invItem.SetFocus
    End If
End Sub

推荐阅读