Botón para subformulario en formulario

Quiero ejecutar un botón de comando desde un formulario para anexar los datos del resultado de una consulta que aparece en un subformulario a otra tabla (La he llamado Hoja2). El problema es que he probado de todas las maneras y no consigo referenciar al subformulario desde el formulario. ¿Alguna sugerencia?

Este es el código de mi botón, que me funciona en el subformulario en vista Formulario, pero necesito que esté en vista hoja de datos y ejecutarlo desde fuera:

Private Sub Comando18_Click()
ValorA = Me.MARCA
ValorB = Me.TIPO

SQL = "INSERT INTO Hoja2(Marca, Tipo) VALUES ('" & ValorA & "', '" & ValorB & "')"
DoCmd.RunSQL SQL
End Sub

1 Respuesta

Respuesta
3

Si Marca y Tipo son campos del subformulario, y el subformuario (ojo, el control subformulario, no el subformulario en sí) se llama subResultado, sería:

ValorA = Me.subResultado.Form.MARCA
ValorB = Me.subResultado.Form.TIPO

Un saludo.


Voy a probarlo... 

Tengo Formulario1, que es desde donde hago la consulta y aparecen los datos en el SubformularioConsulta1. El botón está en el Formulario1 y sí, los campos MARCA Y TIPO son campos del subformulario. No entiendo lo de SubResultado. Es el nombre que tengo que darle al botón en el formulario1? 

He probado a ponerlo así y dice que no encuentra el método o dato miembro... 

Private Sub Comando20_Click()

ValorA = Me.subformularioConsulta1.Form.MARCA
ValorB = Me.subformularioConsulta1.Form.TIPO

SQL = "INSERT INTO Hoja2(Marca, Tipo) VALUES ('" & ValorA & "', '" & ValorB & "')"
DoCmd.RunSQL SQL
End Sub

Ese error es el típico cuando el objeto no tiene el nombre que le pones en el código. Para agilizar la respuesta, ¿podrías subir una copia de tu BD, sin datos, en la que pueda ver el formulario y el subformulario?

Ya te lo preparé... pero no encuentro la opción de añadir archivo.... Te lo paso por privado?

Hola! ya lo conseguí con lo primero que me recomendaste  ;). Poniéndolo así (error mío, estaba nombrando mal el subformulario...), pero aun estando mi subformulario en vista de datos, si en el resultado salen 10 registros, solo me inserta en mi tabla Hoja2 un registro (el primero de los que sale...). Es un primer paso...

Private Sub Comando20_Click()

ValorA = Me.Subformulario_Consulta1.Form.MARCA
ValorB = Me.Subformulario_Consulta1.Form.TIPO

SQL = "INSERT INTO Hoja2(Marca, Tipo) VALUES ('" & ValorA & "', '" & ValorB & "')"
DoCmd.RunSQL SQL

Para compartir la BD, súbela a dropbox, o similar y pon aquí el enlace de descarga.

Sobre la duda nueva: si quieres que te inserte todos los registros de la consulta, tienes que hacer un bucle que recorra todos los regsitros del subformulario y en cada pasada ejecutar la SQL.

La idea sería ésta:

Private Sub Comando20_Click()
Dim rst As DAO.Recordset
Set rst = Me.Subformulario_Consulta1.Form.RecordsetClone
rst.MoveFirst
Do Until rst.EOF
   ValorA = Me.Subformulario_Consulta1.Form.MARCA
   ValorB = Me.Subformulario_Consulta1.Form.TIPO
   SQL = "INSERT INTO Hoja2(Marca, Tipo) VALUES ('" & ValorA & "', '" & ValorB & "')"
   DoCmd.RunSQL SQL
   rst.MoveNext
Loop
rst.close
set rst=nothing

Otra forma sería hacer el Insert directamente con los resultados de la consulta, algo así:

DoCmd.RunSQL "INSERT INTO Hoja2(Marca,Tipo) SELECT Marca, Tipo FROM NombreConsulta"

Donde nombre consulta será el nombre de la consulta sobre la que haces el subformulario.

¡Mil Gracias! 

Funcionan las dos perfectamente ;).

Yo te recomendaría que usases la segunda, es más "rápida" y consume menos recursos.

No dejes de valorar la respuesta ;-)

Un saludo.


Añade tu respuesta

Haz clic para o

Más respuestas relacionadas