Saltar al contenido

Excel y Bases de Datos SQL con ADO


Antoni

Recommended Posts

Hola:

A raíz de este post:

Excel y MySQL

He pensado que la respuesta, podría quedar como aporte.

Se trata de un conjunto de macros y funciones que permiten de forma sencilla:

Conectarse con una base de datos SQL (Acccess, MySQL, Oracle, SQL Server,...)

Borrar una tabla

Crear una tabla

LLenar una tabla

Consultar una tabla

Insertar filas

Modificar filas

Eliminar filas

Llenar una hoja Excel con los resultados de una consulta a una tabla.

En el adjunto, hay una macro para cada una de las acciones, en módulos independientes.

También existe un módulo con todas las acciones juntas en una sola macro.

De los principales comandos de ADO, se han realizado funciones para que el código de las macros se vea mas limpio

Función: Obtener una conexión

Función: Obtener un Recordset con una instrucción SELECT de SQL

Función: Ejecutar una sentencia SQL de actualización.

En el adjunto encontrareis 4 hojas:

Instrucciones

SQL (Log de SQL. Está controlado por las funciones anteriores.)

Hoja3 y Hoja4: Resultado de las consultas de los ejemplos

Es necesario unos mínimos conocimientos de VBA, SQL y Bases de Datos SQL.

No dudeis en preguntar.

Un saludo. "Macro".

Todas las macros han sido probadas sobre Access y funcionan correctamente.

Excel y Bases de datos SQL con ADO.zip

Enlace a comentario
Compartir con otras webs

Excelente aporte de parte de los dos mis mas sinceras felicitaciones ni idea q se podia hacer esto con macros, haber si para seguir aprendiendo estos maravillosos test de aprendisaje, se pueda utilizar con formularios e ir guardando, modificando, elimando, consultas y reportes...no se si me paso con el pedio al igual q muchos deseamos aprender de tan maravillosa herramienta como lo es excel, si abuse para tal información, me disculpo...

Enlace a comentario
Compartir con otras webs

Marco Antonio:

Soy el autor de la consulta Excel-MySql, y lo primero que quería decirte es que la información que has proporcionado es increible. Mis felicitaciones y muchas gracias por la aportación porque me ha sido de gran utilidad.

Después de estudiarme la información y aplicarla sobre una BD MySql, me surgen varias cuestiones:

1) En el caso de que tenga diversas Bases de Datos en MySql, ¿cual es la instrucción para dirigirme a una en concreto?

2) ¿se puede rellenar un comobox de excel utilizando una consulta de MySql en la que estén implicadas 2 tablas?

3) ¿pueden subirse archivos a MySql desde el vba excel?

4) Tengo instalado MySql a nivel local y funciona perfectamente, ¿se podría conectar vba excel con una BD MySql de un hosting?

Gracias.

Jose

Enlace a comentario
Compartir con otras webs

Hola a todos:

Adjunto un nuevo envío con mas ejemplos (Cuestiones 1, 2 y 3 de josapu).

En cuanto a la cuestión 4, ni idea, pero por intuición creo que va a ser que no.

Saludos a todos. "Macro".

PD: josapu, por favor, cualquier otra consulta relacionada con este tema, hazla a través del post que abriste en el foro de macros. Gracias.

Excel y Bases de datos SQL con ADO.zip

Enlace a comentario
Compartir con otras webs

Hay un error en el adjunto de ayer.

Sustituir esta fucnión:

Function ADO_CONEXION(CONEXION As Object, Optional DATABASE As Variant = "MyDB")
On Error GoTo ERROR_ADO_CONEXION

'======================================================
' Obtiene una conexión con la base de datos
'======================================================

Set CONEXION = New ADODB.Connection
Application.ScreenUpdating = False
ThisWorkbook.Worksheets("SQL").Cells(9, 2) = "ADO_CONEXION"
For x = 3 To 7: ThisWorkbook.Worksheets("SQL").Cells(x, 2) = "": Next x
CONEXION.Open DATABASE 'CONEXION POR ODBC

ADO_CONEXION = 0
Exit Function

'------------------------
ERROR_ADO_CONEXION:
ADO_CONEXION = 1
ThisWorkbook.Worksheets("SQL").Cells(5, 2) = Err.Number
ThisWorkbook.Worksheets("SQL").Cells(6, 2) = Err.Source
ThisWorkbook.Worksheets("SQL").Cells(7, 2) = Err.Description
'------------------------

