【问题标题】:Access VBA. How to execute many buttons using a single button?访问 VBA。如何使用单个按钮执行多个按钮?
【发布时间】:2010-12-14 23:38:39
【问题描述】:

我有一个带有几个按钮的表单。我想创建一个按钮,在按钮的每个功能完成后,一个接一个地执行所有按钮。另外,我想更改按钮的颜色以显示正在执行的按钮。 我该怎么做?

【问题讨论】:

  • @tksy 请使用标签 ms-access,而不是 access。谢谢。

标签: ms-access forms vba


【解决方案1】:

最好不要将代码放在对象的事件中,例如点击事件。相反,应该将代码放入它们自己的方法中,这些方法由点击事件调用。然后当你需要运行一大堆它们时,你不需要调用每个按钮的点击事件,而是直接运行点击事件调用的每个方法。

Private Sub DoSomething()

  'Code to do something

End Sub

Private Sub DoSomethingElse()

  'Code to do something else

End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs)

  DoSomething

End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs)

  DoSomethingElse

End Sub

Private Sub Button3_Click(sender As Object, e As EventArgs)

  DoSomething
  DoSomethingElse

End Sub

这也使得代码更加可测试...并不是说代码在 Microsoft Office 应用程序中特别可测试。但这是一个常用的行业最佳实践。

【讨论】:

  • +1 用于分离代码。这是一种更好的方法。
  • 不过,我不会将其作为分类 - 在您需要从两个地方调用它之前,不要将代码从事件中取出,就像您的情况一样。跨度>
  • @David:我反对这一点——我认为不应该在事件处理程序中处理逻辑,这只是我不再走下去的一条路。它导致的问题多于解决的问题 - 单元测试(在这个特定示例中可能不相关)迅速变成了 PITA。事件链具有误导性,因为除非您真的是说 Button1.Click 事件导致Button2 被点击,否则您不应该调用Button2.Click 事件——它具有误导性并且在语义上不正确。您的意思是 Button3.Click 事件调用与 Button2.Click 相同的逻辑。
【解决方案2】:

您所要做的就是在单个按钮的 Click 事件中调用按钮的 Click 事件。

Access 中的命令按钮也没有 BackColor 属性,解决方法是使用第三方工具,或者您可以使用图片并将其用作命令按钮的“图片”属性。

【讨论】:

  • 但是会在每个函数按顺序结束后执行
  • 是的,它会按顺序执行。例如,如果您调用 Command2_Click 后跟 Command3_Click ,则 Command2_Click 中的代码将首先执行,当控件返回调用函数时,它将调用 Command3_Click
  • 这是一种常见的不良做法。出于多种原因,最佳实践是将代码与事件本身分开,以便可以从代码的其他区域调用它们。一个对象上的事件不应引发另一个对象上的事件。
  • 你不应该从其他事件中调用事件,这是一种不好的做法,不应该被提升。
  • @David:我不认为这是胡言乱语。从另一个事件调用一个事件(在大多数情况下)在语义上是不正确的。 Button1.Click 不会(通常)导致 Button2 被单击,而是在 Button2.Click 事件发生时会导致处理相同的逻辑。您的代码应该按照您真正的意思结构化。如果单击 Button1 确实导致 Button2 被单击,那么可以,链接事件是可以的,但除非你真的是这个意思,否则不要这样做。对于可读性和未来的可维护性而言,代码在语义上是正确的很重要。
【解决方案3】:
Private Sub myUltraGroupingButton_Click()
    Call cmdButton1_Click()
    Call cmdButton2_Click()
    Call cmdButton3_Click()
    Call cmdButton4_Click()
End Sub

如果您想自动执行此操作并且如果它是一个表单,则需要遍历 Form.Controls。如果是工作表,我认为您需要使用Worksheet1.ListObjects

【讨论】:

  • 我应该迭代它以便在每个命令完成后执行命令还是?
  • @Atomcreations,请说明哪个版本的 Access 允许您更改命令按钮的背景颜色,或者更改您的代码以显示前景色 :)
  • 这是一种常见的不良做法。出于多种原因,最佳实践是将代码从事件本身中分离出来,以便可以从代码的其他区域调用它们。一个对象上的事件不应引发另一个对象上的事件。
  • 从其他事件中调用事件是一种不好的做法,应该避免。
  • 我不认为这是一种糟糕的做法,尽管我没有在自己的代码中这样做(我的原因是我发现我很难记住调用事件)。由事件触发的子程序和独立子程序在执行方面没有真正的区别——在任何一种情况下它都只是一个子例程,并且定义为事件的默认操作的子程序没有什么特别之处。您不是在调用 EVENT,而是在该事件发生时设置为运行的代码子例程。
【解决方案4】:

我也有办法改变颜色。虽然我没有更改按钮的颜色,但我至少可以使用前景色选项更改按钮上标题的颜色。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-01
  • 2022-01-07
  • 2013-02-04
  • 1970-01-01
  • 1970-01-01
  • 2020-12-29
  • 1970-01-01
相关资源
最近更新 更多