【问题标题】:Listbox not displaying in UserForm列表框未显示在用户窗体中
【发布时间】:2021-02-11 10:05:45
【问题描述】:

我正在尝试从名为“字段”的单独工作表中显示用户窗体中的列表框。问题是,列表不会显示。它显示为单元格旁边的下拉箭头,但不像我想要的那样在用户表单中显示。

  Private Sub UserForm_Activate2()
    On Error Resume Next
    Me.ListBox2.Clear
    For Each element In gFieldsListArr
        Me.ListBox2.AddItem element
    Next element
    UserForm_initialize2
End Sub

Private Sub UserForm_initialize2()
    For Each element In Split(gCellCurrVal2, ",")
        For ii = 0 To ListBox2.ListCount - 1
            If element = Me.ListBox2.List(ii) Then
                Me.ListBox2.Selected(ii) = True
            End If
        Next ii
    Next element
End Sub

【问题讨论】:

  • 为什么是On Error Resume Next?你吞下任何错误吗?

标签: vba listbox


【解决方案1】:

TL;DR:您不能以任何方式重命名事件处理程序或更改其成员签名*,因为正确的成员定义是由事件定义的,而不是其处理程序。


当您在过程范围之间导航时,请注意编辑器顶部的下拉菜单:

只要左侧下拉菜单显示(General),您就不是在事件处理程序中。

对比:

左侧的下拉列表列出了所有可用的接口和事件源;要处理表单的事件,您必须从该下拉列表中选择 UserForm,然后从右侧下拉列表中选择一个成员。

当您这样做时,VBE 会为您创建过程存根,每次都使用正确的名称和签名

当您导航到打算成为事件处理程序的内容时,左侧下拉菜单显示(General),您正在查看没有响应任何事件的死代码。


* 您可以将可访问性从Private 更改为Public,但是直接调用事件处理程序是一种设计味道,因此不需要这样做。您可以更改参数names,但不能更改它们的type;重命名处理程序参数是一件相当令人惊讶的事情,最好也避免。所以是的,最好不要以任何方式更改这些成员签名。

【讨论】:

    猜你喜欢
    • 2022-06-14
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-08
    相关资源
    最近更新 更多