访问UI(controlsource属性)与VBA性能

时间:2015-01-10 23:57:55

标签: performance vba ms-access

使用Access UI并设置属性以向文本框(或其他控件)添加值时,性能(速度,使用的内存等)是否存在差异,而不是使用VBA执行相同的操作时对象变量是否正确使用?

例如,让我们说我想从列表框中选择一个项目,并将所选记录中的值添加到2个文本框控件中。我可以通过在列表框的AfterUpdate事件过程中使用以下VBA代码来完成此操作:

Private Sub lstTest_AfterUpdate()
Dim lstA As Control

Set lstA = Me.lstTest

Me.txtTest1 = lstA.Column(0)
Me.txtTest2 = lstA.Column(1)

Set lstA = Nothing

End Sub

我还可以使用MS Access UI通过txtTest1和txtTest2控件中的Properties窗口设置ControlSource属性,以达到相同的效果。

txtTest1 ControlSource:=[lstTest].[Column](0)

txtTest2 ControlSource:=[lstTest].[Column](1)

就性能而言,这两种方法之间有什么区别吗?关于此的任何文件将不胜感激。

1 个答案:

答案 0 :(得分:0)

存在一点“差异”,但实际上并没有任何能够明智地破坏应用程序性能的东西。

第一个例子可以被认为是更好的,因为值被“填充”到其他控件中。问题当然是下次加载表单时,如果txtTest1 / 2是UNBOUND,那么下次表单加载时,你可能需要运行一些代码来重新加载这些值。 (所以这使得第一个例子变得更糟)

因此,在您的第一种情况下,值将不会持久存在,并且下次加载表单(或导航到其他记录)时,这些值将不会更新,因为您的第一个示例仅在更新后事件触发时更新值。更新后事件仅在您更改组合框时触发,而不是在常规表单加载或导航时触发。

因此问题可能不是性能,而只是第一个示例的问题不会起作用,也不会在下次加载表单时显示数据(当然除非文本框绑定到基础列)。

由于代码需要在表单加载时始终运行,或者发生记录导航,因此您最好使用控件源方法,因为在两种情况下您可能希望这些值正确显示,因此在这两种情况下您都必须引用无论如何都是.column()属性。