CATIA宏Userform列表框点击预览按钮后清空问题求助
CATIA宏Listbox点击预览变空的问题解决
问题原因
- 填充逻辑未触发:修改输入后
sumTHK计算结果为0,代码进入Else分支,没有执行Listbox的AddItem操作;如果按钮事件开头存在未贴出的ListBox2.Clear语句,就会清空原有内容导致Listbox为空。 - 索引变量
m作用域错误:如果m是按钮点击事件的局部变量,每次点击会被重置为0;若sumTHK不为0时覆盖原有行,但如果sumTHK为0则无新内容添加,同时原有内容被清空就会显示为空。 - UserForm重复实例化:按钮事件中如果存在重新创建UserForm实例的代码(如
Set UserForm1 = New UserForm1),旧实例被销毁,新实例的Listbox默认是空的。
解决办法
1. 确保填充逻辑正常触发并控制Listbox内容
- 先排查输入修改后的
sumTHK计算逻辑,保证sumTHK <> 0的条件能正确触发填充代码。 - 若需每次预览都刷新数据,在按钮点击事件开头添加清空和重置代码:
' 按钮点击事件开头添加 UserForm1.ListBox2.Clear m = 0 ' 重置索引变量(如果使用m的话)
2. 修正索引变量m的作用域
- 将
m声明为模块级变量(在模块所有过程之外声明),避免每次点击被重置:
' 在VBA模块顶部添加 Dim m As Integer
- 更推荐的方式是使用
ListBox2.ListCount - 1获取当前最后一行索引,无需依赖m,代码更可靠:
With UserForm1.ListBox2 .AddItem .List(.ListCount - 1, 0) = A .List(.ListCount - 1, 1) = k .List(.ListCount - 1, 2) = j .List(.ListCount - 1, 3) = GeoThick .List(.ListCount - 1, 4) = numX0 End With
3. 避免UserForm重复实例化
检查按钮事件代码,移除Set UserForm1 = New UserForm1这类重新创建实例的语句,确保始终使用同一个UserForm实例显示数据。
内容的提问来源于stack exchange,提问作者Salome
相关产品推荐
相关产品推荐

