我正在尝试使用 Workbook_Open
事件填充控件ComboBox
因此,当用户转到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。
答案 0 :(得分:0)
感谢@CLR让我想起了recalcs。我决定用以下方法解决这个问题:
我在Worksheet("Benchmarking")
添加了 Worksheet_Activate
事件并删除了Workbook_Open代码。这似乎可以解决问题
Private Sub Worksheet_Activate()
' ComboBox1.Clear
ComboBox1.List = DateArrToStrArr
End Sub