office交流網--QQ交流群號

Access培訓群:792054000         Excel免費交流群群:686050929          Outlook交流群:221378704    

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

Access中通過VBA程序代碼在Access窗體上動態創建ActiveX控件-高級技巧

2017-08-31 15:06:00
zstmtony
原創
1792

Access中通過VBA程序代碼在Access窗體上動態創建ActiveX控件


我們知道在Access中可以通過 Createcontrol 來動態在窗體上創建控件,但大家有否發現,創建普通的Access控件是可以的

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

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

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


最終幾天不斷的研究和分析,發現原來是這個Activex的OleData未填充導致的。


有2種方法來實現

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

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


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


以下是使用代碼動態創建Activex控件Treeview樹控件的方法:


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



同樣創建網頁瀏覽器控件也可以通過類似的方法


Dim ctlNew As Access.Control

'********************************************
' 在主體節添加瀏覽器控件 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



此知識點相關Access資料


Access VBA教程:OLEData屬性

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

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

設置

controlname.OLEData

OLEData屬性使用以下設置:

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

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

說明

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

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

Me!MyTreeViewControl.OLEData = Me!MyCalendarControl.OLEData
分享
北京十一选五基本走势