VBA:ComboBox只显示Workbook_Open事件后的一个项目

我试图有一个Workbook_Open事件填充控件combobox,以便当用户转到Worksheet("Benchmarking") ,他们有一个预填充列表可供select,其中包括数组datesArr中的所有项目。

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

与ComboBox1的现状

如果我select那个项目然后列表实际上填充:

选择初始单个项目时出现完整列表

预期结果:

我希望从第一次用户试图进行select不仅仅是在ComboBox1_Change事件被激发之后,完整列表才可用。

审查了许多后,例如有时ActiveXcombobox只显示一行,为什么? , 在WorkBook打开combobox我已经尝试了几种不同的方法,包括Workbook_Open事件代码中的以下内容:

 .ListFillRange = "DropDownDates" .List = DateArrToStrAr 

我也打了添加项目到ComboBox1arrays。 每次我在下拉结果中获得相同的1个可见项目。

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

我目前的代码是

1) ThisWorkbook

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

2) 工作表(“标杆pipe理”)

 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 

笔记:

数组datesArrDateArrToStrArr()函数填充,该函数读取date"DropDownDates" (工作簿范围)的命名范围,并将它们转换为string数组。 然后分配给combobox。

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

设置:Excel 2016 64位Windows。

感谢@CLR让我思考recalcs。 我决定用下面的方法解决这个问题:

我在Worksheet("Benchmarking")了一个Worksheet_Activate事件,并删除了Workbook_Open代码。 这似乎是诀窍

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