office交流網--QQ交流群號

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

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

Access使用VBA代碼自動創建控件的方法及示例

2017-08-28 16:58:00
zstmtony
原創
2477

能否通過程序代碼來自動創建Access窗體上的控件呢,理論上是可行的。Access本身就提供了CreateControl這個方法

可以讓您通過VBA代碼來自動創建控件,并指定控件的類型及相關屬性



Application.CreateControl方法

Office 2007
CreateControl方法創建一個指定的打開窗體上的一個控制。例如,假設您正在構建一個允許用戶輕松構建特定表單的自定義向導。您可以使用向導中的CreateControl方法向窗體添加相應的控件。

句法

表達式 .CreateControl(FormNameControlTypeSectionParentColumnNameLeftTopWidthHeight

表達式    表示Application對象的變量。

參數

名稱 必需/可選 數據類型 描述
窗體名稱 需要 要在其上創建控件的打開的表單或報表的名稱。
ControlType 需要 AcControlType 一個AcControlType 常量表示要創建的控件的類型。
部分 可選的 AcSection 一個AcSection常數,用于標識將包含新控件的部分。
可選的 變種 附件控件的父級控件的名稱。對于沒有父控件的控件,對此參數使用零長度字符串,或者省略它。
的ColumnName 可選的 變種 控制將綁定的字段的名稱,如果它是一個數據綁定的控件。
左,上 可選的 變種 控制左上角的坐標為緹。
寬度,高度 可選的 變種 指示控件的寬度和高度的數字表達式,以緹為單位。

回報價值
控制

備注

您可以使用自定義向導中的Create ControlCreateReportControl方法在窗體或報表上創建控件。兩個方法都返回一個Control 對象。

您可以分別使用CreateControlCreateReportControl方法在表單設計視圖或報表設計視圖中。

您可以使用參數來標識主控件和從屬控件之間的關系。例如,如果文本框具有附加的標簽,則文本框是主(或父)控件,標簽是從屬(或子)控件。創建標簽控件時,將其父參數設置為標識父控件名稱的字符串。創建文本框時,將其父參數設置為零長度字符串。

您還可以在創建復選框,選項按鈕或切換按鈕時設置參數。選項組是其包含的任何復選框,選項按鈕或切換按鈕的父控件。可以有父控件的唯一控件是標簽,復選框,選項按鈕或切換按鈕。所有這些控件也可以獨立創建,無需父控件。

根據您正在創建的控件的類型設置columnname參數,以及是否綁定到表中的字段。可能綁定到字段的控件包括文本框,列表框,組合框,選項組和綁定對象框架。此外,切換按鈕,選項按鈕和復選框控件可能會綁定到一個字段,如果它們不包含在選項組中。

如果指定columnname參數的字段名稱,則創建綁定到該字段的控件。然后,所有控件的屬性將自動設置為任何相應的字段屬性的設置。例如,控件的ValidationRule 屬性的值將與該字段的該屬性的值相同。

Bb237827.vs_note(EN-US,office.12).gif注意:  注意
如果您的向導在新的或現有的表單或報表上創建控件,則必須首先在“設計”視圖中打開表單或報表。

要從表單或報表中刪除控件,請使用DeleteControlDeleteReportControl 語句。

以下示例首先基于Orders表創建一個新表單。然后它使用CreateControl方法在表單上創建一個文本框控件和附加的標簽控件。

Visual Basic應用程序
Sub NewControls()
    Dim frm As Form
    Dim ctlLabel As Control, ctlText As Control
    Dim intDataX As Integer, intDataY As Integer
    Dim intLabelX As Integer, intLabelY As Integer

    ' Create new form with Orders table as its record source.
    Set frm = CreateForm
    frm.RecordSource = "Orders"
    ' Set positioning values for new controls.
    intLabelX = 100
    intLabelY = 100
    intDataX = 1000
    intDataY = 100
    ' Create unbound default-size text box in detail section.
    Set ctlText = CreateControl(frm.Name, acTextBox, , "", "", _
        intDataX, intDataY)
    ' Create child label control for text box.
    Set ctlLabel = CreateControl(frm.Name, acLabel, , _
         ctlText.Name, "NewLabel", intLabelX, intLabelY)
    ' Restore form.
    DoCmd.Restore
End Sub
分享
北京十一选五基本走势