如何从其他数据库列出Access Form控件名称?

时间:2015-09-18 19:43:31

标签: forms ms-access

我最近去了一个Access Meetup Group,看到了一个很酷的想法;创建一个代码库数据库,该数据库保存代码以从数据库返回表,表单等的名称和属性,然后从正在开发的数据库中引用。通过这样做,我有一个模态形式,可以告诉我我有什么表,它们在哪些字段等等所有代码库中的代码,然后我可以在完成后取消引用。我面临的问题是如何遍历表单集合以列出调用数据库中存在的表单及其控件,因为我不能像表格那样使用CurrentDb。我一直在搜索谷歌,甚至冒险进入第二个结果页面,并找到了容器,这可能是我所要求的,但我不能让它工作。我99%肯定那个给演示的人显示了以他的模态形式列出的表格。 (愚蠢的是我没有得到他的名字,否则我会联系他)。

我尝试过使用CurrentProject.Application.Forms,但是Access说它无法找到表单。是否需要开放才能实现这一目标?

我正在尝试做什么?我可以尝试任何想法吗?

PS:我在UtterAccess上发布了这个帖子。

1 个答案:

答案 0 :(得分:1)

“Forms”集合仅适用于Access中当前打开的表单。您将需要使用'AllForms'集合,它返回一个'AccessObject',然后确定是否加载了表单。一旦确定表单是否打开,您就可以打开它并获取对象引用,然后遍历控件。这应该可以帮到你。

Public Sub TestIt()

    ListAllFormsAndControls Access.Application
End Sub

Public Sub ListAllFormControls(acApp As Access.Application)

    Dim frmAcObj As Access.AccessObject
    Dim frm As Access.Form
    Dim ctl As Access.Control
    Dim closeForm As Boolean


    For Each frmAcObj In acApp.CurrentProject.AllForms

        closeForm = False

        If frmAcObj.IsLoaded = False Then
            DoCmd.OpenForm frmAcObj.Name, windowmode:=acHidden
            closeForm = True
        End If

        Set frm = Access.Forms(frmAcObj.Name)

            For Each ctl In frm.Controls

                Debug.Print frm.Name & " | " & ctl.Name & "(" & TypeName(ctl) & ")"

            Next ctl

        If closeForm Then
            DoCmd.Close acForm, frmAcObj.Name
        End If

    Next frmAcObj
End Sub

示例结果:

F_ProgressBar | txt_Pct1(TextBox)
F_ProgressBar | txt_Pct2(TextBox)
F_ProgressBar | txt_Pct3(TextBox)
F_ProgressBar | txt_Pct4(TextBox)
F_ProgressBar | txt_Pct5(TextBox)
F_ProgressBar | txt_Pct6(TextBox)
F_ProgressBar | txt_Pct7(TextBox)
F_ProgressBar | txt_Pct8(TextBox)
F_ProgressBar | txt_Pct9(TextBox)
F_ProgressBar | txt_Pct10(TextBox)
F_ProgressBar | txt_Pct11(TextBox)
F_ProgressBar | txt_Pct12(TextBox)
F_ProgressBar | txt_Pct13(TextBox)
F_ProgressBar | txt_Pct14(TextBox)
F_ProgressBar | txt_Pct15(TextBox)
F_ProgressBar | txt_Pct16(TextBox)
F_ProgressBar | txt_Pct17(TextBox)
F_ProgressBar | txt_Pct18(TextBox)
F_ProgressBar | txt_Pct19(TextBox)
F_ProgressBar | txt_Pct20(TextBox)
F_ProgressBar | txt_Desc(TextBox)