用户窗体combobox只取第一个值 – Excel VBA

我有一个用户表单,其中包含一个combobox。 combobox填充了来自dynamic命名范围“List1”的值..每一件事情都很好..当我从列表中select第一个值的作品,我可以完成我的任务..但是当我从列表中select另一个值该值消失,combobox值变为空。这里是代码:

Private Sub ComboBox1_Change() ComboBox1.RowSource = "'[" & ActiveWorkbook.Name & "]DATA'!List1" ComboBox1.DropDown Worksheets("TEMP").Range("A3").Value = ComboBox1.Value End Sub 

谁能给我一个解决scheme,请..

更新:我按照本教程中的说明..但我做一个用户窗体中: http : //trumpexcel.com/2013/10/excel-drop-down-list-with-search-suggestions

主要问题:combobox将通过所选项目更改其值

select项目5 – >项目5被选中(同样如果值改变)如果源改变(不存在项目5或具有空string),该框将是空的。 你没有select一个值! 尝试这样的:

 Private Sub UserForm_Initialize() Dim ListCB As Variant, TmpText As String If Not IsArray(Sheets("Data").Range(Names("List1"))) Then temptext = Worksheets("TEMP").Range("A3").Value Worksheets("TEMP").Range("A3").Value = "" End If ListCB = Sheets("Data").Range(Names("List1")) If Len(temptext) Then Worksheets("TEMP").Range("A3").Value = temptext ComboBox1.List = ListCB End Sub 

ListCB在select项目时不会改变 – >您的combobox保持原样。

编辑:
试试这个方法:

 Dim ListCB As Variant Private Sub UserForm_Initialize() Dim TmpText As String If Not IsArray(Sheets("Data").Range(Names("List1"))) Then temptext = Worksheets("TEMP").Range("A3").Value Worksheets("TEMP").Range("A3").Value = "" End If ListCB = Sheets("Data").Range(Names("List1")) If Len(temptext) Then Worksheets("TEMP").Range("A3").Value = temptext GetCBList End Sub Sub GetCBList() Dim b As Variant, i As Long Dim a() As Variant: ReDim a(UBound(ListCB)) For Each b In ListCB If Len(b) Then If InStr(1, b, ComboBox1.Value, vbTextCompare) > 0 Or ComboBox1.Value = "" Then: a(i) = b: i = i + 1 End If Next If i > 0 Then ReDim Preserve a(i - 1) ComboBox1.List = a End Sub Private Sub ComboBox1_Change() GetCBList ComboBox1.DropDown Worksheets("TEMP").Range("A3").Value = ComboBox1.Value End Sub 

注意: Dim ListCB As Variant需要在subs / functions之外(在这种forms下应该是第一行)。 用这个代码replacePrivate Sub UserForm_Initialize()Private Sub ComboBox1_Change() ,并检查是否是你想要的。

我不能让它在单元格A3中显示空白 – 这一切工作,除了我不得不键入combobox来获取值(即获得更改事件触发)。 也可以尝试将ActiveWorkbook更改为ThisWorkbook (本书中的代码)。

尝试在首次打开表单时填充combobox:

 Private Sub UserForm_Initialize() ComboBox1.RowSource = "'[" & ActiveWorkbook.Name & "]DATA'!List1" End Sub Private Sub ComboBox1_Change() Worksheets("TEMP").Range("A3").Value = ComboBox1.Value End Sub