【问题标题】:Microsoft Access VBA 2010 how to create and array of comboboxes?Microsoft Access VBA 2010 如何创建组合框和数组?
【发布时间】: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 我似乎无法访问数组值以进行如下所述的更改。谢谢你的帖子。

标签: arrays ms-access combobox vba


【解决方案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

【讨论】:

    猜你喜欢
    • 2013-05-17
    • 2017-05-26
    • 1970-01-01
    • 2023-03-26
    • 2016-10-24
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多