代码如下:
Public vDoc As ObjectPublic Sub RadioFill(ByRef arr() As Object, ByRef byName$)
   Dim i%, j%   Set vDoc = wbb.Document
   For i = 0 To UBound(arr) - 1
   If arr(i).Value = True Then
       j = i + 1
   End If
   Next i
 
   For i = 0 To UBound(arr) - 1
   If vDoc.getElementsByName(byName)(i).Value = j Then
   vDoc.getElementsByName(byName)(i).Checked = True
   End If
   Next i
 
End Sub
Private Sub btn_submit_Click()
     
    RadioFill op_use(13), "use"
    RadioFill op_area(5), "area"
end Sub其中op_use(13)是我画的13个OptionButton和网页中<input type="radio" value="1"  name="use" checked/> aaa<input type="radio" value="2"  name="use" /> bbb...对应 op_area(5)也一样
执行时提示在    RadioFill op_use(13), "use" 和  RadioFill op_area(5), "area" 出错信息:编译错误,类型不匹配,缺少数组或用户定义类型请高手帮忙解答!

解决方案 »

  1.   

    如果你op_use是数组,那么应该:RadioFill op_use, "use"
      

  2.   

    这个我试过了 还是一样的错误有两个人说我的程序恶心 那看来是真的恶心了…… 我简化一下吧:
    首先在界面上画了13个OptionButton option1(13)方法:
    Sub RadioFill(ByRef arr() As Object)
        MsgBox(UBound(arr))
    End SubPrivate Sub btn_submit_Click()
       
      RadioFill option1(13)End Sub
        
      

  3.   

    如果你参数要求的是数组,那么应该是RadioFill option1
    RadioFill option1(13) 这样传入的只是option1这一object数组中,序号是13的一个元素...与你过程中的参数类型不一至....
      

  4.   

    RadioFill option1(13)  RadioFill option1  RadioFill option1()  我全试过了 都是同样的错误 会不会是因为option1没有在代码里面定义? 我以前是用Java的 习惯了面向对象 VB的代码里面都没有控件的创建申明和属性定义等 很不习惯
      

  5.   

    这个,控件数组怎么就不是一个数组那
    窗体上放了option1(0),option1(1)
    然后用ubound(option1)就出错误了,这里必须用控件的ubound属性,option1.ubound。好吧,忍你了。
    下来
    Sub RadioFill(arr() As OptionButton, byName As String)
    Dim i
    For i = 0 To arr.ubound
    Next i
    End Sub
    调用Call RadioFill(Option1, "user")立即出错了,“类型不匹配,缺少数组或用户自定义类型”唉,控件数组不是数组嘛不能直接当做数组处理嘛。不是有个Object数据类型,可以引用对象吗,下面程序通过了,不知道能不能达到lz的要求Private Sub Command2_Click()
    Dim x() As Object
    Debug.Print Option1(0).Container.Name
    Debug.Print TypeName(Option1(0))
    Debug.Print Option1.ubound
    ReDim x(Option1.lbound To Option1.ubound)
    For i = 0 To UBound(x)
          Set x(i) = Option1(i)
    Next i
    Call RadioFill(x, "user")
    End Sub
    Sub RadioFill(arr() As Object, byName As String)
    Dim i
    For i = 0 To UBound(arr)
          Debug.Print TypeName(arr(i))
          Debug.Print arr(i).Caption
    Next i
    End Sub
      

  6.   

    试了下,spt_petrolor说的有道理,我想可能是过程参数中的数组,本身应该就是一个指针,所以直接拉到窗体上的控件数组,作过程的数组参数不匹配...不知道对不对...
      

  7.   


    Option ExplicitSub RadioFill(Opt As Object, Optional Idx As Long = 0)
    '参数opt不用声明为数组
        Dim i As Long
        If Idx > 0 Then
            For i = 0 To Idx - 1
                Debug.Print Opt(i).Index
            Next
        Else
            Debug.Print Opt.Name
        End If
    End SubPrivate Sub Command1_Click()
        RadioFill Option2(0)
        RadioFill Option2, Option2.Count
    End Sub
      

  8.   

    谢谢两位 我终于明白了 确实是这么回事 控件数组作为参数时要定义成一个变量就可以传递了 最终程序是:
    Public vDoc As ObjectPublic Sub RadioFill(ByRef arr As Variant, ByRef byName$)
      Dim i%, j%  Set vDoc = wbb.Document
      For i = 0 To arr.UBound
      If arr(i).Value = True Then
      j = i + 1
      End If
      Next i
     
      For i = 0 To arr.UBound
      If vDoc.getElementsByName(byName)(i).Value = j Then
      vDoc.getElementsByName(byName)(i).Checked = True
      End If
      Next i
     
    End Sub
    Private Sub btn_submit_Click()
       
      RadioFill op_use, "use"
      RadioFill op_area, "area"
    end SubThank you very much!
      

  9.   

    好吧 我糊涂了 该被骂 只顾着研究那个控件数组的问题 竟然犯了低级错误  最后代码是:
    Public vDoc As ObjectPublic Sub RadioFill(ByRef arr As Variant, ByRef byName$)
      Dim i%  Set vDoc = wbb.Document
      For i = 0 To arr.UBound
      If arr(i).Value = True Then
      vDoc.getElementsByName(byName)(i).Checked = True
      End If
      Next i
     
    End SubPrivate Sub btn_submit_Click()
       
      RadioFill op_use, "use"
      RadioFill op_area, "area"
    end Sub