Pasar valor a un campo de un formulario desde un subformulario

Tengo una base de datos en access que cuenta con un formulario de nombre (Form Pedidos) y dentro del mismo tengo un subformulario de nombre (SubForm Detalles de Pedidos) por lo que al abrir el formulario de pedidos me muestra una tabla con los detalles del pedido. En el subformulario tengo un campo llamado (Total) y en su orígen de datos la función: =[Cantidad]*[Precio]. En el pie del subformulario tengo otro campo llamado (SubTotal) que no se muestra y en su orígen de datos la función: =Sum([Cantidad]*[Precio]). Ahora, en el formulario (Form Pedidos) quiero mostrar el valor del campo (SubTotal), despues de tanto buscar en internet encontré la variante de poner en el campo del formulario donde quiero mostrar el valor del SubTotal del subformulario, llamado (SubTotalPedidos) la función: =[SubForm Detalles de Pedidos].[Form]![SubTotal]. Todo muy bien cuando abro el documento de access, al abrir el formulario (Form Pedidos) me muestra el subtotal en el campo (SubTotalPedidos), PERO, al activar en el centro de confianza la opción de MACROS y VBA en el campo del formulario (SubTotalPedidos) me deja de mostrar el valor y me muestra ERROR y necesito activar las macros para que me funcione bien la base ya que tengo algo de VBA y macros.

No sé por qué pasa eso, a lo mejor he hecho algo mal o hay alguna otra variante para mostrar en un formulario un valor de un sub formulario.

Estaría muy agradecido si me pudieran ayudar ya que llevo en esto varios días estancado.

Respuesta
1

Javier: En mi opinión eso no tiene que ver con la acivación o desactivación de Macros.

Si en el Formulario te muestra un Error, es porque en la suma del SubFormulario la hay.

Provisionalmente muestra ese Control a ver que resultado tiene.

Quizá como seguridad yo le pondría en lugar de

