Access vba动态创建ActiveX控件

http://blog.csdn.net/xcntime/article/details/21706779

在Access  VBA编写的程序中,如果可以在运行时动态创建控件无疑是非常有用的,因为有些控件是无法预先得知的,这样就更必须在运行时动态创建然后设置相应控件属性。在vb,excel当中,使用Control的add方法可以实现,如下:

然而,在access当中,当我们调用Controls.Add时,却发现access的vba文档中不存在此方法,在文档中查询了下,发现等价的方法是

CreateControl(),下面是其文档说明:


http://support.microsoft.com/kb/147134/zh-cn


Collapse image症状

高级: 需要高级编程、 互操作性和多用户技能。

当您使用 CreateControl() 函数以编程方式创建一个 OLE 控件时,将创建一个空的容器。

Collapse image原因

CreateControl() 函数不会添加使控件正常工作所需的 OLE 数据。 即使过程设置控件的类或 OLEClass 属性,将发生这种情况。

Collapse image解决方案

为了在运行时创建一个 OLE 控件,您必须首先创建"模板"窗体,其中包含您的过程需要在运行时创建的所有 OLE 控件。 然后,该过程必须设置为"模板"窗体上的 OLE 控件的 OLEData 属性的新的自定义控件的 OLEData 属性。

创建计划过程在运行时创建的所有 OLE 控件的窗体。 该过程必须设置为模板窗体上的适当控件的 OLEData 属性的新的 OLE 控件的 OLEData 属性。 下面的步骤演示如何使用 Microsoft Access 中包含日历控件执行此操作。

本文假定您熟悉 Visual Basic for Applications 和创建 Microsoft Access 应用程序使用编程与 Microsoft Access 提供的工具。 Visual Basic for Applications 有关的详细信息,请参阅"Microsoft Access 与构建应用程序"手册的版本。

  1. 打开示例数据库 Northwind.mdb。
  2. 创建新的空白表单模板的名称。
  3. 插入一个日历控件并将其命名为日历。
  4. 创建一个模块,并在声明部分中键入下面一行,如果尚不存在:
    显式的选项
  5. 键入以下过程:
          Sub CreateCalendar()
             Dim frm As Form
             Dim ctl As Control
             DoCmd.OpenForm "Template", acDesign , , , , acHidden
             Set frm = CreateForm()
             Set ctl = CreateControl(frm.Name, acCustomControl, acDetail)
             ctl.OLEData = Forms!Template!Calendar.OLEData
             DoCmd.Restore
             DoCmd.Close acForm, "Template"
          End Sub
    						
  6. 若要测试此函数,请在调试窗口中,键入下面一行,然后按 enter 键:
    CreateCalendar
    请注意一个日历控件创建一个新窗体。

Collapse image更多信息

重现问题的步骤

  1. 打开示例数据库 Northwind.mdb。
  2. 创建一个模块,并在声明部分中键入下面一行,如果尚不存在:
    显式的选项
  3. 键入以下过程:
          Sub CreateCalendar()
             Dim frm As Form
             Dim ctl As Control
             Set frm = CreateForm()
             Set ctl = CreateControl(frm.Name, acCustomControl, acDetail)
             ctl.Class = "MSACAL.MSACALCtrl.7"
             ctl.OLEClass = "Calendar Control"
          End Sub
    						
  4. 若要测试此函数,请在调试窗口中,键入下面一行,然后按 enter 键:
    CreateCalendar
    请注意,即使该过程设置的类和 OLEClass 属性空 OLE 控件容器与创建一个新窗体。

Collapse image参考

有关 CreateControl() 函数的详细信息, CreateControl 函数,用于搜索帮助的索引,或让 Microsoft Access 97 Office 助手。

Collapse image属性

文章编号: 147134 - 最后修改: 2013年9月30日 - 修订: 3.3
这篇文章中的信息适用于:
  • Microsoft Access 95 标准版
  • Microsoft Access 97 标准版
关键字: 
kbnosurvey kbarchive kbmt kbprb kbprogramming KB147134 KbMtzh
机器翻译

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页