Ayuda crear función en un modulo

Tengo un programa donde utilizo el siguiente código, como mis conomcimientos en visual son muy mínimos cuando lo cree,, puse el código para cada formulario del proyecto,, y son más o menos 15 formularios,,, el código consiste en que yo dígito un numero de identifiacacion y si este coincide con los datos que están en las tablas de access, me carga la información, si no esta entonces me devuelvea la textbox original donde digite el código inicialmente... Ahora después de leer encontré que yo puedo crear este código en un modulo y después llamarlo desde el formulario donde lo necesite... Me gustaría que me colaboraran para poderlo hacer y tener en lugar de cada formulario todo el código, tenerlo solo en un modulo y llamarlo desde el formulario que lo necesite gracias...
De esta forma lo tengo en todos los formularios pero . ESTE ES ELCODIGO QUE QUIERO PONER EN el MODULO para tenerlo en un solo lado y llamarlo al hacer click.
Option Explicit
Sub medico(ByVal medico As String)
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim strConexion As String
Dim txtSQl As String
strConexion = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
                  App.Path & "\Datos.mdb;Persist Security Info=False"
cn.Open strConexion
txtSQl = "select * from Medicos where Codigo  =  '" & medico & "'"
'Abrimos el recordset
rs.Open txtSQl, cn
If rs.EOF Then
MsgBox "DATOS DEL MEDICO NO REGISTRADOS "
Text1.Text = ""
Text2 = ""
Text3 = ""
Text4 = ""
Text1.SetFocus
Else
Me.Text2 = rs!Nombre_Medico
Me.Text3 = rs!Cedula
Me.Text4 = rs!Registro_Medico
End If
rs.Close
cn.Close
End Sub
DE ESTA FORMA LO LLAMO en el formulario, no se si quedara o mismo para llamarlo cuando quede en el modulo
Private Sub Command1_Click()
 leer3 Me.Text1.Text
End SuB

1 Respuesta

Respuesta
1
Este es el código que debe ir en los formularios, para el evento click y la variable que debe ser declarada:
Option Explicit
Dim ActiveForm As Form
Private Sub Command1_Click()
    Set ActiveForm = Forms.Add(Me.name)
    medico Text1.Text, ActiveForm
End Sub
Ahora en un modulo normal copias este código, que no es más que el mismo tuyo, con una variable nueva de tipo form, para pasar el objeto desde el formulario al modulo y las referencias a esta variable nueva dentro de la sentencia if.. else.. end if
Sub medico(ByVal medico As String, Form As Form)
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim strConexion As String
Dim txtSQl As String
    strConexion = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
                      App.Path & "\Datos.mdb;Persist Security Info=False"
    cn.Open strConexion
    txtSQl = "select * from Medicos where Codigo  =  '" & medico & "'"
    'Abrimos el recordset
    rs.Open txtSQl, cn
    If rs.EOF Then
        MsgBox Form.name
        Form!Text1.Text = ""
        Form!Text2 = ""
        Form!Text3 = ""
        Form!Text4 = ""
        Form!Text1.SetFocus
    Else
        Form!Text2 = rs!Nombre_Medico
        Form!Text3 = rs!Cedula
        Form!Text4 = rs!Registro_Medico
    End If
    Rs. Close
    Con. Close
End Sub
Lo que estamos haciendo es crear dentro del formulario una variable tipo "Form" donde se almacenaran todas las propiedades del form activo, dentro del modulo publico, se creo otra variable del tipo form para recibir la creada en los formularios, para de esta manera poder utilizar los controles de dicho formulario en el modulo.
No se si me explique bien, pero cualquier duda preguntas de nuevo. Esperoa haberte ayudado.
Gracias por la ayuda,, puse las lineas de código tal como lo mencionas pero cuando doy click en el botón el código no se ejecuta,, el formulario que tengo activo en este momento se llama Form1 sera por eso y si es así en que partes debo cambiar el nombre del formulario. O el mismo codigodel modulo me sirve para todos los formularios sin importar el nombre que tengan.. Gracias
Este es el código que debe ir en cada formulario:
Dim ActiveForm As Form
Private Sub Command1_Click()
    Set ActiveForm = Forms.Add(Me.name)
    medico Text1.Text, ActiveForm
End Sub
En la variable ActiveForm se guarda toda la información del formulario para pasarla a la rutina escrita en el código y que de esta forma se pueda accesar a los controles del formulario sin estar en el directamente.
Como podrás observar el modulo recibe la información del Form activo en la variable "Form", por esto ves cosas como esta:
"Form!Text4 = rs!Registro_Medico"
Form! Hace referencia al formulario sobre el cual hiciste click
Text4 es el control text que se encuentra en ese formulario
Por otra parte cometí un error al borrar una linea de tu código, la linea correcta del messagebox es esta:
MsgBox "DATOS DEL MEDICO NO REGISTRADOS"
Cualquier cosa no dudes en volver a preguntar.
El programa sigue sin hacer efecto si no dígito nada en el textbox 1 y doy click me aparece el mensaje del msgbox..
Y se me va a la linea siguiente
Form!Text1.SetFocus
Error 5 en tiempo de ejecución, llamada a procedimiento o argumento no válidos..
Y en todos me da el mismo error..
En el texbox 1 dígito el código del medico..
Cuando de click en el textbox2, 3 y 4 debería aparecerme el nombre el registro y la identificación del medico que se encuentra en una tabla de access.
¿No se que puedo estar haciendo mal?
Si puedes mandame el proyecto en visual basic y la base de datos en access para probarla, porque realmente así no se decirte donde esta el error, comprímelo todo y envíamelo a [email protected].
Muchas gracias por la colaboración.. me ha sido de gran utilidad, hasta ahora estoy empezando a trabajar con visual, y pues tengo muchos vacíos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas