Biblioteca de rutinas vba

Biblioteca de rutinas vba

Excel Macros VBA

Cuando usas programacion de macros para mejorar tus libros de Excel, es normal que muchas de ellas se repitan de forma sistemática. Por ello es bueno disponer de una biblioteca de rutinas vba de la que poder copiar y pegar el código sin necesidad de reescribirlo cada vez.

Puedes organizarlo en un módulo de funciones dentro de un libro «biblioteca», guardarlas como módulos exportados en una carpeta para este propósito o, incluso, copiar el código en ficheros txt de donde lo puedas después recupera. Cualquiera de estos métodos te servirá.

Tener una buena organización de esta biblioteca, sin duda, te ahorrará muchas horas de trabajo.

Aquí te voy a dejar algunas de las que mas utilizo para que empieces a construir tu biblioteca poco a poco.

Cursor el modo reloj de arena

Comenzaremos por una sencilla instrucción. Si durnate un proceso que sabes va a llevar un tiempo, quieres cambiar el aspecto del cursor para que muestre el típico reloj de arena, de forma que el usuario sepa que la tiene que esperar a que la apicación termine de hacer algo, solo tienes que añadir la siguiente instrucción antes de lanzar el proceso.

Application.Cursor = xlWait

No te olvides, una vez el proceso finalice, de volver a mostrar el cursor en modo normal.

Application.Cursor = xlDefault 

Ocultar barra de fórmulas

¿Quieres evitar que el usuario vea la fórmula de la celda donde se encuentra o simplemente ampliar un poco el área de visualización? Utiliza esta rutina.

Sub OcultarBarraFormulas
     Application.DisplayFormulaBar = False
End Sub

Mostrar barra de fórmulas

Si has ocultado la barra de fórmulas, es recomendable que al salir o cuando el usuario cambie a otro libro que pueda tener abierto, se la muestres de nuevo.

Para un buen funcionamiento, deberías poner ambas rutinas, además en los eventos apropiados del libro: BeforeClose, Activate y Deactivate.

Sub OcultarBarraFormulas
     Application.DisplayFormulaBar = True
End Sub

Ocultar nombres de pestañas

Con esta línea de código ocultarás los nombres de las pestañas. De nuevo ganarás algo de espacio para la visualización de los datos, además de evitar que el usuario vea las pestañas que hay.

Sub OcultarPestanas
     ActiveWindow.DisplayWorkbookTabs = False
End Sub

Mostrar nombres de pestañas

Al igual que en la rutina de la barra de fórmulas, deberías gestionar cuando mostrar de nuevo las pestañas para que la experiencia del usuario no sea frustrante para él. Imagina que tiene otro libro abierto y que al cambiar a dicho libro, no ve sus pestañas. Seguro que no estará muy contento con tu aplicación.

Sub OcultarPestanas
     ActiveWindow.DisplayWorkbookTabs = True
End Sub

Gestiónala con los eventos adecuados para evitar el problema descrito.

Acceder a datos de Access y copiar en la hoja activa

Si quieres acceder a datos alojados en una base de datos de Access y copiarlos a tu hoja Excel, este código te solucionará el problema. Lógicamente, deberás ajustarla a tus necesidades:

  • Ruta a la base de datos
  • Sentencia SQL que necesitas
  • Hoja y posición en que quieres copiar tus datos

Ten en cuenta que esta rutina necesita que crees la referencia a la librería Microsoft ActiveX Data Objects X.X Library.

Biblioteca de rutinas vba - Acceder a datos de Access desde Excel
Sub LeerTabla()
    Dim conn As ADODB.Connection
    Dim rst As ADODB.Recordset
    Dim SQL As String
    Dim RutaBD As String

    'Escribe la ruta que necesites
    RutaBD = "RutaCompleta_A_BaseDeDatos"
    
    Set conn = New ADODB.Connection

    With conn
        .Provider = "Microsoft.Jet.OLEDB.4.0;"
        .ConnectionString = "Data Source=" & RutaBD
        .Open
    End With
    
    'Por tu consulta SQL
    SQL = "Select * from TABLA"
    
    Set rst = New ADODB.Recordset
  
    rst.Open SQL, conn
 
    'Define donde quieres copiar los datos
    ActiveSheet.Cells(1, 1).CopyFromRecordset rst
        
    Set rst = Nothing
    Set conn = Nothing
   
End Sub

Enviar fichero por email

Esta rutina te permitirá hacer un envío de un fichero por email con Outlook. Si la combinas con una rutina de llamada que vaya transfiriendo parámetros, podrás hacer un mailing de forma totalmente automática.

Biblioteca de rutinas vba - mailing
Sub EnviarFichero(strAdjunto As String, strA As String, strAsunto As String)
    Dim strEmail As String
    Dim strMsg As String
    Dim oLook As Object
    Dim oMail As Object
    
    On Error GoTo ManejadorErrores
    
    Set oLook = CreateObject("Outlook.Application")
    Set oMail = oLook.createitem(0)
    With oMail
        .To = strA
        .Subject = strAsunto
        If strAdjunto <> "" Then
            .Attachments.Add (strAdjunto)
        End If
        .send
    End With
    
    Set oMail = Nothing
    Set oLook = Nothing

    
FinRutina:
    DoCmd.Hourglass False
    Exit Sub

ManejadorErrores:
    DoCmd.Hourglass False
    Call InformarError("Frm12_Mailing", "EnviarFichero", Err.Number, Err.Description)
    'fSetAccessWindow (SW_SHOWMINIMIZED)
    Resume FinRutina
End Sub

Mostrar todas las hojas del libro

Con este código mostrarás todas las hojas del libro que estén ocultas.

Sub MostrarTodasLasHojas()
    Dim Hoja As Worksheet

    For Each Hoja In ActiveWorkbook.Worksheets
        Hoja.Visible = xlSheetVisible
    Next Hoja 

End Sub

Ocultar todas las hojas de libro

Este código te servirá para ocultar todas las hojas de libro, a excepción de la activa. En muchas ocasiones, establecerás tu hoja como menú desde el que lanzar los diferentes procesos que hayas programado y te interesará que el usuario solo tenga acceso a este menú principal desde el que se gestionará que hojas deben estar visibles en cada momento.

Lo mas práctico es que sea llamada al abrir el libro, con el evento Workbook_Open.

Sub OcultarTodasLasHojas()
    Dim Hoja As Worksheet

    For Each Hoja In ThisWorkbook.Worksheets
        If Hoja.Name <> ActiveSheet.Name Then wsHoja Visible = xlSheetHidden
    Next Hoja 

End Sub

Conclusión

Con las rutinas de este artículo podrás empezar a crear tu biblioteca de rutinas vba. Con el tiempo, podrás ir incrementando esta biblioteca con todas aquellas líneas de código que, en tu práctica habitual, veas que usas con frecuencia. Verás que es una muy buena práctica que te ahorra mucho tiempo y te evita tener que buscar en que proyecto utilizaste un código similar que puedas reutilizar.

En este enlace puedes consultar infinidad de rutinas: VBA code example.

Si además quieres aprender algo sobre buenas prácticas programando en vba, puedes consultar el artículo relacionado en este enlace.

Si tienes alguna rutina que utilices frecuentemente y la quieras compartir, puedes dejarla en los comentarios.

Deja una respuesta