PROGRAMAR EN VBA MACROS PARA EXCEL: julio 2018

Conectar Excel con Excel Consulta SQL Rango Numeros con Datos Mismo Libro





El ejemplo de macro que se presenta a continuación permite consultar datos por un rango de números, es decir la macro busca en la base de datos los coincidentes con el rango de números que se solicita buscar y los muestra o presenta en la hoja de Excel.

La macro es unos de los vídeos pertenecientes a la saga denominada como conectar Excel con Excel - Sentencias SQL; es decir se realiza una conexión ADODB - OLEDB y se procede a consultar los datos con sentencias SQL, es decir se usa la codificación de VBA  asociada con sentencias SQL lo que permite una mayor rapidez en la búsqueda de datos, lo cual es muy útil para bases de datos grandes.

Desde el final del post se puede descargar el ejemplo en forma gratuita sin ninguna restricción, el código se puede adaptar a cada necesidad, Aporta por favor para sostener el sitio si está dentro de tus posibilidades, desde ya muchas gracias.

Si te estás iniciando en la operación de Excel o requieres afirmar conocimientos, recomiendo leer un excelente libro sobre Excel que te ayudará operar las planillas u hojas de cálculo, haz click acá, si quieres aprender sobre Excel, en inglés, entonces debes hacer click here. Si lo que necesitas es aprender o profundizar sobre la programación de macros con VBA este es unos de los mejores cursos on line que he visto en internet.

  

El vídeo verás la macro en acción con una explicación más detallada de su codificación y funcionamiento, recomiendo observar para una más fácil comprensión de la macro; suscribe a nuestra web desde la parte superior derecha de la página ingresando tu mail y a nuestro canal de You Tube para recibir en tu correo vídeos explicativos sobre macros interesantes, como  por ejemplo Recorre fila buscando y comparando datos de dos columnas en hojas distintasbuscar en listbox mientras escribes en textbox, como crear una factura o sale invoice y grabar guardar PDF XLS y enviar por mail, trabajando con filas, celdas, columnas, rangos y muchos ejemplos más.









Al descargar el ejemplos se podrá ver en el archivo de Excel, en la hoja1 una base de datos de unos 65.000 registros aproximadamente, también un Buscar que es el cual ejecuta la macro, el procedimiento procede a buscar en la base de datos mencionada todos los registros coincidentes entre un rango de números, el número inicial se ingresa en la celda I1 y el número final del rango en la celda K20.

La macro buscará los datos en la base de datos y los datos coincidentes los mostrará en la hoja2; para lograr lo mencionado, la macro crea una conexión ADODB - OLE DB, la cual permite utilizar sentencias SQL, sus siglas en ingles significan Structured Query Language o en Español Lenguaje de Consulta Estructurado.

⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛
Quizá sea de utilidad también

Conectar Excel con Word crear archivo e insertar datos


Conectar Excel con Access - Sentencias SQL

Como buscar datos en tres columnas con macros

⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛



⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛

En un primer momento se debe realizar la conexión ADODB con el mismo libro de Excel para ello se usa el siguiente código, estableciendo en el mismo código que la hoja tiene una cabecera con el nombre de la columnas, esto indica: HDR=Yes.

cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 8.0;HDR=Yes;"""

Realizada la conexión al libro de Excel en este caso se hace la consulta a una base de datos que está en el mismo libro de Excel, posteriormente se agregará un ejemplo para consultar datos en otro libro de Excel, esta consulta se hace sin abrir el libro; realizada la conexión se crea la string de consulta siguiente:

sql = "SELECT * FROM [" & "Hoja1$" & "] WHERE ID >= " & a.Range("I1") & " AND ID <= " & a.Range("K1") & " ORDER BY ID ASC"

La anterior permite consultar los datos de todas la columnas de la tabla en este caso se toma como tabla la hoja1, dependiendo del criterio (Where) cuando el dato analizado sea mayor o igual al menores de los datos del rango de datos en el ejemplo la celda I1 y los datos coincidentes menores al rango final en este caso el número final esta en la celda K1.

Obtenidos los datos (recordset), estos se cargan en memoria, para posteriormente pegarlos en la hoja2 a partir de la fila 2, comienzan a grabar los datos.

b.Cells(2, 1).CopyFromRecordset Data:=rs

El código anterior es el que permite pegar los datos guardados en memoria y que se obtuvieron al realizar la consulta, en la base de datos u hojas de Excel.

La codificación completa del ejemplo Conectar Excel con Excel Consulta Rango de Numeros con Datos en la Misma Hoja, se puede observar seguidamente y debajo de ello se podrá descargar el ejemplo el cual recomiendo para observar su codificación.


Código que se inserta en un módulo

Sub ConsutaSQLExcel()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim ctl As Object
Dim cn As ADODB.Connection, rs As ADODB.Recordset, sql As String
On Error Resume Next
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
Set a = Sheets("Hoja1")
Set b = Sheets("Hoja2")

cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 8.0;HDR=Yes;"""
sql = "SELECT * FROM [" & "Hoja1$" & "] WHERE ID >= " & a.Range("I1") & " AND ID <= " & a.Range("K1") & " ORDER BY ID ASC"

b.Cells.Clear
a.Range("A1:G1").Copy Destination:=b.Range("A1")
Set rs = cn.Execute(sql)
b.Cells(2, 1).CopyFromRecordset Data:=rs
b.Range("B:B").NumberFormat = "dd/mm/yyyy"
Set rs = Nothing
cn.Close
Set cn = Nothing
If b.Range("A2") <> Empty Then
MsgBox ("La busqueda se realizó con éxito"), vbInformation, "AVISO"
Else
MsgBox ("No se encontraron registros para el criterio de búsqueda"), vbInformation, "AVISO"
End If
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub

⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛


Si te fue de utilidad puedes INVITARME UN CAFÉ y de esta manera ayudar a seguir manteniendo la página, CLICK para descargar en ejemplo en forma gratuita.


If this post was helpful INVITE ME A COFFEE and so help keep up the page, CLICK to download free example.


Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends      

Como Inhabilitar Guardar y Permitir Guardar Como en Libro Excel





El ejemplo que se presenta permite inhabilitar el comando GUARDAR de Excel y habilitar Guardar Como, esto es útil cuando se tiene una plantilla maestra y no se desea que se modifique, pero si que se puedan guardar los datos.

Este ejemplo se incluye en la saga de vídeos relacionados con la modificación del Menu de Excel, Ribbon o Cinta de Opciones, no es necesario modificar la codificación XML como en otros casos, solamente con un para de códigos de VBA se puede lograr que el Libro de Excel solo permita GUARDAR COMO.

Descarga el ejemplo en forma gratuita sin ninguna restricción, el código se puede adaptar a cada necesidad, Aporta por favor para sostener el sitio si está dentro de tus posibilidades, desde ya muchas gracias.

Recomiendo leer un excelente libro sobre Excel que te ayudará operar las planillas u hojas de cálculo, haz click acá, si quieres aprender sobre Excel, en inglés, entonces debes hacer click here. Si lo que necesitas es aprender o profundizar sobre la programación de macros con VBA este es unos de los mejores cursos on line que he visto en internet.

  

El vídeo verás la macro en acción con una explicación más detallada de su codificación y funcionamiento; recibe las últimas macros subidas suscribiendo a nuestra web desde la parte superior derecha de la página ingresando tu mail y a nuestro canal de You Tube para recibir en tu correo vídeos explicativos sobre macros interesantes, como  por ejemplo Recorre fila buscando y comparando datos de dos columnas en hojas distintasbuscar en listbox mientras escribes en textbox, como crear una factura o sale invoice y grabar guardar PDF XLS y enviar por mail, trabajando con filas, celdas, columnas, rangos y muchos ejemplos más.








 



La macro es extremadamente sencilla, básicamente impide que el archivo de Excel se guarde, la única forma de guardar los datos es mediante guardar como asignándole otro nombre al archivo que se nuevo que se crea al guardar como.

La linea de comando que permite realizar lo mencionado en el ejemplo es la siguiente:

