|
Access y calendarios (II) |
|
|
|
miércoles, 03 de marzo de 2010 |
| Quiero agradecer de nuevo los elogios de aquellos/as que nos leeis, expecialmente los de aquellos/as interesados en Access y las noticias que muy de tarde en tarde incluimos en nuestra web sobre ese tema. En el último tutorial que os trajimos sobre Access explicábamos cómo insertar un control de calendario en un formulario de manera que al acceder al campo fecha deseado se activara dicho calendario (que había estado oculto hasta entonces) y nos permitía seleccionar una fecha que se insertaba automáticamente en el campo de formulario mencionado. Se trataba de un sencillo ejemplo de cómo conseguir un efecto vistoso echando mano de los controles que incluye Access con sólo incluir unas pocas líneas en visual basic (vba). | | A lo largo de las últimas semanas he recibido varios correos con consultas al respecto y sobre todo preguntas sobre cómo mejorar el ejemplo que dejaba. Una de las preguntas se refería a cómo conseguir que el control de calendario fuese utilizado por dos o más campos diferentes de fechas sin necesidad de insertar tantos controles de calendario como campos de formulario con fechas tuviésemos. La verdad es que me ha parecido interesante, incluso necesario, poder mejorar el pequeño tutorial que os dejé y de ahí que hablemos de nuevo sobre este aspecto. Aquellos/as que no leísteis en su día la primera parte de este tutorial podéis hacerlo a través del siguiente enlace: ACCESS y CALENDARIOS 1ª PARTE |
Podemos seguir muchos métodos para poder utilizar el control calendario con varios campos diferentes. Lo primero quizás sería pensar repetir el proceso dos veces, es decir, tener dos controles calendario que se activarían desde dos campos diferentes. Bueno podría ser una forma pero quizás no sea la más elegante y desde luego nos encontraríamos con un serio problema si necesitásemos utilizar el control calendario desde múltiples campos de fecha.
| Pero hay una manera mucho más sencilla. Antes de nada deberíamos abrir la tabla e incluir un nuevo campo de fecha. Posteriormente en el formulario deberíamos crear un nuevo control Combobox que se llamase por ejemplo FECHA_PAGO. Tras esto habría que acceder al Panel de Visual Basic para hacer el resto de nuestro trabajo tal y como explicabamos en la primera parte de este tutorial. Lo esencial sería declarar una variable a la que podríamos llamar FECHAORIGEN y que sería del tipo ComboBox. Sería una especie de comodín que iríamos modificando en función de nuestras necesidades. De esta forma, justo debajo del "Option Compare Database" incluiríamos una línea tal que así:
| | Dim FECHAORIGEN As ComboBox | | | Después, dentro del código correspondiente al evento Mouseover del control FECHA_PAGO establecemos lo siguiente: | Private Sub FECHA_FACTURA_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Set FECHAORIGEN = FECHA_FACTURA 'Aquí usamos la variable "comodín" y la igualamos al control que nos interesa Calendar0.Visible = True Calendar0.SetFocus Calendar0.Value = FECHA_FACTURA.Value End Sub
| | | Hacemos lo propio con nuestro segundo control combobox de fechas. No creo necesario poner el código porque realmente sólo hay que cambiar los valores referentes al nombre del control y si alguien tiene algún problema siempre podría acceder al código del archivo de access que incluyo. Ahora nos vamos al evento CLIC del calendario y sólo tenemos que cambiar las líneas que hacían referencia al control FECHA_FACTURA y cambiarlas por la variable "comodín". Deberías quedar más o menos así:
| Private Sub Calendar0_Click() FECHAORIGEN.Value = Calendar0.Value 'Ahora aquí hacemos referencia a la variable comodín que ya tiene su valor establecido FECHAORIGEN.SetFocus Calendar0.Visible = False End Sub | | | Bueno, creo que no hay realmente mucho que explicar pero en por si acaso os adjunto un archivo rar con la base de datos y sus modificaciones para que cualquiera pueda verlo más claramente. Podréis comprobar que he insertado algunas líneas más de código que sirven es para que cuando el campo fecha esté vacío (sea nulo) utilice la fecha actual en lugar de tomar la primera que le venga en gana. Si el campo contiene una fecha, lógicamente utilizaría la que nos interesa. Espero que os sea de utilidad.
| DESCARGAR BASE DE DATOS DE EJEMPLO
| Si tenéis cualquier sugerencia o duda podéis contactar conmigo en... | |