如何循环访问 Ms Access 中选定的表单列表
how to loop through selected list of forms in Ms Access
我正在尝试循环访问 Ms Access 中选定的表单列表。
就像我们可以用 Excel 中的工作表这样
For Each shtSheet In ThisWorkbook.Worksheets(Array("Sheet2", "Sheet1"))
有没有办法在 Access for forms 中做一些类似的事情?
提前致谢。
例如
Dim f As Form
Dim arr
arr = Array("Form1", "Form2")
Dim element
For Each element In arr
Set f = Forms(element)
Next
但如果未加载表单,set f= Forms(element)
将会失败。
您可以将它们列为对象:
Public Function ListSomeForms()
Dim Form As Object
Dim FormNames As Variant
Dim Item As Variant
FormNames = Array("FormName1", "FormName2")
For Each Item In FormNames
Set Form = CurrentProject.AllForms(Item)
Debug.Print Form.Name, Form.IsLoaded
' Loop controls.
DoCmd.OpenForm Form.Name, acDesign
' For Each Control In Forms(Form.Name)
' Do stuff ...
' Next
DoCmd.Close acForm, Form.Name
Next
Set Form = Nothing
End Function
@storax @gustav
你们两个都给出了我要求的完美解决方案。
至于我,我最终将表单名称放在 table 中,然后通过记录集调用它们。
Set db = CurrentDb
Set rs = db.OpenRecordset("tsubforms")
Do Until rs.EOF
Set frm = rs!SubForm
With frm
DoCmd.OpenForm frm, acViewDesign, , , , acHidden
For Each ctrl In Forms(frm).Controls
Debug.Print ctrl.Name
End With
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
Set db = Nothing
只是提出我的解决方案,如果它可以帮助其他人。
如果有人发现我的代码中有任何错误,或者可以让我知道比这更好的东西,我将不胜感激。
我正在尝试循环访问 Ms Access 中选定的表单列表。 就像我们可以用 Excel 中的工作表这样
For Each shtSheet In ThisWorkbook.Worksheets(Array("Sheet2", "Sheet1"))
有没有办法在 Access for forms 中做一些类似的事情?
提前致谢。
例如
Dim f As Form
Dim arr
arr = Array("Form1", "Form2")
Dim element
For Each element In arr
Set f = Forms(element)
Next
但如果未加载表单,set f= Forms(element)
将会失败。
您可以将它们列为对象:
Public Function ListSomeForms()
Dim Form As Object
Dim FormNames As Variant
Dim Item As Variant
FormNames = Array("FormName1", "FormName2")
For Each Item In FormNames
Set Form = CurrentProject.AllForms(Item)
Debug.Print Form.Name, Form.IsLoaded
' Loop controls.
DoCmd.OpenForm Form.Name, acDesign
' For Each Control In Forms(Form.Name)
' Do stuff ...
' Next
DoCmd.Close acForm, Form.Name
Next
Set Form = Nothing
End Function
@storax @gustav 你们两个都给出了我要求的完美解决方案。
至于我,我最终将表单名称放在 table 中,然后通过记录集调用它们。
Set db = CurrentDb
Set rs = db.OpenRecordset("tsubforms")
Do Until rs.EOF
Set frm = rs!SubForm
With frm
DoCmd.OpenForm frm, acViewDesign, , , , acHidden
For Each ctrl In Forms(frm).Controls
Debug.Print ctrl.Name
End With
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
Set db = Nothing
只是提出我的解决方案,如果它可以帮助其他人。
如果有人发现我的代码中有任何错误,或者可以让我知道比这更好的东西,我将不胜感激。