VBA中有没有办法遍历表单上的特定对象?

时间:2017-02-14 23:45:44

标签: vba ms-access

我希望在VBA中有一个子程序,通过迭代有条件地更改表单上20个按钮中每个按钮的Enabled属性,而不是手动编码。这些按钮的命名与它们处理的表类似。例如:要处理的表被称为" CUTLIST&#34 ;;它的相应按钮被称为" but_CUTLIST"。还有另一个表保存要处理的表列表(用于其他子目录中的迭代)。

到目前为止我有什么......

Private Sub txt_DataSet_GotFocus()

Dim sqlQry as String
Dim butName As String
Dim tableList As Recordset
Dim tempTable As Recordset

Set tableList = CurrentDb.OpenRecordset("TableList") 'names of tables for user to process
tableList.MoveFirst 'this line was corrected by moving out of the loop

Do Until tableList.EOF
    sqlQry = 'SQL query that determines need for the button to be enabled/disabled
    Set tempTable = CurrentDb.OpenRecordset(sqlQry)
    If tempTable.RecordCount > 0 Then 
        'begin code that eludes me
        butName = "but_" & tableList!tName
        Me(butName).Enabled False
        'end code that eludes me
    End If
    tableList.MoveNext
Loop  

End Sub

如果我没记错的话,JavaScript可以通过将它们作为文档对象"数组的元素来处理变量来调用对象。"示例:this[objID]=objVal VBA是否可以实现这一点,或者我只是认为这一切都错了?

查看其他问题......这就是所谓的"反思"?如果是这样,那么这不能在VBA中完成。 :(

如果更多解释有助于更好地回答问题... 我有一个实用程序,它针对预定义的表集运行SQL查询。每个表都有自己的按钮,因此用户可以根据需要处理对任何表的查询。根据预先发生在数据上的情况,可能需要通过按下所述按钮来查询表的任何组合。在处理多个数据集之后,不断地参考日志,看看已经完成的事情,变得很麻烦。因此,如果当前关注的数据集不需要按钮,我希望单独禁用按钮。我对如何实现这一点有另一个想法,但让这段代码工作会更快,我会学到一些东西。

1 个答案:

答案 0 :(得分:1)

我不是VBA的专家,但我会重新安排代码以利用您可以在用户表单中迭代控件集合的事实

这样的事情:

Dim ctrl as Control

For Each ctrl in UserForm1.Controls

  If TypeName(ctrl) = "Button" Then
    ctrl.Enabled = True
  End If
Next

您可以将按钮名称传递给其他功能(从此循环中),以确定是否应启用/禁用相关按钮。