hola a todos
estoy haciendo pruebas con una funcion para determinar el numero de
controles.Hijo de un control pasado como argumento, y aunque con los
contenedores 'reales' parece hacer bien su trabajo, cuando se trata de
uno que no lo es (label, textbox, etc), siempre me devuelve 1 en vez de
0, y esto aunque le reste 1 (o 10, o 27, o...) dentro de la funcion.
Supongo que en algo esto metiendo la pata, seguramente un error de
logica, pero no lo veo. Y aunque he ido complicando la funcion con
condicionales, para ver si encontraba el motivo, en un principio era
muy sencilla y pasaba lo mismo.
expongo la funcion, que se ha enrevesado un poco. Como comentarios
algunos de mis intentos
NOTA: la funcion utilizada para determinar si es un formulario no se si
es necesaria aqui, pero en cualquier caso creo que no afecta al
resultado (aunque la he cambiado el nombre para no duplicar, y no
trabajar sobre la original, me la facilito Vinchenzo Vinc)
'*********'nroObjsHijo'****<26-11-06>************************
'devuelve el Nº de controles (o paginas) hijo de un control/objeto
'
Function nroObjsHijo2a(ByVal objCt As Object) As Long
Dim ctI As Control
nroObjsHijo = 0
If TypeName(objCt) <> "MultiPage" Then
If EsFormulario(objCt.Name) Or TypeName(objCt) = "Frame" _
Or TypeName(objCt) = "Page" Then
objCt.Controls.Count
' objCt.Controls.Count - 1 ' o menos 2, o menos x, siempre dvuelve
1 ¿¿¿¿????
' For Each ctI In objCt.Controls
' If ctI.Parent Is objCt Then nroObjsHijo = nroObjsHijo + 1
' ' If ctI.Parent Is objCt And ctI.Name <> ctI.Parent.Name Then
nroObjsHijo = nroObjsHijo + 1
' Next
Else
nroObjsHijo = 0
End If
Else
nroObjsHijo = objCt.Pages.Count
End If
End Function
'
'*****************************EsFormulario->(IsForm)******'Vinchenzo
Vinc **************
'Esta función recorre la colección de formularios, devolviendo la
existencia o no
'de uno cuyo nombre coincida con el nombre buscado
'--
Private Function EsFormulario(ByVal strName As String) As Boolean
Dim i As Long
For i = 0 To UserForms.Count - 1
If UserForms(i).Name = strName Then
EsFormulario = True
Exit For
End If
Next
End Function
,*****************una de los intentos originales***********************
Function nroObjsHijo(ByVal objCt As Object) As Long
Dim ctI As Control
nroObjsHijo = 0
On Error Resume Next
If TypeName(objCt) <> "MultiPage" Then
For Each ctI In objCt.Controls
If ctI.Parent Is objCt Then nroObjsHijo = nroObjsHijo + 1
Next
Else
nroObjsHijo = objCt.Pages.Count
End If
On Error GoTo 0
End Function
bueno, no veo a que puede deberse, pues con los contenedores reales si
parece funcionar bien, sin agregarles ninguno
si me echais una mano una vez mas os lo agradezco
un saludo y hasta pronto
Ivan
Leer las respuestas