>>lbl.Caption 有些控件没有Caption属性的
For Each x In frm.Controls
        Debug.Print x.Name
Next

解决方案 »

  1.   

    用另一种方法
    dim obj as object
    for each obj in frm.Controls
        if typename(obj)="Label" then
            ...
        endif
    next
      

  2.   

    For Each lbl In frm   ‘在这里出错,错误“类型不匹配”   
            cnn.Execute "insert into t (名称,类型,所在窗体) values ('" & lbl.Caption & "','" & "Label" & "','" & frm.Caption & "')"
    Next这里,不能用lbl,for each 后面必须跟 object或者 control对象。
    你可以这样:
    dim obj as object
    For Each obj In form1.controls
      if TypeOf obj Is Label then       
            cnn.Execute "insert into t (名称,类型,所在窗体) values ('" & lbl.Caption & "','" & "Label" & "','" & frm.Caption & "')"
      end if
        Next
      

  3.   

    谢谢.问题解决了.但是又有了一个问题-----不管怎么样,我总是不能读取到 Datagrid 控件,为什么?难道 Datagrid 不属于 object 吗??????各位大侠请帮下忙.谢谢!
      

  4.   

    datagrid是多层对象,我们具体测试过,你用debug多测试
      

  5.   

    什么意思?能说明白点吗?我的目的是读取窗体里面所有Datagrid的所有列的列名.可是程序不认得"DataGrid",不把它当作 object ,怎么办呢?
    If TypeOf obj Is DataGrid Then
                MsgBox "ok"
                For i = 0 To obj.Columns.Count - 1
                    Theturn = Theturn + 1
                    cnn.Execute "insert into t (序号,名称,类型,所在窗体) values (" & Theturn & ",'" & obj.Columns(i).Caption & "','" & "DataGrid" & "','" & frm.Caption & "')"
                Next 
    End If