VBA:ComboBox仅在Workbook_Open事件后显示一个项目

时间:2017-11-08 09:37:53

标签: excel vba excel-vba combobox

我正在尝试使用 Workbook_Open 事件填充控件ComboBox 因此,当用户转到Worksheet("Benchmarking")时,他们会有一个预先填充的列表供您选择,其中包含数组datesArr中的所有项目。

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

Current situation with ComboBox1

如果我选择该项目,则列表实际填充:

Full list appearing when selecting initial single item

期望的结果:

我希望在用户第一次尝试进行选择时,可以使用完整列表,而不仅仅是在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。

1 个答案:

答案 0 :(得分:0)

感谢@CLR让我想起了recalcs。我决定用以下方法解决这个问题:

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

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