office交流網(wǎng)--QQ交流群號及微信交流群

Access培訓(xùn)群:792054000         Excel免費交流群群:686050929          Outlook交流群:221378704    

Word交流群:218156588             PPT交流群:324131555

微信交流群(請用微信掃碼)

        

Access中通過VBA程序代碼在Access窗體上動態(tài)創(chuàng)建ActiveX控件-高級技巧

2017-08-31 15:06:00
zstmtony
原創(chuàng)
7319

Access中通過VBA程序代碼在Access窗體上動態(tài)創(chuàng)建ActiveX控件


我們知道在Access中可以通過 Createcontrol 來動態(tài)在窗體上創(chuàng)建控件,但大家有否發(fā)現(xiàn),創(chuàng)建普通的Access控件是可以的

但是創(chuàng)建Activex或其它Customcontrol是不行。不管你如何創(chuàng)建,這個控件總是無法生效或激活的。

CreateControl 創(chuàng)建 AcitveX 控件 是通過 (acCustomControl 參數(shù)),雖然命令是執(zhí)行成功了,但它僅僅是創(chuàng)建一個空的容器(empty container)

Activex控件的屬性 方法 和事件都沒有激活。這是為什么呢?


最終幾天不斷的研究和分析,發(fā)現(xiàn)原來是這個Activex的OleData未填充導(dǎo)致的。


有2種方法來實現(xiàn)

1.將每種Activex控件的OleData保存在一個模板表中,在需要的時間將這些OleData內(nèi)容賦給剛創(chuàng)建的Activex控件

2.從其它窗體或本控件同類型的Activex控件中復(fù)制OleData


2種方法都需要 分別 對如 Treeview imagelist listview等這些Activex控件分別處理


以下是使用代碼動態(tài)創(chuàng)建Activex控件Treeview樹控件的方法:


Dim frm As Form, ctl As ControlSet
Docmd.Openform "我的窗體",acDesign ,,,,acHidden  '隱藏打開窗體到設(shè)計視圖
frm = Forms("我的窗體") 
Set ctl = CreateControl(frm.Name, acCustomControl, acDetail, , , 100, 100, 200, 200)
ctl.OleData = frm("已存在的樹控件名").OleData  '已存在的樹控件名 是已存在當(dāng)前窗體上或其它窗體上樹控件



同樣創(chuàng)建網(wǎng)頁瀏覽器控件也可以通過類似的方法


Dim ctlNew As Access.Control

'********************************************
' 在主體節(jié)添加瀏覽器控件 web browser control
'    a.) OLE Class: Microsoft Web Browser
'    b.) Class: Shell.Explorer.2
'********************************************

Set ctlNew = CreateControl(frmNew.Name, acCustomControl,  acDetail)
      
    With ctlNew

        .OLEClass = "Microsoft Web Browser"
        .Class = "Shell.Explorer.2"
        .Verb = 0
        .Visible = True
        .OleData = forms("另一個窗體").controls("WebBrowser2").OleData

 End With



此知識點相關(guān)Access資料


Access VBA教程:OLEData屬性

本主題中的部分內(nèi)容可能不適用于某些語言。

使用 OLEData屬性可以將未綁定對象框中的數(shù)據(jù)復(fù)制到其他未綁定對象框,或者將ActiveX 控件中的數(shù)據(jù)復(fù)制到其他 ActiveX 控件。

設(shè)置

controlname.OLEData

OLEData屬性使用以下設(shè)置:

設(shè)置 說明
ControlName 必需。表示未綁定對象框控件的名稱。
OLEData 必需。表示未綁定對象框或 ActiveX 控件所包含的數(shù)據(jù)。

OLEData屬性僅在使用 Visual Basic 時才可用。對于 ActiveX 控件,只有在“設(shè)計”視圖中才能將其 OLEData屬性設(shè)為其他 ActiveX 控件的 OLEData屬性。

說明

使用該屬性可以在未綁定對象框中顯示其他未綁定對象框中的數(shù)據(jù)。

如果將 ActiveX 控件的 OLEData屬性設(shè)為其他 ActiveX 控件的 OLEData屬性,則第一個 ActiveX 控件將成為第二個 ActiveX 控件的另一個實例。例如,下列對屬性進行賦值的代碼將 TreeView 控件改為 Calendar 控件:

Me!MyTreeViewControl.OLEData = Me!MyCalendarControl.OLEData
分享
文章分類
聯(lián)系我們
聯(lián)系人: 王先生
Email: 18449932@qq.com
QQ: 18449932
微博: officecn01
移動訪問