excel - 根据另一个表单值与工作表范围的匹配,分配和显示工作表中的表单值
问题描述
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 中的任何值,无论它是零还是已经有一个数字。输入完成后,它会更新电子表格并移回表格的开头以进行下一次库存更新。
解决方案
我会在这里使用 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