Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

请教:VBA: 建立包含基于表格的子窗体的窗体的三种方法

cc55  发表于:2011-04-14 19:04:36  
复制

大家好,我想在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

 

点击下载此附件

 

Top
羽扇子君 发表于:2011-04-15 09:38:18

有什么现实意义吗?没看到.

只觉得变量没有声明,就使用,后果会很严重.



总记录:1篇  页次:1/1 9 1 :