我想在VBA中有一個子例程,通過迭代有條件地更改表單上20+個按鈕中每個按鈕的Enabled
屬性,而不是手工編寫它們。這些按鈕的名稱與它們處理的表相似。例如:要處理的表格稱爲「CUTLIST」;其相應的按鈕被稱爲「but_CUTLIST」。還有另一個表包含要處理的表的列表(用於其他子目標中的迭代目的)。VBA中是否有方法遍歷表單上的特定對象?
我有什麼到目前爲止...
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查詢每個表都有自己的按鈕,以便用戶可以根據需要處理對任何表的查詢根據事先對數據發生的情況,可能需要通過按下所述按鈕來查詢任何表的組合。不斷查閱日誌,查看已經完成的操作,會變得麻煩在處理好幾個數據集之後,我想讓這些按鈕單獨禁用,如果它們不是當前關注的數據集所需要的。我對如何實現這一點有另一種想法,但是讓這些代碼運行起來會更快我會學到一些東西
'Me.Controls(butName)'... – Comintern
您在通過記錄集循環的每次迭代中調用'tableList.MoveFirst' –
@TimWilliams是的,謝謝。我只是快速寫出了代碼,並試圖查看我是否可以找出如何解決控件名稱問題。修正並註釋了示例代碼以反映您的更正。 – AJK