If SaveAsUI = False Then MsgBox "Comando Inhabilitado no es posible guardar el libro !!!", vbCritical + vbOKOnly, "INFRACCION DE USO !!!": Cancel = True

Esta línea de comando se debe agregar en ThisWorkbook en el evento "BeforeSave" del libro de Excel, para una más fácil comprensión, sugiero ver vídeo tutorial.


⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛
Quizá sea de utilidad también

Como pasar datos de un listbox a otro lixtbox con Enter


Como crear una colección de datos unicos

Como contar celdas vacias

⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛



⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛

Es preciso destacar que si se intenta modificar y adaptar a las necesidades de cada uno, se comente la linea de comando, es decir se le ponga un apostrofe ( ' ) delante del " ' If Save" de esta manera VBA interpreta lo escrito como un comentario y no un código.

Si no hacemos lo expresado en el párrafo anterior la macro no dejará guardar el libro, por ello primero se debe guardar y depurar el código del libro que se adaptó una vez que esté todo bien, guardar el archivo, luego se debe deshabilitar las macros para poder abrir el libro sin que se ejecuten las macros de esa forma podemos luego descomentar (sacar el apostrofe) la línea de comando que evita que se guarde el libro, guardar el libro y volver a habilitar las macros, de esa forma el código volverá a ser funcional y cuando se abra el libro de nuevo la macro tendrá en cuenta ese código y no permitirá guardar.

Para deshabilitar las macros temporalmente se debe ir a ARCHIVO luego a OPCIONES, posteriormente a CENTROS DE CONFIANZA,  luego a CONFIGURACIÓN DE CENTROS DE CONFIANZA, luego a CONFIGURACIÓN DE MACROS y seleccionar DESHABILITAR TODAS LAS MACROS si se requiere habilitar se debe hacer lo mismo y elegir HABILITAR TODAS LAS MACROS.

A continuación se muestra la codificación completa que contiene el ejemplo llamado Como Inhabilitar Guardar y Permitir Guardar Como en un Libro de Excel.

Código que se inserta en ThisWorkbook

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If SaveAsUI = False Then MsgBox "Comando Inhabilitado no es posible guardar el libro !!!", vbCritical + vbOKOnly, "INFRACCION DE USO !!!": Cancel = True
End Sub


Código que se inserta en un módulo

Sub guardar()
ActiveWorkbook.Save
End Sub


⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛


Si te fue de utilidad puedes INVITARME UN CAFÉ y de esta manera ayudar a seguir manteniendo la página, CLICK para descargar en ejemplo en forma gratuita.


If this post was helpful INVITE ME A COFFEE and so help keep up the page, CLICK to download free example.


Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends      

Como Evitar Robo Informacion Deshabilitar Copiar Cortar y Pegar Imprimir Guardar Como en Excel





Esta macro tiene como objeto evitar el robo de información, para ello a través de macro se inhabilita la combinación de teclas de copiar, cortar, pegar, guardar como, imprimir, que es Ctrl + P.

Para lograr lo mencionado se procede a modificar la programación XML del archivo de Excel, como así también se incorporan códigos que permiten inhabilitar la combinación de teclas programadas para realizar las funciones mencionadas, como: Ctrl + C (copiar); Ctrl + X (cortar); Ctrl + V (pegar).

Desde el final del post se puede descargar el ejemplo en forma gratuita sin ninguna restricción, el código se puede adaptar a cada necesidad, Aporta por favor para sostener el sitio si está dentro de tus posibilidades, desde ya muchas gracias.

Si te estás iniciando en la operación de Excel o requieres afirmar conocimientos, recomiendo leer un excelente libro sobre Excel que te ayudará operar las planillas u hojas de cálculo, haz click acá, si quieres aprender sobre Excel, en inglés, entonces debes hacer click here. Si lo que necesitas es aprender o profundizar sobre la programación de macros con VBA este es unos de los mejores cursos on line que he visto en internet.

  

El vídeo verás la macro en acción con una explicación más detallada de su codificación y funcionamiento, recomiendo observar para una más fácil comprensión de la macro; suscribe a nuestra web desde la parte superior derecha de la página ingresando tu mail y a nuestro canal de You Tube para recibir en tu correo vídeos explicativos sobre macros interesantes, como  por ejemplo Recorre fila buscando y comparando datos de dos columnas en hojas distintasbuscar en listbox mientras escribes en textbox, como crear una factura o sale invoice y grabar guardar PDF XLS y enviar por mail, trabajando con filas, celdas, columnas, rangos y muchos ejemplos más.









 


A veces se necesita tener una cierta protección de los datos contenidos en las hojas de Excel, es muy posible que para evitar el robo de información no se desee que los usuarios puedan copiar y pegar en otro libro de Excel, guardar el archivo con otro nombre e incluso no se requiera que los datos puedan ser impresos, para dar respuesta a estas necesidades la macro que se presenta en este post, denominado como evitar robo de información deshabilitar copiar cortar, pegar, imprimir y guardar como.

El ejemplo consta de dos partes, una primer parte agrega una serie de códigos en ThisWorkbook en el Libro de Excel y otra parte del código modifica la programación XML del mismo libro de Excel, suguiero descargar el ejemplo para ver su codificación XML, la cual puede ser editada con el Editor de XML, si no sabes como usarlo en el link se muestra como se utiliza el editor de XML, también podrás descargarlo.

⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛
Quizá sea de utilidad también

Como crear una factura con excel, guardarla y enviarla por mail automáticamente


Como enviar mail con archivo Excel y PDF mediante Outlook con Excel

Como hacer un link o hiperlink a google maps con Excel

⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛



⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛

En ThisWorkbook se agrega el código para inhabilitar la combinación de teclas para copiar, cortar, pegar, como así también el código necesario para deshabilitar el menú contextual que aparece presionando el segundo botón del mouse, la inhabilitación del menú contextual se hace con el siguiente código, que se debe colocar en el objeto ThisWorkbook del libro de Excel, a el accedemos con el Editor de VBA (Alt + F11)

Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Cancel = True
End Sub

Para lograr deshabilitar los menú o iconos que aparecen en la Barra Ribbon, se debe abrir el archivo de Excel con el Editor de XML y agregar el código que se expone a continuación, sugiero ver el vídeo tutorial donde se podrá observar como se realiza el procedimiento.


Código que se inserta en la programación XML del archivo Excel

<!-- Deshabilita opciones de Excel en ribbon o menu  -->


<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">

<commands>
<!-- Desabilita comando guardar conjuntaente con el siguiente -->
    <command idMso="TabSave" enabled = "false" /> 

<!-- Deshabilita Guardar como-->
    <command idMso="FileSaveAs" enabled = "false" />

<!-- Deshabilita 
    <command idMso="Copy" enabled = "false" />
CopySplitButton Copiar-->

<!-- Deshabilita Pegar-->
    <command idMso="PasteMenu" enabled = "false" />


<!-- Deshabilita Copiar-->
    <command idMso="CopySplitButton" enabled = "false" />

<!-- Deshabilita la barra de imprimir-->
      <command idMso="TabPrint" enabled = "false" />  

<!-- Deshabilita la impresión rapida con este y anterior se evita que se imprima-->
      <command idMso="FilePrintQuick" enabled = "false" /> 
</commands>

</customUI>


Código que se inserta en un módulo

Private Sub Workbook_Open()
Application.OnKey "^{c}", "" 'anula copiar
Application.OnKey "^{x}", "" 'anula cortar
Application.OnKey "^{v}", "" 'anula pegar
End Sub

Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Cancel = True
End Sub


⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛


Si te fue de utilidad puedes INVITARME UN CAFÉ y de esta manera ayudar a seguir manteniendo la página, CLICK para descargar en ejemplo en forma gratuita.


If this post was helpful INVITE ME A COFFEE and so help keep up the page, CLICK to download free example.


Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends      

Conectar Excel con Excel Consulta SQL Copia Datos de Una Hoja a Otra de Distinto Libro





En este ejemplo se mostrará Como Conectar a Otro Libro de Excel Copiar los Datos de Una Hoja y Pegarlos en Una Hoja de Otro Libro con SQL, es decir la macro no utilizará código de VBA para copiar los datos de un libro a otro, anteriormente se vio lo mismo pero los datos de copiaban de una hoja a otra del mismo libro.

En resumen para copiar los datos de un libro a otro, la macro no abrirá el libro, sino que para ello se crea una Conexión ADODB, la cual permitirá enlazar con el otro libro de Excel que necesitemos, obteniendo los datos que se necesiten sin abrir el Libro de Excel.

Descarga el ejemplo en forma gratuita sin ninguna restricción, el código se puede adaptar a cada necesidad, Aporta por favor para sostener el sitio si está dentro de tus posibilidades, desde ya muchas gracias.

Se recomienda leer un excelente libro sobre Excel que te ayudará operar las planillas u hojas de cálculo, haz click acá, si quieres aprender sobre Excel, en inglés, entonces debes hacer click here. Si lo que necesitas es aprender o profundizar sobre la programación de macros con VBA este es unos de los mejores cursos on line que he visto en internet.

  

El vídeo verás la macro en acción con una explicación más detallada de su codificación y funcionamiento, recomiendo observar para una más fácil comprensión de la macro; suscribe a nuestra web desde la parte superior derecha de la página ingresando tu mail y a nuestro canal de You Tube para recibir en tu correo vídeos explicativos sobre macros interesantes, como  por ejemplo Recorre fila buscando y comparando datos de dos columnas en hojas distintasbuscar en listbox mientras escribes en textbox, como crear una factura o sale invoice y grabar guardar PDF XLS y enviar por mail, trabajando con filas, celdas, columnas, rangos y muchos ejemplos más.








 


En primer lugar se debe descargar el ejemplo, desde el final del post se puede realizar en forma gratuita, el archivo comprimido contiene dos ficheros uno que es el que contiene la macro (extensión XLSM) y otro archivo XLSX que contiene los datos que se van a importar o copiar al fichero que contiene la macro, no interesa en que lugar de la PC se descompriman los archivos, mientras se guarden juntos, ello es, porque la macro busca en el directorio donde está el libro con la macro el otro archivo para importar los datos, ustedes pueden adaptar y dar la ruta necesaria del archivo que ustedes prefieran.

Como ya se vio en el ejemplo anterior, lo primero que se debe realizar es la conexión a la base de datos, que en este caso nos vamos a conectar a otro libro diferente del cual estamos trabajando, previamente cargamos en la variable mybook el libro del cual vamos a importar los datos; la conexión se realiza con el siguiente código:

mybook = ThisWorkbook.Path & "\Conectar Excel con Excel Consulta SQL Base Datos.xlsx"
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & mybook & ";Extended Properties=""Excel 12.0;HDR=Yes;"""

Luego se crea la cadena de texto o string de conexión de la siguiente forma, en este caso seleccionamos todas las columnas de la Hoja1 del libro del que se pretende importar datos.

sql = "SELECT * FROM [" & "Hoja1$" & "]"


⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛
Quizá sea de utilidad también

Como determinar el color de una celda


Como enviar mail con archivo Excel y PDF mediante Outlook con Excel

Como hacer un link o hiperlink a google maps con Excel

⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛



⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛

Luego se ejecuta la SQL guardando en el objeto rs (recorset) los datos obtenidos de la consulta realizada, en este caso son todos los datos de la Hoja1 del libro del que importamos los datos, que fue cargado en la variable mybook del ejemplo, luego de ello copiamos los datos del recorset a la hoja 2 del libro con la macro.

Set rs = cn.Execute(sql)
b.Cells(2, 1).CopyFromRecordset Data:=rs

Finalmente liberamos la variables para que no consuman recursos, de memoria de la PC, con los siguientes códigos:

Set rs = Nothing
cn.Close
Set cn = Nothing

El código completa del ejemplo Conectar Excel con Excel Consulta SQL Copia Datos de Una Hoja a Otra de Distinto Libro se muestra a continuación, mira el tutorial en vídeo para que sea más fácil entender el ejemplo.


Código que se inserta en un módulo

Sub ConsutaSQLExcel()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim ctl As Object
Dim cn As ADODB.Connection, rs As ADODB.Recordset, sql As String
On Error Resume Next
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
Set a = Sheets("Hoja1")
Set b = Sheets("Hoja2")

mybook = ThisWorkbook.Path & "\Conectar Excel con Excel Consulta SQL Base Datos.xlsx"
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & mybook & ";Extended Properties=""Excel 12.0;HDR=Yes;"""
sql = "SELECT * FROM [" & "Hoja1$" & "]"

b.Cells.Clear
a.Range("A1:G1").Copy Destination:=b.Range("A1")
Set rs = cn.Execute(sql)
b.Cells(2, 1).CopyFromRecordset Data:=rs
Set rs = Nothing
cn.Close
Set cn = Nothing
If b.Range("A2") <> Empty Then
MsgBox ("La base de datos de otro libro se copió con éxito"), vbInformation, "AVISO"
Else
MsgBox ("No se encontraron registros en la base de datos del otro libro"), vbInformation, "AVISO"
End If
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub


Sub BORRAR()
Sheets("Hoja2").Cells.Clear
End Sub

⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛


Si te fue de utilidad puedes INVITARME UN CAFÉ y de esta manera ayudar a seguir manteniendo la página, CLICK para descargar en ejemplo en forma gratuita.


If this post was helpful INVITE ME A COFFEE and so help keep up the page, CLICK to download free example.


Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends      

Conectar Excel con Excel Consulta SQL Copia Datos de Una Hoja a Otra del Mismo Libro





Anteriormente se mostró como lograr una conexion ADODB con un libro Excel, para poder utilizar luego sentencias SQL para consulta de datos, en este ejemplo se muestra como Conectar Excel con Excel y obtener todos los datos de una hoja y pegarlos en otra hoja del mismo libro de Excel.


En este ejemplo se copiaran todos los datos no teniendo en cuenta ningún criterio es decir copiará todos los datos de la hoja 2 por ejemplo y los pegará en la hoja 1, replicando absolutamente todos los datos sin criterio alguno en post siguientes se agregarán criterio como un rango de fechas, de números, etc., los invito a que comenten y sugieran que criterios requieres se tengan en cuenta para copiar datos, en base a ello se podrán realizar ejemplos, la base de esto es realizar bien la cadena de consulta SQL.

Desde el final del post se puede descargar el ejemplo en forma gratuita sin ninguna restricción, el código se puede adaptar a cada necesidad, Aporta por favor para sostener el sitio si está dentro de tus posibilidades, desde ya muchas gracias.

Si te estás iniciando en la operación de Excel o requieres afirmar conocimientos, recomiendo leer un excelente libro sobre Excel que te ayudará operar las planillas u hojas de cálculo, haz click acá, si quieres aprender sobre Excel, en inglés, entonces debes hacer click here. Si lo que necesitas es aprender o profundizar sobre la programación de macros con VBA este es unos de los mejores cursos on line que he visto en internet.

  

El vídeo verás la macro en acción con una explicación más detallada de su codificación y funcionamiento, recomiendo observar para una más fácil comprensión de la macro; suscribe a nuestra web desde la parte superior derecha de la página ingresando tu mail y a nuestro canal de You Tube para recibir en tu correo vídeos explicativos sobre macros interesantes, como  por ejemplo Recorre fila buscando y comparando datos de dos columnas en hojas distintasbuscar en listbox mientras escribes en textbox, como crear una factura o sale invoice y grabar guardar PDF XLS y enviar por mail, trabajando con filas, celdas, columnas, rangos y muchos ejemplos más.









 


La macro denominada Conectar Excel con Excel Consulta SQL Copia Datos de Una Hoja a Otra Hoja del Mismo Libro en primer lugar lo que hace es crear una conexión ADODB al mismo libro lo hace con el siguiente código:

cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 8.0;HDR=Yes;"""

Posteriormente y lo más importante es crear el String de Consulta o SQL que se denomina en este ejemplo, la SQL creada en este ejemplo es muy simple ya que no tiene filtro de datos por criterios sino que solicita que se consulten todos los datos de la base de datos a la tabla que se refiere.

Tengan en cuenta que cuando se crea este tipo de conexiones, se toma cada hoja de Excel como una tabla de base de datos interpretando que la primer fila es la que contiene el nombre de las columnas si el argumento HDR es igual a Yes, sugiero que así lo hagan cuando adapten a sus ejemplos, se puede comenzar los datos directamente en la fila 1, en este caso la macro refiere a cada columna como F1, F2 y así sucesivamente le va a llamar a cada columna.

⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛
Quizá sea de utilidad también

Como recorrer filas y buscar datos en base a criterios

Como recorrer filas comparar y colorear filas en base a criterios

Como recorrer filas y comparar datos de dos columnas en hojas diferentes

⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛



⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛

Hay que presar gran cuidado como se escribe el nombre de la hoja de Excel, que en este tipo de consultas es tomado como si fuera una tabla de base de datos, fíjense el código:

sql = "SELECT * FROM [" & "Hoja1$" & "]"

La estructura anterior dice: Seleccione todas, * representa todas las columnas, de la tabla (From) Hoja1 (tengan presente que cada hoja es tomada como una tabla), si quisiéramos referenciar a la hoja dos deberíamos cambiar por Hoja2 por el nombre de la hoja de Libro que cada lector tenga y de la cual quisiéramos copiar datos para pegar en otra hoja.

Lista la SQL o cadena, string de consulta se debe ejecutar dicha consulta de datos, eso se hace con el siguiente código, los datos se guardarán en memoria:

Set rs = cn.Execute(sql)

Con los datos en memoria se procede a copiarlos en la Hoja2 de este ejemplo, para lo cual se usa el siguiente código:

b.Cells(2, 1).CopyFromRecordset Data:=rs

Luego se deben liberar las variables para liberar memoria, es decir recursos de la PC, recuerden que en este caso se copiaron casi 65.000 filas de una hoja a la otra en cuestión de segundos, eso habla de lo eficiente que es trabajar con consultas SQL cuando se tiene grandes cantidades de datos, los recursos de memoria se liberan vaciando los objetos creados, con el siguiente código:

Set rs = Nothing
cn.Close
Set cn = Nothing

Como consejo sugiero realizar la conexión y ejecutar la SQL en la macro, inmediatamente cuando necesitemos los datos y luego liberemos variables para no consumir recursos, es decir supongan que la macro es muy larga , no conviene consultar los datos tenerlos en memoria si recién se usan al final de la macro, la consulta se realizará cuando se vayan a usar los datos y luego de ello liberar la memoria de la PC borrando los datos de los objetos creados.

Recomiendo descargar el ejemplo Conectar Excel con Excel Consulta SQL Copia Datos de Una Hoja a Otra Hoja del Mismo Libro, ejecutarlo paso a paso con F8 para comprender como funciona a continuación dejo el código completo, mira el vídeo para ver macro en acción será más fácil entenderlo.


Código que se inserta en un módulo

Sub ConsutaSQLExcel()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim ctl As Object
Dim cn As ADODB.Connection, rs As ADODB.Recordset, sql As String
On Error Resume Next
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
Set a = Sheets("Hoja1")
Set b = Sheets("Hoja2")

cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 8.0;HDR=Yes;"""
sql = "SELECT * FROM [" & "Hoja1$" & "]"
b.Cells.Clear
a.Range("A1:G1").Copy Destination:=b.Range("A1")
Set rs = cn.Execute(sql)
b.Cells(2, 1).CopyFromRecordset Data:=rs
b.Range("B:B").NumberFormat = "dd/mm/yyyy"
Set rs = Nothing
cn.Close
Set cn = Nothing
If b.Range("A2") <> Empty Then
MsgBox ("Los registros se copiaron con éxito"), vbInformation, "AVISO"
Else
MsgBox ("No se encontraron registros en la base de datos"), vbInformation, "AVISO"
End If
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub

Sub BORRAR()
Sheets("Hoja2").Cells.Clear
End Sub

⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛


Si te fue de utilidad puedes INVITARME UN CAFÉ y de esta manera ayudar a seguir manteniendo la página, CLICK para descargar en ejemplo en forma gratuita.


If this post was helpful INVITE ME A COFFEE and so help keep up the page, CLICK to download free example.


Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends