【问题标题】:Set a sub-form hidden field to visible, based on a check box status根据复选框状态将子表单隐藏字段设置为可见
【发布时间】:2018-10-20 08:49:09
【问题描述】:

C,感谢您的意见和鼓励!我稍微更改了表单和脚本,恐怕我保留了 if then 语句,因为我对格式感到满意。该脚本现在可以在“打开”事件运行时工作。

Private Sub Form_Open(Cancel As Integer)
Me.ChkAlbumNotes.SetFocus

If Me.ChkAlbumNotes.Value = False Then
    Me.lblAlbumNotes.Visible = False
    Me.txtAlbumNotes.Visible = False
    Me.btnAlbumNotes.Visible = True
Else
    Me.lblAlbumNotes.Visible = True
    Me.txtAlbumNotes.Visible = True
    Me.btnAlbumNotes.Visible = False
End If
Me.TrackName.SetFocus
If Me.TrackName = " " Then
    Me.btnAddRecord.SetFocus
Else
Me.btnNextRecord.SetFocus
End If
End Sub

第一次打开表单时这很好,但我有一组导航按钮,由应用程序作为宏安装。单击按钮时,我无法将脚本添加到 On_Click 事件,因为 On_Click 已链接到宏。有没有办法将 On_Load 过程中的脚本合并到预定义的宏中?或者你能建议一种更简洁的方法来满足我的要求:

  1. 当表单打开时,检查复选框中是否存在错误值 如果复选框设置为 false,则注释文本框和标签将隐藏,注释按钮可见。

  2. 如果复选框的值为真,则备注文本框和标签可见,按钮隐藏。

  3. 测试完成后,我检查字段 Track Name 如果这是空的,我假设我在最后一条记录,并将焦点放在添加新记录按钮

  4. 如果 Track Name 不为空,则焦点设置为 Next Record 按钮

单击此按钮时,将打开下一个记录页面并重新开始该过程。

非常感谢

迈克

【问题讨论】:

  • 由于Me.frmArtistSubform!chkNotes.SetFocus 不会产生错误,因此该复选框必须已经可见,因此使其可见不会改变任何内容。由于您没有更改任何其他控件的可见性,您希望发生什么?
  • 另外,如果子窗体是连续或数据表,设置子窗体上可见的控件将使其对所有记录可见。 If Then 不需要,chkNotes 也不需要焦点:Me.somecontrol.Visible = Me.chkNotes 可以使用条件格式来启用/禁用每条记录的控件。
  • 欢迎您!不要担心“纯”代码,只需要改进你所知道的。
  • 第一句描述了一个完全合理的操作,但发布的代码甚至没有尝试做描述的事情。该代码仅引用复选框并且甚至不引用其他文本框。 1) 如果代码甚至没有对这些文本框做任何事情,为什么你会期望其他控件的可见性发生变化?也许发布的代码不是您尝试的完整代码? 2)您能否解释一下为什么代码在recordID_GotFocus() 方法中?也许这个事件没有像你期望的那样被调用。
  • Stack Overflow 的意义不仅在于帮助有“即时”需求的个人,还在于生成非常有用的问题和答案的存档。我们中的许多人为 SO 做出了贡献,因为我们愿意贡献我们的时间来帮助他人。这不是在浪费我们的时间。事实上,您能做的最好的事情就是使用相关代码更新您的问题(不仅仅是 cmets),并根据反馈改进问题,以便给出正确的答案。我并不是要让你更新你的问题而感到内疚,但有时当有人提出一个问题然后放弃它时,这更像是一种浪费。 :)

标签: vba ms-access


【解决方案1】:

您应该使用 Form_Current 事件而不是 Form_Open 。这会在启动表单(2 次)和每次移动到另一条记录时触发。

Private Sub Form_Current()
Me.lblAlbumNotes.Visible = Me.ChkAlbumNotes.Value
Me.txtAlbumNotes.Visible = Me.ChkAlbumNotes.Value
Me.btnAlbumNotes.Visible = Not Me.ChkAlbumNotes.Value

If Me.TrackName = "" Then ' I suggest If Me.TrackName = " " being a typo and you want to check if empty ( that's why you should use vbNullString instead of "")
  Me.btnAddRecord.SetFocus
Else
  Me.btnNextRecord.SetFocus
End If
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-16
    • 2020-12-17
    • 2015-05-27
    • 2020-02-29
    • 2023-03-20
    • 1970-01-01
    • 2013-12-16
    相关资源
    最近更新 更多