He tomado tu respuesta de la IA, me parece muy acertada.
Lograr esto en un Formulario Continuo de Access tiene un grado de dificultad particular: si cambias la propiedad .DecimalPlaces o .Format mediante VBA, Access aplicará el cambio a todos los registros visibles al mismo tiempo, no fila por fila.
Para que cada fila mantenga su propio formato visual independiente, tienes dos caminos principales:
Opción 1: Formato Condicional (La más estable)
Esta es la solución ideal para formularios continuos porque Access gestiona el formato de cada instancia del control de forma individual.
Abre el formulario en Vista Diseño.
Selecciona los cuadros de texto que quieres afectar (txtPrecioUnitario, txtGananPerd, etc.).
Ve a la pestaña Formato > Formato condicional.
Crea una Nueva regla:
Tipo de regla: Seleccione "Expresión".
Expresión: [txtCategoria]="acciones"
Formato: Aquí viene el truco. No puedes cambiar la propiedad de decimales directamente, pero puedes aplicar un Formato de Número específico (como negrita o color) y, lo más importante, usar la siguiente opción si solo necesitas diferenciar visualmente.
Nota Crítica: El Formato Condicional estándar de Access no permite cambiar la máscara de entrada o los decimales dinámicamente. Si necesitas precisión visual estricta (0 vs 4), pasamos a la Opción 2.
Opción 2: Formateo mediante el Origen del Control (Cadenas de texto)
Para que un formulario continuo muestre 0 decimales en una fila y 4 en otra, la forma más efectiva es transformar el valor en una cadena de texto formateada directamente en el origen de datos.
Cambia el Origen del Control (Control Source) de tus cuadros de texto de la siguiente manera:
Para txtPrecioUnitario:
=IIf([txtCategoria]="acciones"; Formato([NombreDelCampoOriginal]; "Standard"); Formato([NombreDelCampoOriginal]; "#,##0.0000"))
Sustituye [NombreDelCampoOriginal] por el nombre real del campo en tu tabla/consulta.
Pros:
Contras:
Opción 3: VBA (Solo si el enfoque es el Registro Actual)
Si necesitas que el usuario pueda editar los datos y quieres que el formato cambie al entrar en el registro, usa el evento Al activar (On Current) del formulario:
Private Sub Form_Current()
Dim strFormato As String
If Me.txtCategoria = "acciones" Then
strFormato = "Fixed"
Me.txtPrecioUnitario.DecimalPlaces = 0
Me.txtGananPerd.DecimalPlaces = 0
ElseIf Me.txtCategoria = "FondInversiion" Then
strFormato = "Standard"
Me.txtPrecioUnitario.DecimalPlaces = 4
Me.txtGananPerd.DecimalPlaces = 4
End If
End Sub
Advertencia en Formularios Continuos: Al usar este código, notarás que al hacer clic en una fila de "Acciones", todas las filas del formulario cambiarán visualmente a 0 decimales. Al hacer clic en una de "Fondos", todas cambiarán a 4. Solo el registro activo tendrá el formato "correcto" según su categoría.
Resumen de Recomendación
Si los campos son para visualización/informes: Usa la Opción 2 (Función Formato en el origen del control). Es la única que permite ver decimales mixtos en la misma pantalla.
Si los campos son para edición de datos: Usa la Opción 3, aceptando que el formato visual de las filas inactivas parpadeará o cambiará según donde esté el cursor.