jueves, 24 de mayo de 2007

Jugando con TempVars en Access 2007

Acces 2007 no añade niguna innovación a VBA a no ser las necesarias para manejar sus nuevos controles, o tipos de datos o las nuevas funcionalidades de éstos. Sin embargo, por necesidades de sus nuevas macros embebidas, añade una colección nueva de objetos, TempVars, con unas características de lo más interesantes.

TempVars, abreviatura de "Variables Temporales" es una colección de hasta 255 objetos que almacenan valores tipo Variant que tienen alcance global y dos propiedades: "Name" y "Value".

Ahí es nada. Tenemos algo que equivale a una variable globlal de la que podemos obtener o asignar su propiedad "Name" por código y que, como miembro de una colección, podemos añadir o quitar sobre la marcha, también por código.

No hace falta declaración previa y sólo asignándole un nombre y un valor es suficiente (Aunque tenemos el método Add). Por ejemplo, podemos decir:

TempVars!Mifecha = Date()

Y a continuación podremos acceder a su valor desde cualquier punto de nuestra aplicación, o desde cualquier punto de nuestra aplicación, podemos decir:

TempVars.Remove "Mifecha"

A simpre vista, no parece gran cosa, pero por ejemplo, estas características nos permiten hacer cosas como, por ejemplo, abrir un formulario en modo diálogo, pasarle como argumento el nombre de una variable, crearla sobre la marcha en el formulario diálogo asignándole valor y recuperarla y destruirla desde el formulario llamador:

DoCmd.OpenForm "MiformularioDialogo", , , , , acDialog, "Resp_" & Me.Name

Respuesta = TempVars("Resp" & Me.Name).Value

TempVars.Remove  TempVars("Resp" & Me.Name)

En el formulario diálogo sencillamente habríamos tenido que escribir:

TempVar(Me.OpenArgs) = MiValor

Parece interesante, pero no es gran cosa ¿Hay algo más?

Por supuesto :-) Cuando decimos que el alcance abarca toda nuestra aplicación, es toda nuestra aplicación, incluidas las consultas. Sí, sí, las consultas. Algo así es válido:

TempVars!MisApellidos = "Bengoechea Ibaceta"

"SELECT * FROM CLIENTES WHERE Apellidos = TempVars!MisApellidos"

¡Y funciona! Ya no es necesario construir la cadena SQL concatenando variables y delimitadores, la expresión anterior sustituye perfectamente a  

MisApellidos = "Bengoechea Ibaceta"

"SELECT * FROM CLIENTES WHERE Apellidos = '" & MisApellidos & "'"

Que no parece gran cosa, pero si en Vez de "Bengoechea Ibaceta" fuera "O'Donell", con TempVars, sería exactamente igual, pero construyendo la cadena tendríamos que añadirle bastante complicación.

Evidentemente, se parece mucho al uso de Parameters, pero más sencillo. Claro, que Parameters nos permite por ejemplo usar directamente el valor de un cuadro de texto, lo que también nos ahorra formateo de cadenas, delimitadores etc. ¿Se podrá hacer lo mismo con TempVars? Pues probamos:

Private Sub Comando22_Click()
TempVars!FiltroFecha = Me.FiltroFecha.Value
Me.Filter = "fecha_proceso = Tempvars!Filtrofecha"
Me.FilterOn = True
TempVars.Remove "FiltroFecha"
End Sub

¡Y funciona! Ha interpretado correctamente la fecha sin tener que pasarla al formato americano ni añadirle delimitadores.

Pensándolo bien, no necesitamos escribir la consulta en código VBA, puesto que no hay que construirla, que siempre será igual. Podemos tenerla guardada y simplemente, asignar los valores a nuestras variables TempVars cuando queramos.

Me parece que a partir de ahora vamos ausar mucho TempVars

miércoles, 23 de mayo de 2007

Access 2007. Mayor potencia como base de datos sin perder la sencillez

Son tantas las mejoras en la interfaz de usuario de Access 2007 que podría parecer que todo el cambio se ha limitado a mejoras estéticas. Sin embargo, hay algunos cambios que, sin llegar a convertir a Access en un verdadero servidor, sí que solucionan alguno de los problemas debidos precisamente a que no lo sea, es decir, Access se convierte no sólo en una base de datos más bonita, más amigable y con un entorno más rico, sino también en una base de datos más potente.

