以下是引用风吹过b在2016-11-10 12:53:28的发言:
因你的工作未带一个测试用的 XLS 文件 ,所以整个工程都无法调试。
概念,控件数组,最少有一个元素在设计阶段已确定的,然后其他元素复制这个元素的实例。
控件数组,不能在运行时直接创建一个原先不存在的控件数组
在这里面
Public optadd() As OptionButton '查询后增加控件变量 违反了定义
其次,控件数组的添加,
不能这样 Set optadd(i) = opt_Frm.Controls.Add("vb.optionbutton", optadd(i)) '添加一个按钮 Public optadd As OptionButton
而应使用 Load Object (Index As Integer) 命令进行添加。
----------------
那么改?
首先,你应该放一个 下标为0 的元素,设置为隐藏。其他属性都设置好来。
使用时:
先 清掉除0下标外的所有的元素
for each obj in optadd
if obj.index>0 then
unload obj
end if
next
然后再根据你的需要添加
load optadd(i)
再接着就是移动位置
optadd(i).Move 200 + opt_w * 2000, (i - opt_w * 30) * 400, 2000, 375 'object.move left,top,width,height left距离左边, top距离顶端, width新宽度, height新高度
optadd(i).Caption = opt_nm '命名
optadd(i).Visible = True ' 可见
这三句,不是每个对象都设置,而是程序设计模式直接设置好 下标为0 的元素的属性,或者在代码中指定 下标为0 元素的属性。
这样每次加载时,就会把这个属性复制过去。
' optadd(i).Font = "宋体"
' optadd(i).FontBold = True
' optadd(i).FontSize = 12
@风吹过b
十分感谢帮助,按照您的办法,已测试成功。
开始测试不成功问题出在:
For Each obj In
opt_Frm.optadd
Load
opt_Frm.optadd(i)
没加红色字体部分。