Programar en VB en una Macro de Excel crear archivo CSV
En la paqueteria de Offices de Microsoft se puede realizar programas para automatizar tareas, estos son Macros hay forma de guardar comandos sencillos en Excel o escribir programas que hagan tareas más específicas, como por ejemplo generar un archivo de salida con nuevos datos o un reporte.
Las macros se programan con Visual Basic que es el lenguaje de programación.
Veamos un ejemplo de una Macro, primero el objetivo del programa es generar un archivo CSV (comma-separated values) que son archivos separados por comas que cumpla con la estructura de un archivo que queremos utilizar en otro sistema y que podamos tomar información de una Hoja Excel.
- Primero habilitamos la pestaña de Desarrollador, para ello vamos al menú, Archivo-Opciones-Personalización Barra-Desarrollador
- Vamos agregar un botón en una hoja de Excel, seleccionamos el botón insertar y elegimos del parte de ActiveX
- Damos doble click sobre el botón creado o tambien pueden seleccionar las teclas ALT+F11
Nos abrirá una nueva pantalla, aquí es donde comenzaremos a programar nuestra macro
Nuestro programa es el siguiente:
Private Sub CommandButton1_Click()
Dim Fila, fila2, cont As Integer
Dim rngOrigen As Excel.Range
Hoja3.Rows("1:65500").Clear
Fila = 19
fila2 = 1
cont = 1
Do While Hoja2.Cells(Fila, "A") <> ""
Hoja3.Cells(fila2, "a") = Hoja2.Cells(Fila, "a") 'UUID
Hoja3.Cells(fila2, "b") = Hoja2.Cells(Fila, "b") 'Monto factura
Hoja3.Cells(fila2, "c") = Hoja2.Cells(Fila, "i") 'RFC-emisor
Hoja3.Cells(fila2, "d") = Hoja2.Cells(Fila, "d") 'Moneda
Hoja3.Cells(fila2, "e") = Hoja2.Cells(Fila, "e") 'Tasa cambio
If Hoja3.Cells(fila2, "e") = "" Then Hoja3.Cells(fila2, "e") = 1
Hoja3.Cells(fila2, "f") = "|" + Hoja2.Cells(Fila, "f") + Hoja2.Cells(Fila, "g") 'Numero factura, serie +a folio
Hoja3.Cells(fila2, "g") = Format(Hoja2.Cells(Fila, "h"), "MM/DD/YYYY") 'fecha facura
Hoja3.Cells(fila2, "h") = " " 'codigo proveedor
Hoja3.Cells(fila2, "i") = Hoja2.Cells(Fila, "c") 'rfc_receptor
Hoja3.Cells(fila2, "j") = " " 'nombre del proveedor
Hoja3.Cells(fila2, "k") = Hoja1.Cells(5, "b") ' domnio
Hoja3.Cells(fila2, "l") = Hoja1.Cells(6, "b") ' entidad
Hoja3.Cells(fila2, "m") = " " ' poliza
Fila = Fila + 1
fila2 = fila2 + 1
Loop
Call copiarHOjaaLibroNuevo
End Sub
Sub copiarHOjaaLibroNuevo()
mio = ActiveWorkbook.Name
nombre = Sheets(2).Range("B3").Value
Workbooks.Add
otro = ActiveWorkbook.Name
Workbooks(mio).Activate
' Sheets("Hoja1").Range("a5").Copy after:=Workbooks(otro).Sheets("Hoja1").Range("a1")
Sheets(3).Copy after:=Workbooks(otro).ActiveSheet
Application.DisplayAlerts = False
Workbooks(otro).Sheets(1).Delete
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & Replace(nombre, "/", ""), FileFormat:=xlCSV
Application.DisplayAlerts = False
ActiveWorkbook.Close False
End Sub
Vamos a desmenuzar el programar :
Private Sub CommandButton1_Click()
Dim Fila, fila2, cont As Integer
Dim rngOrigen As Excel.Range
Definición de variables
Hoja3.Rows("1:65500").Clear
Esta instrucción limpia todos los datos de una hoja de Excel
Do While Hoja2.Cells(Fila, "A") <> ""
Esta instrucción es un ciclo que se detendrá hasta que no encuentre datos en la columna A
Hoja3.Cells(fila2, "a") = Hoja2.Cells(Fila, "a") 'UUID
Hoja3.Cells(fila2, "b") = Hoja2.Cells(Fila, "b") 'Monto factura
Hoja3.Cells(fila2, "c") = Hoja2.Cells(Fila, "i") 'RFC-emisor
Hoja3.Cells(fila2, "d") = Hoja2.Cells(Fila, "d") 'Moneda
Hoja3.Cells(fila2, "e") = Hoja2.Cells(Fila, "e") 'Tasa cambio
If Hoja3.Cells(fila2, "e") = "" Then Hoja3.Cells(fila2, "e") = 1
Hoja3.Cells(fila2, "f") = "|" + Hoja2.Cells(Fila, "f") + Hoja2.Cells(Fila, "g") 'Numero factura, serie +a folio
Hoja3.Cells(fila2, "g") = Format(Hoja2.Cells(Fila, "h"), "MM/DD/YYYY") 'fecha factura
Hoja3.Cells(fila2, "h") = " " 'código proveedor
Hoja3.Cells(fila2, "i") = Hoja2.Cells(Fila, "c") 'rfc_receptor
Hoja3.Cells(fila2, "j") = " " 'nombre del proveedor
Hoja3.Cells(fila2, "k") = Hoja1.Cells(5, "b") ' dominio
Hoja3.Cells(fila2, "l") = Hoja1.Cells(6, "b") ' entidad
Hoja3.Cells(fila2, "m") = " " ' poliza
En esta parte estamos asignando en una nueva Hoja del mismo libro de Excel los valores del archivo que vamos a crear con datos de la Hoja2.
Fila = Fila + 1
fila2 = fila2 + 1
Estas son nuestras variables que nos sirven para ir avanzando en el archivo de Excel, la variable Fila es para recorrer la Hoja2 y la fila2 para recorrer la Hoja3.
CopiarHOjaaLibroNuevo
Esta es una función, las funciones son procesos que podemos reutilizar en otras macros y que no están ligadas a un solo resultado, es decir son reutilizables, de hecho casi siempre tenemos funciones que utilizamos en una ocasión y volvemos a copiar en otro nuevo programa, Hay un concepto en programación que se llama DRY (Don’t Repeat Yourself) que es que si ya tienes un código hecho lo reutilices y no lo re-escribas.
mio = ActiveWorkbook.Name
nombre = Sheets(2).Range("B3").Value
Workbooks.Add
otro = ActiveWorkbook.Name
Workbooks(mio).Activate
' Sheets("Hoja1").Range("a5").Copy after:=Workbooks(otro).Sheets("Hoja1").Range("a1")
Sheets(3).Copy after:=Workbooks(otro).ActiveSheet
Application.DisplayAlerts = False
Workbooks(otro).Sheets(1).Delete
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & Replace(nombre, "/", ""), FileFormat:=xlCSV
Application.DisplayAlerts = False
ActiveWorkbook.Close False
Esta función lo que permite es copiar los datos de una hoja a un nuevo libro de Excel.
En las macros hay muchas funciones, si quieren que veamos algún otro ejemplo lo podemos hacer, escriban sus comentarios.
Les comparto la Liga de otros post en este blog de macros:
No olvide compartirnos y seguirnos en este blog o en Facebook.
Comentarios
Publicar un comentario