Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.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
Vba Excel Listbox在设置Listindex后不一致地没有值_Vba_Excel_Listbox - Fatal编程技术网

Vba Excel Listbox在设置Listindex后不一致地没有值

Vba Excel Listbox在设置Listindex后不一致地没有值,vba,excel,listbox,Vba,Excel,Listbox,我有一个简单的用户表单,其中包含两个列表框和两个文本框,其中包含当前所选Listitem的值。我有一个奇怪的bug,当表单加载时,其中一个框将无法填充。如果我关闭表单并再次加载,则对面的框将不会加载。如果我第三次关闭并重新加载,它将加载第一个框,但不会再次加载第二个框。重复这句话 首次加载: 第二次加载: 代码应该在启动时填充两个文本框。这个错误的来源是什么 Private Sub UserForm_Initialize() Dim i As Long For i = 1

我有一个简单的用户表单,其中包含两个列表框和两个文本框,其中包含当前所选Listitem的值。我有一个奇怪的bug,当表单加载时,其中一个框将无法填充。如果我关闭表单并再次加载,则对面的框将不会加载。如果我第三次关闭并重新加载,它将加载第一个框,但不会再次加载第二个框。重复这句话

首次加载:

第二次加载:

代码应该在启动时填充两个文本框。这个错误的来源是什么

Private Sub UserForm_Initialize()
    Dim i As Long

    For i = 1 To 4
        ListBox1.AddItem "Item A - " & i
    Next i
    ListBox1.ListIndex = 0

End Sub


Private Sub ListBox1_Change()

    Dim i As Long

    ListBox2.Clear
    For i = 1 To 3
        ListBox2.AddItem "Item B - " & i
    Next i
    ListBox2.ListIndex = 0

    TextBox1.Value = ListBox1.Value
End Sub

Private Sub ListBox2_Change()
    TextBox2.Value = ListBox2.Value
End Sub

这个答案来自Yow3Ek,也来自任何人。此代码按测试结果运行,没有错误或以前的问题。谢谢你们,我今天学到了一些东西。它在空地上开火

Private Sub UserForm_Initialize()
    Dim i As Long

    For i = 1 To 4
        Me.ListBox1.AddItem "Item A - " & i
    Next i
    Me.ListBox1.ListIndex = 0

End Sub


Private Sub ListBox1_Change()

    Dim i As Long

    Me.ListBox2.Clear
    For i = 1 To 3
        ListBox2.AddItem "Item B - " & i
    Next i
    Me.ListBox2.ListIndex = 0


    Me.TextBox1.Value = Me.ListBox1.List(Me.ListBox1.ListIndex)
End Sub

Private Sub ListBox2_Change()
    If Me.ListBox2.ListIndex = -1 Then Exit Sub
    Me.TextBox2.Value = Me.ListBox2.List(Me.ListBox2.ListIndex)
End Sub

不幸的是,对于一个人来说,在列表框中进行选择并不是那么容易。这使得添加一个机制来了解已做出的选择以处理选择变得更加容易。我将在下面发布一些检查选择的代码,如果没有实现机制,则必须在循环中运行此代码。将
ListBox1.Value
更改为
ListBox1.List(ListBox1.ListIndex)
ListBox2.Value
更改为
ListBox2.List(ListBox2.ListIndex)
应该可以解决问题,但我仍在挠头,试图弄清楚为什么会发生这种情况。也许@MatsMug会有个主意。(不确定我是否可以这样ping他,或者我是否必须在他一直活跃的帖子上ping他-我将尝试这种方式,看看会发生什么。)@Wookies将编码-问题中的代码是一个MCVE,它将复制OP的问题。在一个新工作簿中,创建一个新的userform,添加两个文本框、两个列表框,并将发布的代码添加到表单中,然后运行。@Mat'smugh我注意到在单步执行OP的代码时,Locals窗口(在初始化过程中)显示了ListBox1.从
Null开始的值和ListBox2.从
开始的值。
(在交替的循环中,它们被切换)。正确处理
Null的
将等效文本框设置为
。因此,即使这看起来很奇怪-为什么初始值应该更改。我已经找到了解决方法,但我仍然不知道是什么导致了这种奇怪的行为。