Ir al contenido principal

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

Entradas más populares de este blog

Graficar funciones en Python con dataframes

Bienvenidos a un nuevo post, en esta semana, en esta ocasión les quiero platicar acerca de una librería en Python que se llama  matplotlib  que nos sirve para gráfica funciones de  matemáticas. Habitualmente en Python existen muchas librerías, lo que hay que hacer es primero investigar si ya existe alguna que nos ayude y entenderla antes de inventar el hilo negro, en mi caso encontré la librería  Matplotlib Para instalar deben utilizar el comando PIP en 2.7 Instalando en Python 3.7 Si tienen Python 2.7 deben realizar la ejecución de estos 2 comandos desde consola python -m pip install -U pip python -m pip install -U matplotlib Aunque lo más recomendable es utilizar la versión 3.7 o superior de Python. Programa para graficar en Python import matplotlib.pyplot as plt import numpy as np import math as mt def move_spines():     """Esta funcion divide pone al eje y en el valor      0 de x para dividir claramente los valores positivos y     negativos.&quo

Ejemplo Macro en Word

Hola: ¿Sabían que no solo en Excel pueden hacer Macros?  ¡¡¡También en Outlook, Word, Power Point,Access  es posible hacer Macros!!!  ☺️ Ya que Word, Excel, Power Point,Access son de familia Microsoft y Visual Basic también es que podemos programar nuestras macros en esta paquetería. Como hemos visto antes, para poder programar nuestras macros, necesitamos primero configurar la Barra de tareas de Developer o Desarrollador Seleccionan el Menu File>Options>Customize Ribbon o en Español Archivo>Opciones>barra de tareas Despues la parte de seguridad de las macros Menu File>Options>Trus Center o Archivo>Opciones>Centro de Seguridad y marcamos como se ve en la imagen, la cuarta opción y el combo Ejemplo Vamos hacer un ejemplo donde, tengamos que generar varios diplomas de fin de curso, pero con una lista de Nombres , entonces vamos a crear un nuevo archivo en Word y le vamos a guardar como tipo Macro  Tenemos una plantill

Ejemplo Python para leer imagen y transformarla en una matriz

Como hemos visto en otros post, Python nos permite hacer programas de manera más rápida, en esta ocasión quiero compartirles un ejemplo para leer un archivo de imagen y como convertirlo en una matriz o un arreglo. Aplicaciones Poder hacer ingeniería de datos, es decir poder convertir una misma imagen en diferentes todos y utilizarlos para machine learning para reconocimiento de gatos, para ello hay que mostrar muchas imágenes a nuestro modelo es decir entrenarlo, para ello hay que colocarle imágenes claras y imagenes que no sean tan claras por ejemplo, se pone la imagen original y se agrega "ruido" para que se vea en rojos, grises, verdes. Se pudo utilizar para un mapa , para poder ver datos a detalle Se puede aplicar para manipular imágenes, por ejemplo agregar efectos  Seguramente a ustedes se les pueden ocurrir más aplicaciones Les comparto el ejemplo de como hacerlo en Jupiter y para hacer el ejemplo voy a utilizar el logo del blog es una imagen de 500x500 pixeles Los Pas