【问题标题】:VBA, Textbox VlookupVBA,文本框 Vlookup
【发布时间】:2015-02-12 19:48:40
【问题描述】:

欧拉

我正在使用名称管理器,其中包含每个部门的员工列表,现在我想在我的代码中查找每个员工的时钟编号。

我从每个部门的组合框 (CB_Department) 开始,然后查找每个部门的一系列员工 (CB_EName)。然后,我想从 excel 表中查找员工时钟编号,并将其直接输入到用户表单文本框(TB_ENumber)中。这条路线的原因是因为excel表是从Sql(姓名和时钟号)自动更新的,但工作人员在哪个部门工作是在工作表中管理的。

现在的问题是代码适用于第一个员工的部门更改,但是当我更改员工组合框时,文本框不会更新。有人可以告诉我我缺少什么

到目前为止我必须的代码

Sub CB_Department_Change()
Dim strRange As String
If CB_Department.ListIndex > -1 Then
   strRange = CB_Department
   strRange = Replace(strRange, " ", "_")
        With CB_EName
            .RowSource = vbNullString
            .RowSource = strRange
            .ListIndex = 0
        End With

        With TB_ENumber
            .Text = Application.WorksheetFunction.VLookup(CB_EName, Sheet4.Range("A2:B200"), 2, False)
        End With

Else

End If
End Sub

谢谢

【问题讨论】:

  • 您的代码中缺少某些内容。似乎有两个sub beginnigs,但只有一个end sub。此外,您不能在另一个sub 中打开sub。接下来,您需要使用任何Change event 触发您的操作,而您(尝试)在表单打开时触发它,因此它在启动时起作用。因此,请显示正确/改进的代码以供进一步支持。
  • 嗨 KazJaw,抱歉,我不小心将私有子代码留在了代码中。问题正是我需要在第二个组合框(CB_EName)上使用更改事件触发第二步。如何在当前代码中包含该触发器?
  • 为第二个组合框添加额外的触发器并放置在您要重复的代码中。或者将可重复的代码移动到外部子程序,然后从第一个和第二个组合框调用它。
  • 感谢 Kazjaw,我已将代码移至外部子目录。

标签: vba excel


【解决方案1】:

感谢卡兹乔

Private Sub CB_Department_Change()

Dim strRange As String
If CB_Department.ListIndex > -1 Then
   strRange = CB_Department
   strRange = Replace(strRange, " ", "_")
        With CB_EName
            .RowSource = vbNullString
            .RowSource = strRange
            .ListIndex = 0
        End With

Else

End If
End Sub


Private Sub CB_EName_Change()

        With TB_ENumber()
            .Text = Application.WorksheetFunction.VLookup(CB_EName, Sheet4.Range("A2:B200"), 2, False)
        End With
End Sub

【讨论】:

    猜你喜欢
    • 2023-03-10
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-13
    • 1970-01-01
    • 2020-03-03
    相关资源
    最近更新 更多