【问题标题】:Assign and Display a Form Value from a Worksheet based on a Match of another form value against a Worksheet Range根据另一个表单值与工作表范围的匹配,分配和显示工作表中的表单值
【发布时间】:2021-01-05 18:53:29
【问题描述】:
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 表单将根据扫描输入更新单位并等待用户键入或扫描真实单位我还没有为此编写代码,因为我无法获取要更新的单位字段。当它这样做时,实际 Units 需要添加到 invReal 中的任何值,无论它是零还是已经有一个数字。输入完成后,它会更新电子表格并返回表格的开头以进行下一次库存更新。

【问题讨论】:

  • (sh(F) & iRow) - 你是说sh.Range("F" & iRow)吗?
  • 是的,谢谢 BigBen,确实将表单更新为当前值
  • 最好更明确一点:sh.Range("F" & iRow).Value.

标签: excel vba set match focus


【解决方案1】:

我会在这里使用 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-01
    • 1970-01-01
    • 2020-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多