【问题标题】:Event Worksheet_BeforeDoubleClick provides values from previous double-click事件 Worksheet_BeforeDoubleClick 提供先前双击的值
【发布时间】:2021-07-06 01:05:54
【问题描述】:

我有一张要分配工作的人员表:

我想使用BeforeDoubleClick 事件来调用显示所有相关字段的表单,以便用户可以查阅/更正这些字段。

表格如下所示:

在相应的工作表中,我有以下代码:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Not Intersect(Target, Range("tblTime")) Is Nothing Then
        Cancel = True
    
        frmAssignNewWork.Show
    
        frmAssignNewWork.Controls("cboPerson").value = Cells(Target.Row, 2).value
        frmAssignNewWork.Controls("cboWork").value = Cells(Target.Row, 4).value
        frmAssignNewWork.Controls("txtStartDate").value = Cells(Target.Row, 5).value
        frmAssignNewWork.Controls("txtEndDate").value = Cells(Target.Row, 6).value
        frmAssignNewWork.Controls("txtFocus").value = Cells(Target.Row, 7).value * 100

它有点工作,因为它显示了表单,并在正确的位置填充了字段,但是它使用在 PREVIOUS 双击时选择的字段填充了表单。

澄清一下,如果我第一次双击,表单将出现空白字段。
然后,如果我再次双击同一个单元格,它将在正确的字段中显示该行的正确信息。

但是,如果我在不同的行上双击第三次,它会显示前一行的信息,等等。

我认为它必须与“之前”双击的概念有关,但如果我插入一个检查,例如:

MsgBox(目标地址)

它总是提供正确的地址...

有人可以帮忙吗? :)

【问题讨论】:

  • MsgBox "!" 放在frmAssignNewWork.Show 之后。这有望解释它。
  • 尝试将frmAssignNewWork.Show移动到程序的末尾
  • 谢谢 Алексей Р,这行得通!我原以为在表单上设置字段的值会刷新它们,但显然不是:)。我还错误地认为我必须先显示表单才能更新字段
  • @MoonLunatic 是的,它确实刷新了它们。它不适合您,因为该代码首先没有运行until you close the form,如果您输入the MsgBox,您会看到它。否则,完全可以更改已显示表单上的值。

标签: excel vba


【解决方案1】:

将 frmAssignNewWork.Show 移至程序末尾即可解决

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-25
    • 1970-01-01
    • 2022-10-24
    • 2013-08-31
    • 2018-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多