首页 > 解决方案 > 如何抑制更改事件以允许在 vlookup 期间使用全部值?

问题描述

我有一个带有名称和 ID #s 的组合框。在它下面是两个选项按钮:nameemployee ID。用户可以单击其中一个或任何一个开始输入以在组合框中填充所需的值。

然后,我在下方有一个文本框来进行 vlookup 以填充该员工经理的姓名。一切正常,但更改事件并没有让我输入我想要的完整值,只有第一个实例。例如:如果我想输入员工 ID 12345,则一旦我输入 1 并使用它找到的第一个值执行子程序,就会触发更改事件。如何允许我在触发查找之前完全输入我想要的内容?

代码:

Private Sub cmbEmployee_Change()
    Dim strID, vMgrName
    If optID = True Then 'if user clicks on employee ID option button
        strID = Left(cmbEmployee, 7) 'find the employee ID on left in combo box
    Else
        strID = Right(cmbEmployee, 7) 'find the employee ID on right in combo box
    End If
    vMgrName = Application.VLookup(strID, _
                    Worksheets("MasterDB").Range("A:U"), 21, False) 'find mgr name in column U
    txtMgrName.Value = IIf(IsError(vMgrName), "-", vMgrName)
End Sub

标签: excelvba

解决方案


将您的“更改”事件更改为“更新后”

   Private Sub cmbEmployee_AfterUpdate()
       MsgBox "macro triggered"
   End Sub

或者,您可以阻止宏触发,直到值不够长

    Private Sub cmbEmployee_Change()
        If Len(Me.cmbEmployee.Value) > 5 Then
            MsgBox "macro triggered"
        End If
    End Sub

推荐阅读