【问题标题】:VBA: ComboBox only showing one item after Workbook_Open eventVBA:ComboBox 在 Workbook_Open 事件后仅显示一项
【发布时间】:2018-04-20 22:20:34
【问题描述】:

我正在尝试让 Workbook_Open 事件填充控件组合框 这样当用户访问Worksheet("Benchmarking") 时,他们有一个预填充列表可供选择,其中包括数组datesArr 中的所有项目。

我遇到的问题是,在打开电子表格并导航到 Worksheet("Benchmarking") 时,我只在下拉列表中看到一项:

如果我选择该项目,那么列表实际上会填充:

想要的结果:

我希望从用户第一次尝试进行选择时就可以使用完整列表,而不仅仅是在ComboBox1_Change 事件被触发之后。

审查了许多帖子,例如Sometimes the ActiveX Combobox only shows one row, why? , Populating Combo Box on WorkBook Open 我尝试了几种不同的方法,包括 Workbook_Open 事件代码中的以下内容:

.ListFillRange = "DropDownDates"  
.List = DateArrToStrAr

我还循环了将项目添加到 ComboBox1 的数组。每次我在下拉结果中得到相同的 1 个可见项目。

有人能告诉我哪里出错了吗?

我当前的代码是

1) ThisWorkbook

Private Sub Workbook_Open()

    With Worksheets("Benchmarking").OLEObjects("ComboBox1").Object
        .Clear
        .List = DateArrToStrArr '         
    End With

End Sub

2) 工作表(“基准测试”)

Private Sub ComboBox1_Change() 'QH 2/11/17

     Dim datesArr() As String
     Dim ws As Worksheet

     Set ws = ThisWorkbook.Worksheets("Lkup")

     datesArr = DateArrToStrArr 'function that reads a named range of dates and converts to string to avoid dd/mm becoming mm/dd

     If ComboBox1.Value = vbNullString Then ComboBox1.Value = "01/04/2016"

     ComboBox1.List = datesArr

     '.....other code

End Sub

注意事项:

数组datesArr 由函数DateArrToStrArr() 填充,该函数读取指定的日期范围"DropDownDates"(工作簿范围)并将它们转换为字符串数组。然后将其分配给 ComboBox。

DropDownDates 是一个动态命名范围,公式为=OFFSET(Lkup!$F$16,,,Lkup!$M$12,)

设置:Excel 2016 64 位 Windows。

【问题讨论】:

  • 如果是控件框,那么您可以将其Input Range 属性直接设置为DropDownDates,它将显示值。是否有任何理由以编程方式执行此操作?
  • 我现在记得为什么我以编程方式进行操作。这是为了确保组合框填充了字符串,以避免组合框中出现数字或 mm/dd/yyyy 格式。这确保始终显示“dd/mm/yyyy”。源范围是函数 DateArrToStrArr() 转换为字符串之前的日期。
  • DropDownDates 范围内的日期是固定的还是计算的?如果已计算,请在使用它们之前尝试强制重新计算。
  • 范围是动态的。工作簿打开时不会重新计算吗?

标签: vba excel combobox


【解决方案1】:

感谢@CLR 让我考虑重新计算。我决定用以下方法解决这个问题:

我在Worksheet("Benchmarking") 中添加了一个Worksheet_Activate 事件并删除了 Workbook_Open 代码。这似乎可以解决问题

Private Sub Worksheet_Activate()
  ' ComboBox1.Clear
   ComboBox1.List = DateArrToStrArr
End Sub

【讨论】:

    猜你喜欢
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-25
    • 2020-02-28
    相关资源
    最近更新 更多