=Sum([Cantidad]*[Precio]) >> = Sum o Suma, dependiendo de la versión de Access. = Sum(Nz([Cantidad]*[Precio];0)

Así fuerzas a Cero el Nulo. Saludos >> Jacinto

Hola Jacinto, gracias por tu respuesta tan rápida.

Probé a poner lo que me sugieres en el campo (SubTotal) del subformulario y me daba un error y me decía que faltaba un paréntesis y al final lo puse así: = Sum(Nz([Cantidad]*[Precio];0)) Con dos paréntesis al final pero todo siguía igual, al abrir el documento lo muestra todo y al activar las macros deja de funcionar, MUY EXTRAÑO.

Lo que hice fue hacer la misma base de datos en un nuevo documento de access y al fin todo trabaja normal con macros activas o sin ella, al parecer el documento de access tenía algún problema, no se cual, pero ya me había pasodo algo como eso, tenia una base de datos y de pronto en algunos formularios, los primeros que había creado, no me dejaba abrir el código VBA, al final tuve que hacer la misma bd en otro documento nuevo y todo normal. Bueno, muchísimas gracias por tu apoyo y tu tiempo.

Tengo otra pregunta más o menos relacionada. En el mismo formulario principal (Form Pedidos) tengo un campo llamado (TOTAL) donde resto el dichoso campo que al fin logure mostrar en el formulario principal con un campo llamado (Descuento) el cual tiene origen de la tabla (Pedidos), en esa misma tabla tengo un campo llamado (Total). ¿Pudiera guardar el valor calculado del campo independiente (TOTAL) en el campo Total de la tabla (Pedidos)?

Disculpa por hacerte esta pregunta aquí, no se si está correcto porque soy nuevo en este sitio pero me gustaría aprovechar ya que estás al tanto de mi situación. Saludos - Javier

Javier: Lo puedes hacer abriendo un Recordset contra la Tabla Pedidos, filtrando con el IdPedido que tendrás en el Formulario, editando y actualizando ese campo. Otro método es con una consulta de Actualización y otra que se me ocurre es un control oculto en el Formulario, que tenga como Origen el Campo Total de la tabla Pedidos.

Ese control le pasas el Valor en algún evento que ya tengas.

Si Optas por la segunda Opción por ejemplo.

Dim StrSQL As String

StrSQL = "UPDATE Pedidos SET Pedidos.[Total]= “ & Me.Total.Value & “ WHERE IdPedido = “ & Me.IdPedido

DoCmd.SetWarnings False
CurrentDb.Execute StrSQL, dbFailOnError
DoCmd.SetWarnings True

StrSQL = ""

Lo adaptas a tus Nobres de Controles y Campos. Saludos >> Jacinto

Hola Jacinto nuevamente. En caso de usar el código que me mandaste, en que lugar exactamente tendría que ponerlo. El problema es que no tengo mucho conocimiento de códigos ya que no llevo mucho trabajando con access y estoy en proceso de aprendizaje.

Javier: Sin ver los Eventos que tienes ya programados, tenemos el riesgo de poner uno innecesario y /o inadecuado. En el principal que creo llamas Form Pedidos, que es donde tendrás el IdPedido >>

Prueba en el Before Update del Formulario así:

Private Sub Form_BeforeUpdate(Cancel As Integer)

Dim StrSQL As String

StrSQL = "UPDATE Pedidos SET Pedidos.[Total]= “ & Me.Total.Value & “ WHERE IdPedido = “ & Me.IdPedido

StrSQL = ""

End Sub

Ya me contarás. Saludos >> Jacinto

Hola Jacinto, disculpa que me demoré en contestar pero estaba muy ocupado con otros asuntos y ahora fue que pude retomar de nuevo nuestro tema.

Lo que hice fue una base de prueba nueva donde solamente tengo la tabla (Pedidos) y la tabla (Detalles de Pedidos) y a su vez el formulario (Form Pedidos) y el subformulario (SubForm Detalles). En el formulario tengo el famoso campo calculado que pasé del subformulario y tengo otro campo calculado llamado (TotalF) el cual quiero pasar para el campo llamado (Total) de la tabla (Pedidos). En el evento del formulario BeforeUpdate puse el código que me mandastes modificando el nombre del campo calculado que quiero pasar al campo (Total) de la tabla por TotalF y quedó así:

Private Sub Form_BeforeUpdate(Cancel As Integer)

Dim StrSQL As String

StrSQL = "UPDATE Pedidos SET Pedidos.[Total]= “ & Me.TotalF.Value & “ WHERE IdPedido = “ & Me.IdPedido

DoCmd.SetWarnings False
CurrentDb.Execute StrSQL, dbFailOnError
DoCmd.SetWarnings True

StrSQL = ""

End Sub

El problema es que no me funciona y despues de poner el código los campos calculados del formulario me dejan de mostrar los números y me muestran ERROR. No se que hice mal, pero al cerrar la tabla y volverla a abrir, como en el caso anterior, me vuelve a mostrar los numeros en los campos calculados del formulario pero al activar la opción de las macros me vuelve a mostrar la palabra ERROR disculpa tanta preguntadera pero me gustaría resolver ese problema. Saludos.

Javier: Con la finalidad de ir de modo más directo al problema y dado que al parecer tienes una BD con pocos Objetos, ponla en un enlace aquí o enviala a [email protected]

Vemos que se puede hacer, porque iríamos alargando el tema con poco rendimiento.

Mis saludos >> Jacinto

1 respuesta más de otro experto

Respuesta
1

Vamos a ver, si tu tienes confianza en TU BASE, en el centro de confianza- configuración de macros marca la casilla Habilitar todas las macros. De todas formas, las macros no sirven para nada, es mucho mejor hacer las cosas en VB. Lo único que te puede pasar con esto es que al abrir una base de datos cualquiera, te aparezca lo de "... habilitar contenido". Si te fías del que la hizo lo pulsas y se acabó.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas