Crear código QR con Excel VBA

Hola mundo! Hoy veremos cómo Crear código QR con Excel VBA, posteriormente haré una publicación similar con VBA y PHP

Vale, haremos esta aplicación en 5 sencillos pasos, los cuales listo a continuación

Descargar ‘Crear código QR con Excel.xlsm’ (Click en el enlace)

Paso #1: Diseño de la interfaz visual

Y casi siempre inicio con el mismo paso, el diseño es muy importante porque es la interfaz con la interactúa nuestro usuario final

Crear código QR con Excel

El usuario final ingresará el texto de los códigos a generar en la columna A, empezando en la fila 4

He creado 3 botones los cuales son:

  • Generar: Genera los códigos QR en la columna B
  • Limpiar imágenes: Elimina todas las imágenes de la hoja activa
  • Limpiar todo: Elimina todas las imágenes de la hoja activa y el texto ingresado en la columna A

Paso #2: Generar el código QR de manera individual

Para poder generar el código QR usaremos la API de Google, y para descargarlo usaremos la API URLDownloadToFile

#If VBA7 And Win64 Then
    Private Declare PtrSafe Function URLDownloadToFile Lib "urlmon" _
      Alias "URLDownloadToFileA" ( _
        ByVal pCaller As LongPtr, _
        ByVal szURL As String, _
        ByVal szFileName As String, _
        ByVal dwReserved As LongPtr, _
        ByVal lpfnCB As LongPtr _
      ) As Long
#Else
    Private Declare Function URLDownloadToFile Lib "urlmon" _
      Alias "URLDownloadToFileA" ( _
        ByVal pCaller As Long, _
        ByVal szURL As String, _
        ByVal szFileName As String, _
        ByVal dwReserved As Long, _
        ByVal lpfnCB As Long _
      ) As Long
#End If

Sub CrearQRIndividual(Valor As Range)
    Dim Link$, Ruta$
    'Descargo el código QR
        If Valor.Value = Empty Then
            Exit Sub
        End If
        
        Link = "http://chart.apis.google.com/chart?cht=qr&chs=300x300&chl=" & Valor.Value & "&chld=H|0"
        Ruta = ThisWorkbook.Path & "\chart.png"
        URLDownloadToFile 0, Link, Ruta, 0, 0
    '-----------------
End Sub

La variable String Link almacenará la ruta a conectar, y la variable String Ruta la ubicación en donde se guardará

Y con esto ya hemos generado el código QR, ahora debemos insertarlo en nuestra plantilla

Paso #3: Insertar la imagen QR en la columna B

Vamos a interactuar con la imagen insertada realizando estas acciones:

  • Insertar la imagen
  • Dimensionar la imagen
  • Ubicar la imagen en la celda correspondiente

Por ello crearé una variable de tipo Object y extraeré los valores Top, Width y Left del rango con el que trabajo

Sub CrearQRIndividual(Valor As Range)
    Dim Link$, Ruta$, QR As Object
    Dim lado&, izqui&, nTop&
    'Descargo el código QR
        If Valor.Value = Empty Then
            Exit Sub
        End If
        
        Link = "http://chart.apis.google.com/chart?cht=qr&chs=300x300&chl=" & Valor.Value & "&chld=H|0"
        Ruta = ThisWorkbook.Path & "\chart.png"
        URLDownloadToFile 0, Link, Ruta, 0, 0
    '-----------------
    
    'Ingreso la imagen
        Set QR = ActiveSheet.Pictures.Insert(Ruta)
        Kill Ruta
        With wGenerador
            nTop = .Range("B" & Valor.Row).Top
            lado = .Range("B" & Valor.Row).Width
            izqui = .Range("B" & Valor.Row).Left
            With QR
                .Top = nTop
                .Width = lado
                .Left = izqui
            End With
            .Range("B" & Valor.Row).RowHeight = lado
        End With
    '-----------------
End Sub

Adicional usaré a Kill para eliminar el archivo descargado

Paso #4: Generar la macro de limpieza

Es necesario tener una macro de limpieza, para eliminar las imágenes generadas en una corrida anterior y opcionalmente el texto

Para poder eliminar las imágenes de la hoja activa, usaremos el siguiente código

Sub LimpiarImagenes()
    Dim imagen As Picture
    For Each imagen In ActiveSheet.Pictures
        imagen.Delete
    Next
    wGenerador.Range("A4", "A" & Rows.Count).RowHeight = wGenerador.Range("A1").RowHeight
End Sub

La variable imagen de tipo Picture recorrerá las imágenes presentes en la hoja activa y las borrará

Luego restauraré el valor por defecto del alto de fila, desde la 4 hasta la última, ésta ‘restauración’ se realiza porque el código del paso 3 modifica el tamaño de fila

Utilizando éste código, crearé el código de limpieza de texto

Sub LimpiarTodo()
    LimpiarImagenes
    wGenerador.Range("A4", "A" & Rows.Count) = Empty
End Sub

Paso #5: Crear códigos QR masivamente

Ahora creamos nuestra macro de generación masiva de códigos QR, éste código es súper sencillo

Sub CrearQRMasivo()
    Dim n&, i&
    With wGenerador
        n = .Range("A" & Rows.Count).End(xlUp).Row
        For i = 4 To n
            CrearQRIndividual .Range("A" & i)
        Next
    End With
End Sub
generar código QR desde VBA

Y listo ya hemos terminado espero te haya gustado, recuerda que puedes descargar todos los archivos de mi blog completamente gratis desde tutorialesexcel.com/archivos/

Descargar ‘Crear código QR con Excel.xlsm’ (Click en el enlace)

Esta entrada tiene 12 comentarios

  1. Jorge

    Hay alguna manera de que genere los QR sin necesidad de conexion a internet? por lo que veo consume la api de google y es una URL.

    1. Sí, montando un servidor local en la PC, lo recomendable sería usar linux o una virtualización por el rendimiento

  2. Alfredo

    Hola Me da error 53 URLDownloadToFile 0, Link, Ruta, 0, 0y se para ahi me puedes indicar que puede pasar?

  3. Antonio Soto

    Muchas gracias por compartir tu conocimiento. después de muchas buscquedas infructuosas por fin encontré una página que es excelente. gracias desde Paraguay.
    Cordiales saludos

  4. Gabi

    Hay alguna opción que funcione en Excel para Mac??

  5. Daniel

    No me funciona en Mac, estoy con la versión 16,38, la ultima hasta el momento, no se que hacer!

  6. Jairo

    Como le puedo hacer para generar un código QR con muchos datos, ya que el que muestra en el diseño solo funciona para pocas palabras, me gustaría saber el codigo para un ficha médica.

    1. Daniel

      Jairo lo que deberías hacer es la concatenación de los elementos que necesites mostrar en el QR, esto lo haces con comillas dobles si quieres escribir algo y con & para concatenar, por ejemplo: =L3&»|»&L4&»|»&L5&»|»&C9&»|»&K27&»|0″&D30&»|»&K9&»|0|0|0|0″
      con los campos que quiero separados por pipe «|».

  7. Gaby

    EXCELENTE FORMULARIO
    Gracias por tomarte el tiempo de compartirlo.

  8. Maria

    Muchas gracias por compartir tu conocimiento, quisiera saber si hay alguna función para que conozca caracteres especiales, por ejemplo la Ññ. Gracias.

  9. danielGr

    Excelente macro.
    Sin embargo en una cadena de caracteres donde utilizas el carácter + (más) el código qr generado te lo genera sin este signo. Es decir; esta es la cadena original AbcD+1234 y a partid de este se genera la imagen QR…. y al momento de leer la imagen te devuelve AbcdD 1234…..
    quita o elimina el caracter +… no se si sea la api de google que hace esto… ¿sabe como hacerl para que incluya el caracter +?

  10. Richard

    excelente formulario!!
    que deberia estudiar para tener conocimientos de php y mysql., muchas gracias.

    Saludos,

Deja una respuesta