以下是引用风吹过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)
没加红色字体部分。