Sharepoint como “Back End” de Access

Es tan fácil, sólo unos pocos clics de ratón, que puede pasar desapercibida la profundidad del cambio: Access 2007 puede utilizar Sharepoint como “Back End”. Bueno, podemos pensar, eso no es tan importante, con Access 2003 ya podíamos tener vinculadas listas de Sharepoint; además, puede ser muy interesante para quien trabaje con Sharepoint, pero a mi aplicación no le aporta nada. Pues no. No se trata sólo de mejorar la relación con Sharepoint dentro de un entorno de mejor colaboración con el resto de las aplicaciones de Office, sino que esa colaboración es tan estrecha que suple algunas de las carencias de Access por no ser un verdadero servidor de datos. Sharepoint es una novia que le ha salido a Access y todo apunta a que acabará en feliz matrimonio.

Sharepoint ofrece mucho más a los usuarios de Office, pero en lo que nos vamos a centrar aquí es en las posibilidades que abre como “back end” de Access.

Seguridad, usuarios y seguimiento de cambios

Un clic de ratón y movemos nuestras tablas a un servidor Sharepoint (Datos Externos->Listas de Sharepoint->Mover a Sharepoint). Sólo hemos tenido que indicar la URL del sitio Sharepoint e identificarnos con nombre de usuario y contraseña, y Access se ha encargado de copiar todas nuestras tablas al sitio y vincularlas a nuestra aplicación.  Ya podemos trabajar con ellas como con cualquier tabla vinculada de Access. Muy bien, muy bonito y muy fácil, pero ¿Para qué me sirve?

Vamos a mirar las tablas vinculadas. Resulta que se han añadido nuevos campos y ahora tenemos el usuario y la fecha con la hora en que se ha creado el registro, y el usuario y la fecha con la hora en que se ha modificado en la última ocasión. Sharepoint se ha encargado del control y la gestión de los cambios, pero además, si nos vamos al “site”, vemos que Sharepoint tiene un completo sistema de gestión de usuarios y permisos, más sencillo de usar y más seguro que el que proporcionaba Access. No necesitamos andar navegando por el sitio para modificar permisos o el flujo de trabajo: en la banda de opciones de Access se han añadido unos accesos directos para ir directamente al formulario que lo gestiona.

En relación con el seguimiento de cambios, Access 2007 ha añadido otra característica muy interesante a los campos memos. La última de las propiedades en el diseño de este tipo de cambios, es “Sólo anexar”. Si “Sólo anexar” es verdadero, una vez que se ha guardado el registro ya no podremos hacerle cambios, no es que no podamos escribir nada en él, es que no lo podemos corregir, sólo escribir todo de nuevo. A primera vista, no se ve utilidad pero, pulsando con el botón derecho del ratón sobre el campo, se le ve el sentido cuando se muestra una lista con todas las modificaciones que ha sufrido, incluido el autor y la hora, e incluso tenemos la posibilidad de recuperar una versión anterior. Parece que los memos empiezan a no ser tan “memos” ;-).

Con sólo un par de clics de ratón hemos conseguido implementar a nuestra aplicación un sistema completo de gestión de cambios con identificación del usuario que los realiza. Esto es algo que, por ejemplo, para algunas bases de datos exigía la ley de protección de datos española y que Access difícilmente podía implementar, pues, por más que controláramos a los usuarios desde los formularios, de nada servían si éstos modificaban los datos directamente desde las tablas. Algunos anhelábamos “triggers” en Access sólo para poder controlar cosas de éstas.

Papelera de reciclaje para nuestros registros borrados

¿Y los datos borrados? ¿Cómo podemos hacer un seguimiento de los cambios si cualquiera puede borrar registros? ¿Quién es el guapo que recupera un registro borrado en Access?

También de eso se encarga Sharepoint que tiene algo tan familiar y tan útil como es una papelera de reciclaje. Allí van a parar todos los registros borrados a la espera de que los borremos definitivamente o los restauremos.

Trabajar desconectados del servidor

