¿Cómo puedo multiplicar un campo en un subformulario?
En un subformulario si Pones =Suma([Campo1]) en el campo independiente que tenemos por debajo si te vasomando los valores, (isto es correcto), ¿mi pregunta es como puedo acer lo mismo pero en vez de sumar multiplicar?
2*2*2*2=16
Que yo conozca no existe una función en Access como la de Suma que lo que haga sea obtener el producto de los valores del (en tu ejemplo) Campo1.
La manera de obtenerlo es usar código VBA. Te copio un ejemplo que acabo de escribir y te lo comento brevemente.
Option Compare Database Option Explicit Private Sub Form_Load() On Error GoTo Err_Form_Load Dim misRegistros As Recordset, miMultiplo As Integer Set misRegistros = Me.RecordsetClone With misRegistros If .EOF And .BOF Then Me.CampoMultiploDeCampo1 = 0 .Close Exit Sub Else .MoveLast .MoveFirst miMultiplo = 1 Do Until .EOF = True miMultiplo = miMultiplo * misRegistros!Campo1 .MoveNext Loop End If End With Me.CampoMultiploDeCampo1 = miMultiplo Exit_Form_Load: Exit Sub Err_Form_Load: MsgBox Err.Description Resume Exit_Form_Load End Sub
En mi ejemplo tengo un formulario múltiple con un campo llamado Campo1 que contiene valores numéricos. En el pie del formulario tengo un campo independiente que he llamado CampoMultiploDeCampo1. Uso el evento Load del formulario (se ejecuta al cargar los datos que contiene el formulario) para hacer el cálculo, aunque podría usar otros eventos como el de después de actualizar algún valor en Campo1 o,,,
Ei código crea un recordset (conjunto de registros que en mi ejemplo denomino misRegistros) que es copia de los datos que contiene el formulario. Ejecuto un bucle por todos los registros y voy multiplicando el valor del Campo1 de todos los registros. Es decir, multiplico 1 por el valor de Campo1 del primer registro, con lo que tengo el valor de Campo1 del primer registro. Al llegar al segundo registro multiplico el valor obtenido antes por lo que haya en Campo1 de este registro, con lo que obtengo el resultado de multiplicar el campo1 del primer registro por el Campo1 del segundo registro, y así sucesivamente hasta llegar al último registro. Al final tengo el valor obtenido de multiplicar todos los valores de Campo1 y uso su valor poniéndolo en el campo resultado que está al pie del formulario (en el ejemplo CampoMultiploDeCampo1).
Esta manera de calcularlo usando recordsets es muy versátil, pudiendo poner otros campos en el pie del formulario para presentar todo tipo de cálculos que se puedan necesitar y que no estén en funciones incorporadas en Access.
Cordiales saludos.
Hola amigo, antes de más quiero dar las gracias por la respuesta a mi pregunta, pero ya que yo no se mucho de programación y como me contestaste a mi pregunta voy a explicar como tengo yo este proyecto.
Se trata de un subformulario con varios campos entre los cuales esta esse campo1. Inserido en un formulario
Yo realmente pretendo que esse campo se vaya multiplicando, para isso hice un campo independiente en el subformulario y hice otro en el formulario lo cual va a recoger los datos del campo independiente del subformulario.
Bueno creo que solo me falta poner tu código, ¿y esse es mi pregunta onde lo coloco?
seguramiente nel campo independiente del subformulario, ¿pero al cargar? ¿endatos no guardados?, o sea en los eventos de esse campo tiene muchas opciones, ya tente en datos no guardados, pero no funciona, también al cargar y tampoco, si pongo el código en dos eventos me da error bueno.
Pido desculpas por la molestas, y si me puedes ayudar agradezco tu ayuda gracias
Perdona la demora. Estoy bastante liado últimamente.
El código que te adjunté lo colocas en el evento Load del subformulario. Tienes que cambiar Me. CampoMultiploDeCampo1 e el código por Parent!. CampoMultiploDeCampo1, ya que el campo donde se muestra el valor de los múltiplos lo tienes en el formulario 'padre' que contiene el subformulario con los datos a multiplicar.
Esto te calcula este valor en el momento de abrir el formulario.
Para que cada vez que añadas un nuevo registro al subformulario se recalcule el campo CampoMultiploDeCampo1 debes de añadir casi el mismo código asociado al evento DespuesDeInsertar.
Esto hará que se haga el mismo cálculo cada vez que insertes un nuevo registro.
Private Sub Form_AfterInsert() On Error GoTo Err_Form_AfterInsert Dim misRegistros As Recordset, miMultiplo As Integer Set misRegistros = Me.RecordsetClone With misRegistros If .EOF And .BOF Then Parent!CampoMultiploDeCampo1 = 0 .Close Exit Sub Else .MoveLast .MoveFirst miMultiplo = 1 Do Until .EOF = True miMultiplo = miMultiplo * misRegistros!Campo1 .MoveNext Loop End If End With Parent!.CampoMultiploDeCampo1 = miMultiplo Exit_Form_AfterInsert: Exit Sub Err_Form_AfterInsert: MsgBox Err.Description Resume Exit_Form_AfterInsert End Sub
Cordiales saludos.
Antes de más quiero te dar las gracias por me teneres contestado, perdona por las molestias causadas a veces por personas que no entiendem mucho de programación como yo pero lo intento.
Yo veo que tus códigos están correctos ya que los experimente en otros formularios y si que funcionam. nel formulario que yo estoy trabajando al abrir me da um numero pero no es el múltiplo y cuando meto el segundo código me da um error nel resultado.
Así que desta vez veo que la forma más fácil de que yo lo pueda lograr es da siguiente fórmula. Te voy a dejar mi email que es el siguiente: [email protected]
Y si me contestas te enviare la aplicacion que estoy trabajando es una plicacion mui simple y seguramente que despues vere el error que estoy cometendo, como siempre quien no sabe le passan cosas destas pero es asi que se aprende errando, si tudo salira bien, entonces seriamos todos sabios ! rsrsr
Gracias
- Compartir respuesta