运行-更改组合框值时的时间错误“380”(使用用户表单和 Excel 中的 VBA)
Run-time error '380' when changing combobox value (using userforms and VBA in Excel)
这是一个非常简单的例子来说明我的问题。
使用组合框和命令按钮创建用户窗体。
将组合框的样式 属性 设置为“fmStyleDropDownList”。
添加代码
Private Sub CommandButton1_Click()
ComboBox1.Value = "But then it errors sometimes if I change it here"
End Sub
Private Sub UserForm_Initialize()
ComboBox1.Value = "I can initialize to any value I choose"
End Sub
当我 运行 用户窗体时,我可以整天单击命令按钮而不会出现任何错误。
但是,当我单击组合框的下拉箭头并且框中的文本突出显示时,下次单击命令按钮时,我得到“运行-time error '380': Could not set值 属性。无效 属性 值"
使用 style="fmStyleDropDownCombo" 不是我想要考虑的选项。我尝试使用 ComboBox1.ListIndex = -1
清除选择,但没有用。
关于如何可靠地避免此错误的任何想法?
当您使用 fmStyleDropDownList
样式时,您的 ComboBox
值必须与列表中的一项匹配,但由于您没有添加任何项目,您的列表当前为 Null
。
要对此进行测试,请在您的用户表单中创建另一个 ComboBox 并将其放入您的用户表单中:
Private Sub CommandButton1_Click()
Debug.Print "=== Click ==="
Debug.Print "ComboBox1 Type: " & TypeName(ComboBox1.List)
Debug.Print "ComboBox2 Type: " & TypeName(ComboBox2.List)
ComboBox1.Value = "But then it errors sometimes if I change it here"
On Error Resume Next
ComboBox2.Value = "But then it errors sometimes if I change it here"
If Err.Number <> 0 Then Debug.Print "ComboBox2 - Error"
Debug.Print "============="
End Sub
Private Sub UserForm_Initialize()
ComboBox1.AddItem "I can initialize to any value I choose"
ComboBox1.AddItem "But then it errors sometimes if I change it here"
ComboBox1.Value = "I can initialize to any value I choose"
ComboBox2.Value = "I can initialize to any value I choose"
Debug.Print "ComboBox1 Type: " & TypeName(ComboBox1.List)
Debug.Print "ComboBox2 Type: " & TypeName(ComboBox2.List)
End Sub
当您 运行 用户表单时,您应该立即看到 window:
ComboBox1 Type: Variant()
ComboBox2 Type: Null
在单击 ComboBox2
之前单击按钮(任意多次),您会注意到输出仍然相同。 (也没有错误,因为 List
仍然是 Null
)
现在点击ComboBox2
并再次点击按钮,你会看到ComboBox2.List
的类型现在已经从Null
变成了Variant
并且会触发错误。
===============
所以,为了避免这种情况,您需要先填充 List
,下面显示了 AddItem
方法:
Private Sub CommandButton1_Click()
ComboBox1.Value = "But then it errors sometimes if I change it here"
End Sub
Private Sub UserForm_Initialize()
ComboBox1.AddItem "I can initialize to any value I choose"
ComboBox1.AddItem "But then it errors sometimes if I change it here"
ComboBox1.Value = "I can initialize to any value I choose"
End Sub
据我所知,用这种风格设置 ComboBox 值的首选方法是遍历 ComboBox List
属性,检查其值并更改 ListIndex
一旦找到:
Private Sub CommandButton1_Click()
Dim i As Long
For i = 0 To ComboBox1.ListCount - 1
If ComboBox1.List(i) = "But then it errors sometimes if I change it here" Then
ComboBox1.ListIndex = i
Exit For
End If
Next i
End Sub
这是一个非常简单的例子来说明我的问题。
使用组合框和命令按钮创建用户窗体。
将组合框的样式 属性 设置为“fmStyleDropDownList”。
添加代码
Private Sub CommandButton1_Click()
ComboBox1.Value = "But then it errors sometimes if I change it here"
End Sub
Private Sub UserForm_Initialize()
ComboBox1.Value = "I can initialize to any value I choose"
End Sub
当我 运行 用户窗体时,我可以整天单击命令按钮而不会出现任何错误。
但是,当我单击组合框的下拉箭头并且框中的文本突出显示时,下次单击命令按钮时,我得到“运行-time error '380': Could not set值 属性。无效 属性 值"
使用 style="fmStyleDropDownCombo" 不是我想要考虑的选项。我尝试使用 ComboBox1.ListIndex = -1
清除选择,但没有用。
关于如何可靠地避免此错误的任何想法?
当您使用 fmStyleDropDownList
样式时,您的 ComboBox
值必须与列表中的一项匹配,但由于您没有添加任何项目,您的列表当前为 Null
。
要对此进行测试,请在您的用户表单中创建另一个 ComboBox 并将其放入您的用户表单中:
Private Sub CommandButton1_Click()
Debug.Print "=== Click ==="
Debug.Print "ComboBox1 Type: " & TypeName(ComboBox1.List)
Debug.Print "ComboBox2 Type: " & TypeName(ComboBox2.List)
ComboBox1.Value = "But then it errors sometimes if I change it here"
On Error Resume Next
ComboBox2.Value = "But then it errors sometimes if I change it here"
If Err.Number <> 0 Then Debug.Print "ComboBox2 - Error"
Debug.Print "============="
End Sub
Private Sub UserForm_Initialize()
ComboBox1.AddItem "I can initialize to any value I choose"
ComboBox1.AddItem "But then it errors sometimes if I change it here"
ComboBox1.Value = "I can initialize to any value I choose"
ComboBox2.Value = "I can initialize to any value I choose"
Debug.Print "ComboBox1 Type: " & TypeName(ComboBox1.List)
Debug.Print "ComboBox2 Type: " & TypeName(ComboBox2.List)
End Sub
当您 运行 用户表单时,您应该立即看到 window:
ComboBox1 Type: Variant()
ComboBox2 Type: Null
在单击 ComboBox2
之前单击按钮(任意多次),您会注意到输出仍然相同。 (也没有错误,因为 List
仍然是 Null
)
现在点击ComboBox2
并再次点击按钮,你会看到ComboBox2.List
的类型现在已经从Null
变成了Variant
并且会触发错误。
===============
所以,为了避免这种情况,您需要先填充 List
,下面显示了 AddItem
方法:
Private Sub CommandButton1_Click()
ComboBox1.Value = "But then it errors sometimes if I change it here"
End Sub
Private Sub UserForm_Initialize()
ComboBox1.AddItem "I can initialize to any value I choose"
ComboBox1.AddItem "But then it errors sometimes if I change it here"
ComboBox1.Value = "I can initialize to any value I choose"
End Sub
据我所知,用这种风格设置 ComboBox 值的首选方法是遍历 ComboBox List
属性,检查其值并更改 ListIndex
一旦找到:
Private Sub CommandButton1_Click()
Dim i As Long
For i = 0 To ComboBox1.ListCount - 1
If ComboBox1.List(i) = "But then it errors sometimes if I change it here" Then
ComboBox1.ListIndex = i
Exit For
End If
Next i
End Sub