Principales respuestas
Referenciar Matriz de objeto fuera del form

Pregunta
-
Hola a todos. Tengo unos formularios tipo encuestas que utilizan muchos optionbutton pero los tengo agrupados por matrices, para saber si el usuario ha validado alguno tengo multiples procedimientos como el siguiente:
For Each ob In Me.obDni
if ob.Value = true thengrupoValidado = true
exit for
end if
Next
¿Como puedo hacer este en un módulo con un procedimiento común para todos. Lo que necesito es saber como puede hacer una referencia de objeto a Me.ob1, 2, 3,....
Respuestas
-
Hola de nuevo. haciendo pruebas he conseguido resolver el problema. Lo cuelgo por si le sirve de ayuda a alguien. Gracias de todas formas por tu interés.
El procedimiento Público:
Public Sub ValidaGrupoOB(mCaption As String, frm As Form, obName As String) 'E1_ErOb
Dim botonValidado As Boolean
Dim ob As Object
On Local Error Resume Next
botonValidado = False
'For Each ob In Me.obDni
For Each ob In Me.Controls(obName)
If ob.Value = True Then
botonValidado = True
Exit For
End If
Next
'
If botonValidado = False Then
MsgBox "No ha cumplimentado la opcion: " & mCaption _
, vbCritical, "IMPOSIBLE CONTINUAR"
'ob(0).SetFocus
'ob(0).Value = False
MiErr = "genero un error"
End If
End Sub
y Para llamarlo desde un Form:
Call ValidaGrupoOB(frDni.Caption, Me, "obgrupo1")
obGrupo1, es el nombre de la colección.
- Marcado como respuesta Sargento369 jueves, 20 de diciembre de 2012 17:31
Todas las respuestas
-
No lo tengo claro 100% pero puedes crear un procedimiento al cual pasas el nombre del formulario.
En ese procedimiento, declaras un objeto tipo forms y lo seteas con el nombre que llega.
De esa manera puedes recorrer los controles de cualquier form en un solo módulo
Este ejemplo es de Microsoft Access; si no funciona es cuestion de pequeños ajustes
sub btnOpcion(nombrefrm)
dim frm as form
Set frm = Forms(nombrefrm)
for each ....in frm
end sub
y lo llamas btnOpcion(me.name)
-
Garcias Guarracuco por responder, pero el problema realmente es como determinar la colección del control. Es decir, si un form tiene tres grupos de botones, consus correspondientes index (Boton1(con index 1 a 10) boton2 (con otros 5 elementos)....) y en otro formulario igual, y así sucesivamente, en el procedimiento externo como puedo saber el grupo que tengo que validar. Con la variable de objeto frm establezco el form concreto, pero que variable de objeto declara la colección o grupo que hay que validar?. Saludos
-
Hola de nuevo. haciendo pruebas he conseguido resolver el problema. Lo cuelgo por si le sirve de ayuda a alguien. Gracias de todas formas por tu interés.
El procedimiento Público:
Public Sub ValidaGrupoOB(mCaption As String, frm As Form, obName As String) 'E1_ErOb
Dim botonValidado As Boolean
Dim ob As Object
On Local Error Resume Next
botonValidado = False
'For Each ob In Me.obDni
For Each ob In Me.Controls(obName)
If ob.Value = True Then
botonValidado = True
Exit For
End If
Next
'
If botonValidado = False Then
MsgBox "No ha cumplimentado la opcion: " & mCaption _
, vbCritical, "IMPOSIBLE CONTINUAR"
'ob(0).SetFocus
'ob(0).Value = False
MiErr = "genero un error"
End If
End Sub
y Para llamarlo desde un Form:
Call ValidaGrupoOB(frDni.Caption, Me, "obgrupo1")
obGrupo1, es el nombre de la colección.
- Marcado como respuesta Sargento369 jueves, 20 de diciembre de 2012 17:31
-
Cada control tiene su tipo;puedes recorrer los controles y si es del tipo que deseas, entra en el loop
For Each ctl In Me.Controls
If TypeOf ctl Is TextBox Then
ctl.Text = Empty
ctl.Enabled = False
ctl.Locked = True
End If
NextTambién puedes usar el atributo Tag, para hacer campos obligatorios; con esta funcion se recorre los controles que tengan el tag="*" y si está vacío, notifica al usuario.
Function obligatorios(formulario As Form) As Boolean
Set frm = formulario
For Each ctl In frm.Controls
If TypeOf ctl Is TextBox And ctl.Tag = "*" Then
If ctl.Text = "" Then
MsgBox "El campo " & ctl.Name & " es de caracter obligatorio.", vbCritical
frm.Controls(ctl.Name).SetFocus
obligatorios = False
Exit For
End If
End If
obligatorios = True
Next
End Function- Editado guarracuco jueves, 20 de diciembre de 2012 18:17