Userform组合框仅取第一个值-Excel VBA
我设置了一个用户表单,其中包含一个组合框。组合框中填充了来自动态命名范围“List1”的值。。一切都很好。。当我从列表中选择第一个值时,它会起作用,我可以完成我的任务。。但当我从列表中选择另一个值时,该值消失,组合框值变为空。。 代码如下:Userform组合框仅取第一个值-Excel VBA,vba,excel,combobox,Vba,Excel,Combobox,我设置了一个用户表单,其中包含一个组合框。组合框中填充了来自动态命名范围“List1”的值。。一切都很好。。当我从列表中选择第一个值时,它会起作用,我可以完成我的任务。。但当我从列表中选择另一个值时,该值消失,组合框值变为空。。 代码如下: Private Sub ComboBox1_Change() ComboBox1.RowSource = "'[" & ActiveWorkbook.Name & "]DATA'!List1" ComboBox1.DropDown Works
Private Sub ComboBox1_Change()
ComboBox1.RowSource = "'[" & ActiveWorkbook.Name & "]DATA'!List1"
ComboBox1.DropDown
Worksheets("TEMP").Range("A3").Value = ComboBox1.Value
End Sub
谁能给我一个解决办法吗
更新:
我按照本教程中的说明进行操作。。但我是以用户形式进行的:
我无法让它在单元格A3中显示空白-这一切都起作用了,只是我必须在组合框中键入要显示的值(即,将更改事件触发)。还可以尝试将
ActiveWorkbook
更改为thiswoolk
(包含代码的书)
首次打开表单时,请尝试填充组合框:
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
主要问题:组合框将根据所选项目更改其值 选择第5项->选择第5项(如果值发生变化也如此) 如果源已更改(不存在第5项或具有空字符串),则该框将为空。您没有选择值!试着这样做:
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
在选择项目时不会更改->组合框保持原样
编辑:试着这样做:
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之外(在本表单中应该是第一行)。用此代码替换Private-Sub-UserForm\u Initialize()
和Private-Sub-ComboBox1\u Change()
,并检查这是否是您想要的。不幸的是,它不起作用。。但当我从列表中选择第一个以外的值时,组合框变为空@Abeer我已经测试了这个解决方案,它可以正常工作。通常您可以从初始化事件填充组合框。然后在更改事件中执行一些操作。不能用相同的列表重新填充相同的组合框。每次更改时。动态名称的公式是否有问题?问题在于动态范围公式。=数据$D$4:指数(表1[H3];最大值(表1[H2]);1)这是公式。。请帮助我更改它..我尝试运行此解决方案,但出现错误1004的消息显示“应用程序定义或对象定义错误”再次尝试->从链接下载->复制我的代码->替换私有子用户表单\u Initialize()
-用户表单的一部分->工作时没有任何错误…我希望在键入时更改组合框列表值。。如本教程所示:建议。。你能帮我用userform吗。。附件中的所有内容都已准备就绪。您只需在Worksheets(“TEMP”).Range(“A3”).Value=ComboBox1.Value
行ComboBox1.Value=Worksheets(“TEMP”).Range(“A3”).Value
之后放置即可。。。组合框本身不会为空(但列表将为空)。。。但是,要确保你不是在一个无休止的循环中结束。。。我会调查的…@Aber我编辑了我的答案。。。请检查是否符合您的需要(您可以将ListCB=Sheets(“Data”)。范围(名称(“List1”))
替换为完整范围或更大范围…空单元格将被忽略,您的List1
无需使其正常工作。