运行时错误'380'咨询:无法设置cboLayout的Value属性问题排查
运行时错误'380':无法设置Value属性的排查与解决
错误原因
执行cboLayout = 14400触发错误的核心原因是14400这个布局ID不在当前cboLayout下拉列表的选项中,具体场景分为两种:
- 存储过程
PS_Layout_list传入entity_id=4505且@deal_only=1时,返回结果集里没有layout_id=14400的记录,导致该值未被添加到下拉列表。 - 代码添加列表项时,
layout_id的类型不匹配(比如数据库中是字符串类型,代码按数值存储,直接赋值数值14400会和列表中的字符串"14400"不匹配)。
解决步骤
1. 验证存储过程返回的数据
直接在数据库中执行以下语句,确认结果集是否包含layout_id=14400:
EXEC PS_Layout_list @deal_only=1, @entity_id=4505
- 如果结果中没有14400:检查存储过程的
@deal_only=1过滤条件是否排除了该布局,或者确认14400是否属于实体4505的有效布局ID,调整存储过程逻辑或业务数据。 - 如果结果中有14400,进入下一步排查。
2. 修正控件赋值逻辑
避免直接给cboLayout赋值,改用遍历列表并设置ListIndex的方式,既解决类型匹配问题,又能容错:
If cboEntity = 4505 Then Dim i As Integer Dim foundMatch As Boolean foundMatch = False For i = 0 To cboLayout.ListCount - 1 ' 注意:如果数据库中layout_id是字符串类型,这里要改为"14400" If cboLayout.Column(0, i) = 14400 Then cboLayout.ListIndex = i foundMatch = True Exit For End If Next i ' 可选:未找到匹配项时的处理 If Not foundMatch Then MsgBox "布局ID 14400 不在当前实体的可选列表中" cboLayout.ListIndex = -1 ' 清空选中状态 End If End If
3. 检查类型匹配问题
确认数据库中layout_id的数据类型:
- 如果是字符串类型,代码中添加列表项时,
cboLayout.Column(0, ...)存储的是字符串值,此时判断条件要改为cboLayout.Column(0, i) = "14400"。 - 如果是数值类型,确保代码中赋值和判断时都用数值类型,避免隐式类型转换导致的不匹配。
内容的提问来源于stack exchange,提问作者Sandee
相关产品推荐
相关产品推荐