End Function
[/CODE]

Un saludo.

Enlace a comentario
Compartir con otras webs

Crear una cuenta o conéctate para comentar

Necesitas ser usuario para poder dejar un comentario

Crear una cuenta

Registrarse para una nueva cuenta en nuestra comunidad. ¡Es fácil!

Registrar una nueva cuenta

Conectarse

¿Ya tienes una cuenta? Conéctate aquí.

Conéctate ahora
  • 96 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      177
    • Comentarios
      90
    • Revisiones
      27

  • Crear macros Excel

  • Mensajes

    • Si  no me he liado con los paréntesis: Private Sub Worksheet_Change(ByVal Target As Range) Application.ScreenUpdating = False Application.Calculation = xlManual Application.EnableEvents = False If Not Intersect(Target, Range("$L$5:$Y$9")) Is Nothing Then Range("E22") = WorksheetFunction.Sum(Range("E4:E21")) Range("E23") = WorksheetFunction.Sum(Range("E4:E19")) Range("E24") = Range("E23") - WorksheetFunction.Sum(Range("I4:I7")) Range("I22") = WorksheetFunction.Sum(Range("I4:I21")) Range("I4") = Range("E23") * 0.1 Range("I5") = Range("EN10") * Range("EN11") Range("I6") = Range("E23") * 0.0127 Range("I7") = Range("E23") * 0.006 Range("I25") = Range("E22") - Range("I22") Range("I12") = Range("E24") * 0.03 Range("C7") = Range("EQ8") - Range("EQ9") + Range("EN13") + Range("EN14") + Range("EN15") + Range("EN16") Range("C9") = Range("EQ9") + Range("EN17") + Range("EN18") + Range("EN19") Range("E7") = Range("E4") / Range("C4") * 7 / 44 * 1.5 * Range("C7") Range("E8") = Range("E4") / Range("C4") * 7 / 44 * 0.3 * Range("C8") Range("E9") = Range("E4") / Range("C4") * 7 / 44 * 1.3 * 1.5 * Range("C9") End If Application.Calculation = xlAutomatic Application.ScreenUpdating = True Application.EnableEvents = True End Sub  
    • Hola de nuevo a ambos, @daren, tu archivo lleva excesivos datos, que creo no son necesarios para la información final que buscas. Te subo otro archivo, simplificado al máximo, que, si lo he entendido bien, con esta fórmula simplificada: =CONTAR.SI('Casos de Prueba'!I:I;"OK")*('Casos de Prueba'!I1="Resultados Ciclo "&COLUMNA(A5)) se calcularía el primer dato, que se encuentra en la columna I. Copiando la fórmula a la derecha las celdas que necesites, se completaría el rango.  Tu fórmula la coloco en D7, y esta nueva en D9, que como ves (si, repito, he interpretado bien lo que buscas), da los mismos resultados. ---------------------------------------------------------------- En cuanto a: Aquí tienes, en el mismo archivo (Hoja 3) lo que devuelve tu fórmula cuando hay un determinado dato en A1 y en B2. No llego a entender qué es lo que quieres exactamente.  Tal vez con una pequeña explicación de lo que esperas obtener, sea suficiente para poner el hilo a la aguja. ? ----------------------------------------------------------------- En el caso de que falte por añadir o evaluar alguna otra variable o parámetro (en tu primer post hablabas sólo de 'OK' y ahora veo que en el archivo figuran además 'KO' y 'BLOCK'), por favor, intenta emular el ejemplo del archivo que estoy subiendo; añade EXCLUSIVAMENTE esos datos en la hoja allá donde proceda, explicando dónde o cómo deben contarse o sumarse. Mejor trabajar siempre con datos anónimos y reducidos. Desconozco si en tu archivo alguno de esos datos puede considerarse confidencial, pero seguro que no interesan a nadie. Mucho mejor obviarlos. Saludos, Plantilla V3 (B).xlsx
    • buenas noches, quisiera saber si puedo mejorar mi macros que se encuentra en el evento change de la hoja de calculo de Excel, son códigos de cálculos básicos, además si me pudieran ayudar a reducir el código o darme algún tip para reducirlo yo mismo estaría muy agradecido.  de ante mano muchas gracias     Private Sub Worksheet_Change(ByVal Target As Range)     Application.ScreenUpdating = False     Application.Calculation = xlManual     Application.EnableEvents = False              If Not Intersect(Target, Range("$L$5:$Y$9")) Is Nothing Then             Sub todo()          Range("E22") = WorksheetFunction.Sum(Range("E4:E21"))     Range("E23") = WorksheetFunction.Sum(Range("E4:E19"))     Range("E24") = WorksheetFunction.Sum(Range("E23") - WorksheetFunction.Sum(Range("I4:I7")))     Range("i22") = WorksheetFunction.Sum(Range("I4:I21"))     Range("I4") = Range("E23") * 0.1     Range("I6") = Range("E23") * 0.0127     Range("I5") = Range("EN10") * Range("EN11")     Range("I7") = Range("E23") * 0.006     Range("I25") = Range("E22") - Range("I22")     Range("I12") = Range("E24") * 0.03     Range("C7") = WorksheetFunction.Sum(Range("EQ8") - (Range("EQ9"))) + Range("EN13") + Range("EN14") + Range("EN15") + Range("EN16")     'Range("E7") = WorksheetFunction.Sum(Range("C7") * ((Range("E4") * 0.0077777)))     Range("C9") = Range("EQ9") + Range("EN17") + Range("EN18") + Range("EN19")     'Range("E9") = WorksheetFunction.Sum(((((Range("E4") / Range("C4")) * 7) / 45) * 1.3) * 1.5) * Range("C9")     'Range("E8") = WorksheetFunction.Sum(((((Range("E4") / Range("C4")) * 7) / 45) * 0.3)) * (Range("C8"))     Range("E9") = WorksheetFunction.Sum(((((Range("E4") / Range("C4")) * 7) / 44) * 1.3) * 1.5) * Range("C9")     Range("E8") = WorksheetFunction.Sum(((((Range("E4") / Range("C4")) * 7) / 44) * 0.3)) * (Range("C8"))     Range("E7") = WorksheetFunction.Sum((((Range("E4") / Range("C4")) * 7) / 44) * 1.5) * Range("C7")          End Sub              End If                  Application.Calculation = xlAutomatic     Application.ScreenUpdating = True     Application.EnableEvents = True     End Sub
    • Buenas perdonad la espera adjunto el fichero Excel y explico mas detallado lo que me solicitan: Lo que me solicitan es que esos CP de la pestaña Casos de prueba los cuales tienen formulas para que cuando se copien y peguen junto a sus pasos el CP se va autoincrementando a 1,2,3 etc...., pero si copias ese CP bien solo con el primer paso o con todos sus  pasos y lo insertas entre dos CP no continua con la numeración, como se ve en la foto al hacer eso el CP insertado continua con la numeración CP2 y el de abajo pone también CP2 no se incrementa ni ese ni el valor de CU que hay a la derecha que también es incremental. Necesitaría que continuara con esa numeración aun insertándolo entre medio de 2 tanto el CP como el CU de la derecha. También me solicitan que el campo Ciclo 1 de la pestaña Resumen es auto incremental cuando copias y pegas va sumando 1, pero en las formulas referentes a Ok KO Y bloqueo al copiar y pegar se mantiene la misma formula , la idea es que cuando copies y pegues la fila donde están los ciclos se autoincremente Ciclo a 1,2,3,4 etc... y la formula de los campos OK,KO y Bloqueos se incremente también pasando de la columna I a la J  luego a la k etc... y que en Resultados Ciclo el numero de la formula también se incremente Resultados Ciclo 1 , 2 ,3 etc... que cambie la columna a la vez que el numero de Resultados Ciclo. Gracias por adelantado un saludo. Plantilla v3 Pruebas.xlsx  
    • Saludos amigos espero estén bien Estoy intentando hacer un formulario que me convierta unidades de masa sin embargo  en el mejor de los casos solo he podido lograr la conversión de una unidad a la vez en los TextBox 1, 3, 5, 7, 9, 11 y 13 y cuando lo logro el resultado que se copia  en la celda no se corresponde con el obtenido originalmente en el Textbox del Formulario (frmconv)  ejemplo al convertir 1900 Kg a Lb el resultado en el TextBox1 =4188,78298142 sin embargo al guardar el resultado lo que se copia en la Celda  "F11" es  418.878.298.142,00, adicionalmente el resultado de la conversión no se visualiza inmediatamente por lo que debo de hacer click en los TextBox 1, 3, 5, 7, 9, 11 y 13  para ver el resultado. Mucho les sabre agradecer la ayuda que me puedan brindar. PRUEBA.xlsm
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.