Microsoft Access VBA 2010 如何创建组合框和数组?

Posted

技术标签:

【中文标题】Microsoft Access VBA 2010 如何创建组合框和数组?【英文标题】:Microsoft Access VBA 2010 how to create and array of comboboxes? 【发布时间】:2015-04-03 15:26:11 【问题描述】:

我是 VBA 和 Microsoft Access 的新手。我已阅读有关此主题的几篇文章,但无法弄清楚我做错了什么。或者如果我可能缺少参考?我想将几个组合框添加到一个数组中,然后重用该数组来执行各种操作,例如使它们可见或不可见等。

我一直在尝试的代码是这样的——我尝试使用 Control、AccessObject、ComboBox 作为数组类型并得到:对象变量或未设置块变量——知道我做错了什么吗?

Private Sub Form_Load()

Dim arrayComboBox(3) As Control

Set arrayComboBox(0) = Me.cmbTourStops1
Set arrayComboBox(1) = Me.cmbTourStops2

arrayComboBox(0).Visible = False
arrayComboBox(1).Visible = True

End Sub

谢谢!

【问题讨论】:

欢迎来到 Stack Overflow。我将您的代码粘贴到我自己的表单模块中,并更改了 cmbTourStops 名称以匹配我的。该代码在 Access 2010 中运行时没有出现错误,并且符合我的预期。我不明白为什么它会为您抛出错误。你能分享一份你的数据库吗? 嗨@HansUp 我似乎无法访问数组值以进行如下所述的更改。谢谢你的帖子。 【参考方案1】:

您的组合框数组应在表单级别声明,即在模块顶部和任何子例程或函数之外。这样,表单代码中的所有例程都可以看到它。此外,您可以使您的例程更通用(较少依赖特定的控件名称)。见下文:

Option Compare Database
Option Explicit

Private arrayComboBox() As ComboBox

Private Sub Form_Load()
    Dim howMany, i As Integer
    Dim ctl As Control
    Dim cbo As ComboBox

    '--- count how many ComboBoxes we have on this form
    howMany = 0
    For Each ctl In Me.Form.Controls
        If ctl.ControlType = acComboBox Then
            howMany = howMany + 1
        End If
    Next ctl

    '--- now properly size the array and store the
    '    controls
    If howMany > 0 Then
        Debug.Print "we found " & howMany & " ComboBoxes on the form"
        ReDim arrayComboBox(1 To howMany) As ComboBox
        i = 1
        For Each ctl In Me.Form.Controls
            If ctl.ControlType = acComboBox Then
                Set arrayComboBox(i) = ctl
                Debug.Print "added " & ctl.Name
            End If
        Next ctl
    End If
End Sub

【讨论】:

以上是关于Microsoft Access VBA 2010 如何创建组合框和数组?的主要内容,如果未能解决你的问题,请参考以下文章

打印前在 Microsoft Access 报告中运行 VBA

vba 查询access

Microsoft Access 导入 vba 文件

Microsoft Access - 覆盖最大字体大小?

Microsoft Access 不会处理 vba

Microsoft Access VBA 插入错误