Windows Sharepoint Services es una herramienta que viene incluida en las últimas versiones de Windows Server 2003 (aunque las posibilidades de interacción con Access que estamos viendo son de la versión beta), pero también existen servicios de “hosting” que proporcionan Sharepoint, de manera que también podemos tener nuestro “Back End” en un alojamiento de Internet y trabajar con los datos con la misma facilidad que si fueran tablas de Access. Es de suponer que en una intranet la velocidad sea al menos tan rápida como si trabajáramos con tablas vinculadas de Access, pero el tráfico en internet es lento, más con una aplicación “pesada” como Access, y hay que buscar estrategias para reducirlo. Recordsets desconectados, procedimientos almacenados (SQL Server está detrás de Sharepoint) … son remedios que conocemos, pero, desde luego, están muy lejos de lo simple que es poner una tabla como origen de datos de un formulario.

Volvemos a solucionar un problema complejo con un solo clic. Junto al icono que pulsamos para mover nuestros datos a Access, tenemos ahora otro que dice “desconectar todo”, lo pulsamos, esperamos un ratito mientras la aplicación trabaja, y ya tenemos nuestras tablas en una copia local y podemos trabajar a la velocidad a la que se trabaja con datos locales. Cuando hayamos terminado o queramos refrescar los datos, pulsamos el botón “Sincronizar” y nuestros datos se sincronizan con los del sitio, resolviéndose los conflictos de una forma muy clara y sencilla. Si lo preferimos, podemos pulsar “Volver a conectar todo” y trabajaremos de nuevo directamente con las listas de Sharepoint.

Sharepoint almacena sus datos en SQL Server y si no tenemos instalado SQL Server, al instalar Sharepoint éste instalará la versión Express.  Por tanto, podemos contar con la seguridad y fiabilidad de SQL Server, pero si tenemos la versión Express (MSDE con 2003) también tendremos sus limitaciones en cuanto a concurrencia de usuarios, etc. , así que no es ninguna idea descabellada trabajar de manera desconectada incluso en una intranet, pues reduciremos no sólo el tráfico, sino también el número de usuarios conectados simultáneamente y eso nos permitirá trabajar con muchos más puestos.

Colaboración con Outlook

Ahora la comunicación entre todas las aplicaciones de Office 2007 es mucho más estrecha, pero, desde mi punto de vista, destaca en especial la que hay entre Access y Outlook, primero, porque la facilidad de uso que se proporciona ahora responde a una demanda que no estaba bien satisfecha y, segundo, porque Microsoft se ha sacado de la manga la posibilidad de recopilar datos a través del correo electrónico, lo que nos abre un mundo que parecía reservado al desarrollo web.

Ahora es mucho más fácil importar o exportar contactos de correo electrónico, o enviar mensajes desde Access, pero eso podríamos verlo como parte de las mejoras de la interfaz de usuario y lo que ahora nos interesan son las nuevas potencialidades como base de datos.

Recopilación de datos a través del correo electrónico

Seleccionamos una tabla, vamos a la banda de opciones y pinchamos en Datos Externos->Recopilar Datos->Crear correo electrónico. Unos pocos pasos más siguiendo el asistente y ¡Magia! De nuevo con unos pocos clics de ratón, Access 2007 nos ha proporcionado una herramienta extraordinaria que hace nada era casi impensable o, al menos, muy, muy complicada de llevar a cabo. Nos ha creado un formulario web (o Infopath) a partir de la tabla seleccionada y lo ha enviado automáticamente a los contactos que hemos seleccionado directamente o bien a todos los contactos de una tabla que le hemos indicado.

A la vuelta de correo, con esos formularios cumplimentados, Outlook se encarga de ir anexando esos datos a nuestra tabla, de manera más o menos automática según hayamos elegido la opción en el asistente que creó el formulario. Si se trataba de un formulario web, el remitente necesitará un correo distinto para cada registro, pero si hemos utilizado un formulario Infopath (es necesario que el destinatario de correo tenga instalado Infopath) se pueden ir añadiendo múltiples registros en un solo formulario.

Esta posibilidad no dirá mucho a quien no la haya necesitado hasta ahora, pero para los que nos hemos visto copiando “a mano” lo que nos llegaba por correo electrónico o recurriendo a triquiñuelas tipo convertir texto a tabla, copiar y pegar, etc., esto sabe a miel sobre hojuelas.

Conclusión

Access 2007 no sólo ha creado un entorno de usuario mucho más rico, también incorpora características que le hacen mucho más potente como base de datos.

