北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |
大家好,我想在VBA环境中建立包含基于表格的子窗体的窗体,我找到了三种方法,但不尽如意,恳请各位就更简化、效率提供批评意见。
第一种方法用子程序C_SourceObject_Click()来实现。步骤如下:建立窗体--建立子窗体控件--设置子窗体控件的SourceObject属性为表格名称。在这种方法中,我不能设置子窗体的allowadditions、allowedits等属性。
第二种方法用子程序C_Direct_RecordSource_Click()来实现。步骤如下:建立窗体 (form1) --用RecordSource属性将该窗体与表格联系--保存form1--建立窗体(form2)--建立子窗体控件--设置SourceObject属性为form1。在这种方法中,窗体(form2)能显示所有记录,但没有字段。
第三种方法用子程序C_InDirect_RecordSource_ClickThe()来实现。步骤如下:建立窗体 (form1) --用RecordSource属性将该窗体与表格联系--建立文本控件与字段联系起来--保存form1--建立窗体(form2)--建立子窗体控件--设置SourceObject属性为form1。
第三种方法的结果是我想要得,但我觉得第三种方法有些繁琐,请问诸位有更好的建议吗?我只想完全在VBA环境中实现。
以下是相关代码。谢谢。
Private Sub C_InDirect_RecordSource_Click()
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Set conn = CurrentProject.Connection
y1 = "F_InDirect_RecordSet"
sub13 = "sub_InDirect_RecordSource"
SQL = "select * from AAA"
rs.Open SQL, conn, 3, 1
For mm = 1 To 1
Set x3 = CreateForm
xx = x3.Name
Forms(xx).RecordSource = SQL
For Each uu In rs.Fields
Set x9 = CreateControl(xx, acTextBox, , , uu.Name)
Set x10 = CreateControl(xx, acLabel, , x9.Name)
x10.Caption = Forms(xx).Controls(x9.Name).ControlSource
Next uu
Forms(xx).DefaultView = 2
DoCmd.OpenForm xx, acNormal
Set Forms(xx).Recordset = rs
rs.Close
DoCmd.Close acForm, xx, acSaveYes
DoCmd.Rename sub13, acForm, xx
Set x5 = CreateForm
Set x7 = CreateControl(x5.Name, acSubform, , , , 400, 500, 2500, 2000)
Forms(x5.Name).Controls(x7.Name).SourceObject = sub13
x8 = x5.Name
DoCmd.Close acForm, x8, acSaveYes
DoCmd.Rename y1, acForm, x8
Next mm
End Sub
Private Sub C_Direct_RecordSource_Click()
y1 = "F_Direct_RecordSource"
sub13 = "sub_Direct_RecordSource"
Set x33 = CreateForm
xx = x33.Name
Forms(xx).RecordSource = "select * from AAA"
Forms(xx).DefaultView = 2
DoCmd.Close acForm, xx, acSaveYes
DoCmd.Rename sub13, acForm, xx
Set x9 = CreateForm
Set x10 = CreateControl(x9.Name, acSubform, , , , 400, 500, 2500, 2000)
Forms(x9.Name).Controls(x10.Name).SourceObject = sub13
xx = x9.Name
DoCmd.Close acForm, x9.Name, acSaveYes
DoCmd.Rename y1, acForm, xx
End Sub
Private Sub C_SourceObject_Click()
y1 = "F_SourceObject"
Set x9 = CreateForm
Set x10 = CreateControl(x9.Name, acSubform, , , , 400, 500, 2500, 2000)
Forms(x9.Name).Controls(x10.Name).SourceObject = "table.AAA"
xx = x9.Name
DoCmd.Close acForm, x9.Name, acSaveYes
DoCmd.Rename y1, acForm, xx
End Sub
点击下载此附件