Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Userform组合框仅取第一个值-Excel VBA_Vba_Excel_Combobox - Fatal编程技术网

Userform组合框仅取第一个值-Excel VBA

Userform组合框仅取第一个值-Excel VBA,vba,excel,combobox,Vba,Excel,Combobox,我设置了一个用户表单,其中包含一个组合框。组合框中填充了来自动态命名范围“List1”的值。。一切都很好。。当我从列表中选择第一个值时,它会起作用,我可以完成我的任务。。但当我从列表中选择另一个值时,该值消失,组合框值变为空。。 代码如下: Private Sub ComboBox1_Change() ComboBox1.RowSource = "'[" & ActiveWorkbook.Name & "]DATA'!List1" ComboBox1.DropDown Works

我设置了一个用户表单,其中包含一个组合框。组合框中填充了来自动态命名范围“List1”的值。。一切都很好。。当我从列表中选择第一个值时,它会起作用,我可以完成我的任务。。但当我从列表中选择另一个值时,该值消失,组合框值变为空。。 代码如下:

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
无需使其正常工作。