Es cierto que en versiones anteriores ya existía, por ejemplo, la posibilidad de utilizar Access como “Front End” de SQL Server y esto le dotaba de una potencia enorme, pero también es cierto que era a cambio de una complejidad que desvirtuaba un tanto la naturaleza de Access, caracterizada por la facilidad de uso.

Ahora, Access 2007 proporciona alguna de las posibilidades de bases de datos de servidor pero acompañadas de una facilidad de uso extraordinaria; de la misma manera que con unos pocos clics de ratón podemos mejorar el aspecto de nuestra aplicación, o añadirle calendarios,  memos RTF, etiquetas inteligentes… , también con unos pocos clics podemos añadirle cosas como trabajar desconectado, seguimiento de cambios, gestión de usuarios… que antes sólo eran posibles con servidores de datos y a cambio de un desarrollo complejo.

 

(Este artículo se ha publicado previamente, dividido en tres entregas, en "El rincón del experto" )

martes, 22 de mayo de 2007

Access 2007. Mayor potencia como base de datos sin perder la sencillez

Son tantas las mejoras en la interfaz de usuario de Access 2007 que podría parecer que todo el cambio se ha limitado a mejoras estéticas. Sin embargo, hay algunos cambios que, sin llegar a convertir a Access en un verdadero servidor, sí que solucionan alguno de los problemas debidos precisamente a que no lo sea, es decir, Access se convierte no sólo en una base de datos más bonita, más amigable y con un entorno más rico, sino también en una base de datos más potente.

Sharepoint como “Back End” de Access

Es tan fácil, sólo unos pocos clics de ratón, que puede pasar desapercibida la profundidad del cambio: Access 2007 puede utilizar Sharepoint como “Back End”. Bueno, podemos pensar, eso no es tan importante, con Access 2003 ya podíamos tener vinculadas listas de Sharepoint; además, puede ser muy interesante para quien trabaje con Sharepoint, pero a mi aplicación no le aporta nada. Pues no. No se trata sólo de mejorar la relación con Sharepoint dentro de un entorno de mejor colaboración con el resto de las aplicaciones de Office, sino que esa colaboración es tan estrecha que suple algunas de las carencias de Access por no ser un verdadero servidor de datos. Sharepoint es una novia que le ha salido a Access y todo apunta a que acabará en feliz matrimonio.

Sharepoint ofrece mucho más a los usuarios de Office, pero en lo que nos vamos a centrar aquí es en las posibilidades que abre como “back end” de Access.

Seguridad, usuarios y seguimiento de cambios

Un clic de ratón y movemos nuestras tablas a un servidor Sharepoint (Datos Externos->Listas de Sharepoint->Mover a Sharepoint). Sólo hemos tenido que indicar la URL del sitio Sharepoint e identificarnos con nombre de usuario y contraseña, y Access se ha encargado de copiar todas nuestras tablas al sitio y vincularlas a nuestra aplicación.  Ya podemos trabajar con ellas como con cualquier tabla vinculada de Access. Muy bien, muy bonito y muy fácil, pero ¿Para qué me sirve?

Vamos a mirar las tablas vinculadas. Resulta que se han añadido nuevos campos y ahora tenemos el usuario y la fecha con la hora en que se ha creado el registro, y el usuario y la fecha con la hora en que se ha modificado en la última ocasión. Sharepoint se ha encargado del control y la gestión de los cambios, pero además, si nos vamos al “site”, vemos que Sharepoint tiene un completo sistema de gestión de usuarios y permisos, más sencillo de usar y más seguro que el que proporcionaba Access. No necesitamos andar navegando por el sitio para modificar permisos o el flujo de trabajo: en la banda de opciones de Access se han añadido unos accesos directos para ir directamente al formulario que lo gestiona.

En relación con el seguimiento de cambios, Access 2007 ha añadido otra característica muy interesante a los campos memos. La última de las propiedades en el diseño de este tipo de cambios, es “Sólo anexar”. Si “Sólo anexar” es verdadero, una vez que se ha guardado el registro ya no podremos hacerle cambios, no es que no podamos escribir nada en él, es que no lo podemos corregir, sólo escribir todo de nuevo. A primera vista, no se ve utilidad pero, pulsando con el botón derecho del ratón sobre el campo, se le ve el sentido cuando se muestra una lista con todas las modificaciones que ha sufrido, incluido el autor y la hora, e incluso tenemos la posibilidad de recuperar una versión anterior. Parece que los memos empiezan a no ser tan “memos” ;-).

Con sólo un par de clics de ratón hemos conseguido implementar a nuestra aplicación un sistema completo de gestión de cambios con identificación del usuario que los realiza. Esto es algo que, por ejemplo, para algunas bases de datos exigía la ley de protección de datos española y que Access difícilmente podía implementar, pues, por más que controláramos a los usuarios desde los formularios, de nada servían si éstos modificaban los datos directamente desde las tablas. Algunos anhelábamos “triggers” en Access sólo para poder controlar cosas de éstas.

Papelera de reciclaje para nuestros registros borrados

¿Y los datos borrados? ¿Cómo podemos hacer un seguimiento de los cambios si cualquiera puede borrar registros? ¿Quién es el guapo que recupera un registro borrado en Access?

También de eso se encarga Sharepoint que tiene algo tan familiar y tan útil como es una papelera de reciclaje. Allí van a parar todos los registros borrados a la espera de que los borremos definitivamente o los restauremos.

Trabajar desconectados del servidor

Windows Sharepoint Services es una herramienta que viene incluida en las últimas versiones de Windows Server 2003 (aunque las posibilidades de interacción con Access que estamos viendo son de la versión beta), pero también existen servicios de “hosting” que proporcionan Sharepoint, de manera que también podemos tener nuestro “Back End” en un alojamiento de Internet y trabajar con los datos con la misma facilidad que si fueran tablas de Access. Es de suponer que en una intranet la velocidad sea al menos tan rápida como si trabajáramos con tablas vinculadas de Access, pero el tráfico en internet es lento, más con una aplicación “pesada” como Access, y hay que buscar estrategias para reducirlo. Recordsets desconectados, procedimientos almacenados (SQL Server está detrás de Sharepoint) … son remedios que conocemos, pero, desde luego, están muy lejos de lo simple que es poner una tabla como origen de datos de un formulario.

Volvemos a solucionar un problema complejo con un solo clic. Junto al icono que pulsamos para mover nuestros datos a Access, tenemos ahora otro que dice “desconectar todo”, lo pulsamos, esperamos un ratito mientras la aplicación trabaja, y ya tenemos nuestras tablas en una copia local y podemos trabajar a la velocidad a la que se trabaja con datos locales. Cuando hayamos terminado o queramos refrescar los datos, pulsamos el botón “Sincronizar” y nuestros datos se sincronizan con los del sitio, resolviéndose los conflictos de una forma muy clara y sencilla. Si lo preferimos, podemos pulsar “Volver a conectar todo” y trabajaremos de nuevo directamente con las listas de Sharepoint.

Sharepoint almacena sus datos en SQL Server y si no tenemos instalado SQL Server, al instalar Sharepoint éste instalará la versión Express.  Por tanto, podemos contar con la seguridad y fiabilidad de SQL Server, pero si tenemos la versión Express (MSDE con 2003) también tendremos sus limitaciones en cuanto a concurrencia de usuarios, etc. , así que no es ninguna idea descabellada trabajar de manera desconectada incluso en una intranet, pues reduciremos no sólo el tráfico, sino también el número de usuarios conectados simultáneamente y eso nos permitirá trabajar con muchos más puestos.

Colaboración con Outlook

Ahora la comunicación entre todas las aplicaciones de Office 2007 es mucho más estrecha, pero, desde mi punto de vista, destaca en especial la que hay entre Access y Outlook, primero, porque la facilidad de uso que se proporciona ahora responde a una demanda que no estaba bien satisfecha y, segundo, porque Microsoft se ha sacado de la manga la posibilidad de recopilar datos a través del correo electrónico, lo que nos abre un mundo que parecía reservado al desarrollo web.

Ahora es mucho más fácil importar o exportar contactos de correo electrónico, o enviar mensajes desde Access, pero eso podríamos verlo como parte de las mejoras de la interfaz de usuario y lo que ahora nos interesan son las nuevas potencialidades como base de datos.

Recopilación de datos a través del correo electrónico

Seleccionamos una tabla, vamos a la banda de opciones y pinchamos en Datos Externos->Recopilar Datos->Crear correo electrónico. Unos pocos pasos más siguiendo el asistente y ¡Magia! De nuevo con unos pocos clics de ratón, Access 97 nos ha proporcionado una herramienta extraordinaria que hace nada era casi impensable o, al menos, muy, muy complicada de llevar a cabo. Nos ha creado un formulario web (o Infopath) a partir de la tabla seleccionada y lo ha enviado automáticamente a los contactos que hemos seleccionado directamente o bien a todos los contactos de una tabla que le hemos indicado.

A la vuelta de correo, con esos formularios cumplimentados, Outlook se encarga de ir anexando esos datos a nuestra tabla, de manera más o menos automática según hayamos elegido la opción en el asistente que creó el formulario. Si se trataba de un formulario web, el remitente necesitará un correo distinto para cada registro, pero si hemos utilizado un formulario Infopath (es necesario que el destinatario de correo tenga instalado Infopath) se pueden ir añadiendo múltiples registros en un solo formulario.

Esta posibilidad no dirá mucho a quien no la haya necesitado hasta ahora, pero para los que nos hemos visto copiando “a mano” lo que nos llegaba por correo electrónico o recurriendo a triquiñuelas tipo convertir texto a tabla, copiar y pegar, etc., esto sabe a miel sobre hojuelas.

Conclusión

Access 2007 no sólo ha creado un entorno de usuario mucho más rico, también incorpora características que le hacen mucho más potente como base de datos.

Es cierto que en versiones anteriores ya existía, por ejemplo, la posibilidad de utilizar Access como “Front End” de SQL Server y esto le dotaba de una potencia enorme, pero también es cierto que era a cambio de una complejidad que desvirtuaba un tanto la naturaleza de Access, caracterizada por la facilidad de uso.

Ahora, Access 2007 proporciona alguna de las posibilidades de bases de datos de servidor pero acompañadas de una facilidad de uso extraordinaria; de la misma manera que con unos pocos clics de ratón podemos mejorar el aspecto de nuestra aplicación, o añadirle calendarios,  memos RTF, etiquetas inteligentes… , también con unos pocos clics podemos añadirle cosas como trabajar desconectado, seguimiento de cambios, gestión de usuarios… que antes sólo eran posibles con servidores de datos y a cambio de un desarrollo complejo.

 

(Este artículo se ha publicado previamente, dividido en tres entregas, en "El rincón del experto" )

jueves, 10 de mayo de 2007

La runtime de Access 2007 saldrá el 15 de mayo

Lo acaba de anunciar Clint Covintong en su blog http://blogs.msdn.com/clintcovington/.

Es una noticia esperada con ansiedad, primero, porque llega con retraso respecto al anuncio inicial y segundo porque ¡Será gratis! http://blogs.msdn.com/access/archive/2007/02/02/access-2007-runtime-and-developer-extension-will-be-free.aspx

 

 

Technorati tags:

viernes, 20 de abril de 2007

Nombres de colores en Access 2007

Un nuevo modo de usar los colores para Access 2007 es utilizando nombres de colores, parecido a los nombres que se usan en HTML pero en este caso más largos, más explícitos. Estos colores dependen del sistema operativo y más concretamente del Tema que esté seleccionado. Los presentados en la tabla corresponden al tema de Windows XP y pueden cambiar.

Aunque en Access 2003 ya existen estas constantes e incluso con su Nombre, (ver en ayuda Constantes de color  del sistema), esta nueva versión nos presenta las comentadas descripciones como valores seleccionables en la nueva lista desplegable de la propiedad "Color del  fondo".

 

Alguno de estos Nombres de Colores se puede usar desde VBA por el nombre de una constante, estas están declaradas en la referencia VBA (C:\Archivos de programa\Archivos comunes\Microsoft Shared\VBA\VBA6\VBE6.DLL) y que podemos observar varios tipos de asociaciones en la siguiente tabla,

Constante Valor 2 Color Descripción R G B Valor
vbScrollBars -2147483648   Barra de desplazamiento del sistema 212 208 200 0x80000000
  -2147483618   Barra de menús del sistema 220 220 220  
vbActiveTitleBar -2147483646   Barra de título activa del sistema 52 52 52 0x80000002
vbInactiveTitleBar -2147483645   Barra de título inactiva del sistema 116 116 116 0x80000003
vbActiveBorder -2147483638   Borde activo del sistema 212 208 200 0x8000000A
vbInactiveBorder -2147483637   Borde inactivo del sistema 212 208 200 0x8000000B
  -2147483609   Bordes/Líneas de cuadrícula 121 167 227  
  -2147483614   Descripción del texto 156 163 173  
vb3DHighlight -2147483628   Elemento 3D resaltado del sistema 255 255 255 0x80000014
  -2147483608   Elemento resaltado 251 140 60  
  -2147483619   Elemento resaltado de menú del sistema 190 190 190  
vbHighlight -2147483635   Elemento resaltado del sistema 190 190 190 0x8000000D
vbDesktop -2147483647   Escritorio del sistema 26 26 26 0x80000001
  -2147483623   Estática del sistema 181 181 181  
  -2147483610   Fila alterna 244 244 244  
vbGrayText -2147483631   Fila alternativa del sistema 100 100 100 0x80000011
  -2147483612   Fondo claro del encabezado 194 220 255  
vbInfoBackground -2147483624   Fondo de información sobre herramientas del sistema 255 255 225 0x80000018
vbApplicationWorkspace -2147483636   Fondo de la aplicación del sistema 128 128 128 0x8000000C
vbMenuBar -2147483644   Fondo de menú del sistema 255 255 255 0x80000004
  -2147483611   Fondo oscuro del encabezado 101 147 207  
  -2147483613   Formulario de fondo 237 237 237  
vb3DLight -2147483626   Luz 3D del sistema 226 226 226 0x80000016
vbWindowFrame -2147483642   Marco de la ventana del sistema 0 0 0 0x80000006
vbButtonFace y vb3DFace -2147483633   Parte frontal del botón del sistema 226 226 226 0x8000000F
vb3DDKShadow -2147483627   Sombra 3D del sistema 135 135 135 0x80000015
vbButtonShadow y vb3DShadow -2147483632   Sombra del botón del sistema 180 180 180 0x80000010
  -2147483607   Tema de Access 1 242 248 255  
  -2147483598   Tema de Access 10 0 34 77  
  -2147483606   Tema de Access 2 227 239 255  
  -2147483605   Tema de Access 3 214 232 255  
  -2147483604   Tema de Access 4 173 209 255  
  -2147483603   Tema de Access 5 142 187 245  
  -2147483602   Tema de Access 6 121 167 227  
  -2147483601   Tema de Access 7 101 147 207  
  -2147483600   Tema de Access 8 55 100 160  
  -2147483599   Tema de Access 9 32 77 137  
  -2147483616   Texto claro 214 232 255  
vbHighlightText -2147483634   Texto de elemento resaltado del sistema 0 0 0 0x8000000E
vbInfoText -2147483625   Texto de información sobre herramientas del sistema 0 0 0 0x80000017
vbTitleBarText -2147483639   Texto de la barra de título del sistema 255 255 255 0x80000009
vbWindowText -2147483640   Texto de la ventana del sistema 0 0 0 0x80000008
vbInactiveCaptionText -2147483629   Texto de título inactivo del sistema 244 244 244 0x80000013
vbButtonText -2147483630   Texto del botón del sistema 0 0 0 0x80000012
vbMenuText -2147483641   Texto del menú del sistema 0 0 0 0x80000007
  -2147483622   Texto estático del sistema 0 0 128  
  -2147483617   Texto negro 0 34 77  
  -2147483615   Texto oscuro 32 77 137  
  -2147483621   Título activo degradado del sistema 116 116 116  
  -2147483620   Título inactivo degradado del sistema 200 200 200  
vbWindowBackground -2147483643   Ventana del sistema 255 255 255 0x80000005

Hay otros colores de sistema que no tienen asociadas constantes pero que se pueden utilizar usando cualquier de los valores en notación Hexadecimal (sustituir 0x por &H),  en códigos de colores RGB o con el número de tipo Long de la columna Valor 2 y es el que realmente usa Access para establecer los colores.

Un ejemplo de los modos comentados podría ser el siguiente,

 

Prestar atención a la última línea, es un método rápido de conocer las posibilidades a usar.

Al escribir el . tras el nombre de la clase SystemColorConstants. Sale la lista con el nombre de las constantes.

Si no se usa VBA, se puede usar los siguientes formatos directamente sobre la ventana de propiedades,

En el Examinador de objetos podemos localizar estas constantes y sus valores seleccionando VBA como referencia y buscando el texto SystemColorConstants.

 

Mc.