Access 2013 seleccionar dato y vaya al campo de otro formulario

Lo primero de todo gracias por dedicarle un poco de vuestro tiempo a esta consulta. Os explico lo que quiero hacer

Tengo dos formularios, un formulario A donde se introducen todos los datos, en ese mismo tengo un campo A y al lado he puesto un botón, al pinchar el botón me sale otro formulario B, pero en este caso no se puede agregar, ni añadir nada... Es más bien de consulta. En este formulario tiene dos campos uno con un código B y otro con una descripción.

Lo que quiero hacer es lo siguiente, al abrir el formulario B hacer clic en el código B, y este pasar al al campo A del formulario A, después cerrar automáticamente el formulario B, para seguir introduciendo datos en el formulario A.

2 Respuestas

Respuesta
1

¿Cómo vamos de VBA?. No será complicado.

Edita en modo diseño el formulario B, y accede al código de Al hacer clic del botón.

En el código pones, suponiendo que el formulario A se llame Formulario_A

Formulario_A.CampoA = Formulario_B.CampoCodigo

Debería funcionar. Si no es así, lo comentamos.

De visual basic conocimientos mínimos...

el código lo tengo que meter en vba??

Pero ahora que caigo. Cuando das al botón sale otro formulario, cuando sale el formulario seleccionas el código haciendo doble clic y te lo pasa en la casilla del formulario principal

¿No era eso lo que querías?. Ahora me he quedado pillado...

Respuesta
1

Abre en Vista diseño tu formulario B, colócate encima del campo Código B y saca sus propiedades con el botón derecho. Luego te vas a la Pestaña "Eventos" y localizas "Al hacer doble click". Pulsas el botón con los 3 puntos que aparece a la derecha de esa fila y seleccionas "Generador de código"

Se te abrirá el editor de VBA y allí, entre las lineas Private Sub....DblClick(Cancel As Integer) y End Sub, escribes:

Forms.FormularioA.CampoA=Me.CampoB

Docmd. Close acForm, Me. Name

Sólo tendrás que cambiar FormularioA, CampoA y CampoB por los nombres que tengas en tu BD.

Muchas Gracias, funciono correctamente, era lo que quería hacer. Me parece a mi que voy a tener que empezar a estudiar algo de visual basic para access...

Buenas, me surge el siguiente problema con la solución que me diste.

el formulario B también lo utiliza para un formulario C, que es igual que el formulario A. Lo único n que se diferencia es que en el formulario B me aparece todo lo pendiente.

al hacer lo que me dijiste

Forms.formularioA.CampoA=me.CampoB

DoCmd.Close acForm, Me.name

esto funcionaba, le añado entre medias lo siguiente

Forms.FormularioC.CampoC=Me.CampoB

me da un error 438 en ejecución, haciendo referencia a la primera línea del formulario B

me imagino que es porque no esta abierto ese formulario y creo que se tendría que hacer una condicional, diciendo que si ese formulario no esta abierto pase al siguiente orden. 

Pero en Vba no se...

¿me podrías ayudar?

Una opción para sortear ese error sería ponerle como primer alinea del código esto:

On Error Resume Next

De manera que si se produce un error lo ignore y siga en la línea siguiente

Para comprobar que el formulario está abierto, has de usar este fragmento de código, cmabiando lo que está en negrita por el nombre que quieres comprobar:

Dim Frm As AccessObject
For Each Frm In CurrentProject.AllForms
If Frm.Name = "NombreFormulario" Then
If Frm.IsLoaded = True Then
'Aquí el código a ejecutar si está cargado
End If
End If
Next Frm

Dentro del For... Next, puedes poner tantos Ifs como formularios quieras comprobar.

No me funciona, tengo que hacer algo mal, te pongo lo que tengo

Private Sub Sociedad_DblClick (Cancel As Integer)

Dim Frm As AccessObject

For Each Frm In CurrentProject.AllForms

IfFrm.Name = Forms.Alta_Autorizacion

Then

IfFrm.IsLoaded =True

Then

Forms.Alta_Autorizacion.Sociedad = Me.Sociedad

Forms.Alta_Autorizacion.texto41=Me.Nombre_Sociedad

End If

Next Frm

Forms.Ver_Pendiente_Autorizar.Sociedad=Me.Sociedad 

DoCmd.Close acForm, Me.Name

End Sub

el primer fallo me da en el Then primero...

Private Sub Sociedad_DblClick (Cancel As Integer)
Dim Frm As AccessObject
For Each Frm In CurrentProject.AllForms
If Frm.Name = "Alta_Autorizacion" Then
If Frm.IsLoaded =True Then
Forms.Alta_Autorizacion.Sociedad = Me.Sociedad
Forms.Alta_Autorizacion.texto41=Me.Nombre_Sociedad
End If
End If
Next Frm
Forms.Ver_Pendiente_Autorizar.Sociedad=Me.Sociedad 
DoCmd.Close acForm, Me.Name
End Sub

A ver así. Y para otra ocasión, indica el error que te da.

Muchas gracias, a funcionado!! Aunque me dio error luego en el otro formulario y le puse otro if igual que el anterior pero con Ver_Pendiente_Autorizar 

lo puse después de los dos End If repetí todos los if cambiando los formularios luego puse End if dos veces el me y Frm después el resto DoCm....

Muchas gracias por tu ayuda esto de no saber vba ... Por cierto creía con decirte que me ponía en error en esa línea era suficiente, la próxima vez diré el errór.

 Por cierto la base va a tener un objeto Ole, ¿si ese objeto ole lo saca de una carpeta fuera de la base de datos ocuparía menos espació la base?

quizás no se pueda hacer o si lo hago me va a ocupar lo mismo y es una tontería hacerlo

si se puede hacer y me va acupar menos espacio en la base de datos ¿como se podría Hacer?

muchas gracias otra vez

Cuanta más información des, es más fácil que te podamos ayudar. Errores hay muchos y de muchos tipos distintos, y aunque en este caso vi que el problema era que no estabas poniendo el nombre del formulario, en otros casos no es tan evidente.

Con objetos OLE no trabajo nunca, así que no te podría decir si los puedes vincular o incrustar (aunque creo que sólo permiten incrustarlos). En su lugar, puedes almacenar la ruta del archivo/objeto, y abrirlo desde el propio access, que es lo que yo hago. Te pongo unos enlaces a unos ejemplo explicados de cómo hacerlo: Seleccionar archivo, Abrir archivo

Si tienes más dudas con este tema, te agradecería que abrieses un nuevo tema, pues esto ya no tiene que ver con la pregunta original, y quizás otros expertos te puedan dar otro enfoque distinto.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas