Es esta entrada os mostraré cómo conectar a una base de datos desde Microsoft Excel nada mas abrir el documento o libro. Os dejo el código fuente necesario para funcionar y una base de datos de ejemplo.
Es necesario disponer como mínimo de Excel 2007 en adelante.
La base de datos es en formato Access 2007 y/o superiores. Posee una password de entrada (demo). Cuando se abre la hoja de cálculo Excel, tiene asociado un evento Workopen con las rutinas necesarias para conectar con la base sin necesidad de realizar un DSN. Podría aplicarse cambiando la cadena de conexión a otras bases. Gracias a ello, tenemos la posibilidad de realizar procesamiento de datos en la base sobre la hoja de cálculo. Posibles tareas como calcular datos con formulación en función de los datos de la base.
Para ver el código fuente tendremos que usar la contraseña demo.
En función del nivel asignado en Access, colocado en la variable Global_Nivel, podremos hacer ciertas cosas como mostrar controles, fórmulas, etc…
Cuando activemos las macros al iniciar, se nos solicitará introducir un usuario y una password.
Una vez validados, nos mostrará los datos y cambiará de color la celda.
Para activar la pestaña del ribbon “Programador”, es necesario cambiar las opciones de Excel.
El fichero Excel es una libro con macros, dentro, en sus opciones, se han activado las siguientes referencias. Es interesante conocerlas y ver sus posibilidades en caso de conectar con otro tipo de gestores o sistemas.
Para ver el código generado en el IDE, es preciso usar la password, demo. Mediante esta técnica protegemos todo el código del libro, ya que a diferencia de Access, en Excel no se puede compilar las hojas para compilar el código.
Muestro un fragmento del código que valida usuarios (ejemplo).
Private Sub Workbook_Open() 'Procedimiento creado por Oscar de la Cuesta Campillo ' www.palentino.es On Error Resume Next mbMacrosEnabled = True 'Pedir el usuario y password login = InputBox("Introduzca el usuario (demo):", "Aviso Seguridad de Excel") Pass = InputBox("Introduzca la password (demo):", "Aviso Seguridad de Excel") Set cnn = New ADODB.Connection ruta_base = Application.ActiveWorkbook.Path & "\usuarios.accdb" cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0; " & _ "Data Source=" & ruta_base & ";" & _ "Jet OLEDB:Database Password=demo" Set registro = New ADODB.Recordset Set registro_log = New ADODB.Recordset cSQL = "select count(*) as cuenta from usuarios where login ='" & LCase(login) & "' and password = '" & LCase(Pass) & "';" registro.Open cSQL, cnn, adOpenDynamic, adLockOptimistic registro_log.CursorType = adOpenOptimistic registro_log.LockType = adLockOptimistic registro_log.Open "log", cnn 'Nos preparamos para la gestión del log registro_log.AddNew registro_log!Fecha = Date registro_log!hora = Time usuario = login registro_log!login = login registro_log!Password = Pass If registro!cuenta = 0 Then MsgBox "Acceso no válido, compruebe sus credenciales. ", vbCritical, "Aviso Seguridad" registro_log!fallido = "SI" registro_log.Update registro_log.Close registro.Close cnn.Close Application.Quit Else 'Mostramos la barra de menus si se poseen los permisos adecuados registro_log!fallido = "NO" registro_log.Update registro_log.Close registro.Close 'Establecemos las variables globales Global_usuario = LCase(usuario) Global_Password = LCase(Pass) Set registro = New ADODB.Recordset cSQL = "select nivel from usuarios where login ='" & LCase(login) & "' and password = '" & LCase(Pass) & "';" registro.Open cSQL, cnn, adOpenDynamic, adLockOptimistic 'Se establece el nivel de acceso a la entrada global_nivel = registro!Nivel registro.Close cnn.Close DoCmd.Close MsgBox "Entrada válida a Excel." Range("B10").Select ActiveCell.FormulaR1C1 = "El usuario " & login & ", posee un nivel " & global_nivel Range("B11").Select Selection.Interior.Color = 5287936 Range("B11").Select ActiveCell.FormulaR1C1 = global_nivel End If End Sub