Establecer valor en una macro con muchas opciones

En un formulario tengo una macro que me calcula un campo en función de la fecha.

El problema es que tengo ya tantas opciones de fecha que me da error y me dice que es demasiado largo. Lo hago con la función establecer valor y "SiInm".

Ejemplo

valor de [Canon]

si fecha es entre 01/01/01 y 31/10/01 = 1

si fecha es entre 01/11/01 y 31/01/02 = 2

si fecha es entre 01/02/02 y 31/10/03 = 3

Y así durante muchas opciones.

Como puedo hacerlo sin utilizar esto:

SiInm([DATA FACTURA] Entre #01/01/08# Y #31/12/08#;1;SiInm([DATA FACTURA] Entre #01/01/09# Y #31/12/09#;2;SiInm([DATA FACTURA] Entre #01/01/10# Y #30/06/11#;3;SiInm([DATA FACTURA] Entre #01/07/11# Y #30/09/11#;4;5))))

2 respuestas

Respuesta
1

Lo puedes programar a través de código. Te pongo un ejemplo genérico pues no creo que tengas problemas en adaptarlo:

1.- Creas un botón de comando. Sacas sus propiedades -> Pestaña Eventos -> Al hacer click, y le generas el siguiente código:

...

Private Sub ...
Dim vFech As Date
vFech = Me.DATA_FACTURA.Value
Select Case vFech
Case #1/1/2012# To #2/15/2012#
Me.Canon.Value = 1
Case #2/16/2012# To #3/15/2012#
Me.Canon.Value = 2
Case Else
Me.Canon.Value = 3
End Select
End Sub

...

Un par de cosas:

- Las fechas deben ir entre almohadillas, y debes escribirlas en formato inglés (mm/dd/yyyy)

- Debes acotar los periodos en cada "Case". Añades todos los "Case" que necesites

- El último "Case Else" se ejecuta cuando no se cumple ninguna de las condiciones anteriores. Ojo: siempre debe ser el último!

- La estructura del case es muy sencilla:

Case <condición>

valor si se cumple la condición

En este caso, le asignamos el valor que toque a través de la expresión Me.Canon.Value = <valor que quieras>

Y eso es todo.

Te aconsejo que antes de matarte a escribir "Cases" hagas una rutina pequeña, como la que te he escrito, y la pruebes, para comprobar que todo funciona correctamente. Si funciona como esperas puedes seguir añadiendo Cases (es una sugerencia, claro).

Ya me dirás qué tal.

Respuesta
1

Deberías programarla directamente en VBA y usar "select case" si tienes muchas opciones anidadas

Echale un ojo a esto por ejemplo:

http://excelforo.blogspot.com/2010/04/select-case-anidado.html

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas