viernes, 26 de abril de 2019

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, 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.

  • 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 otro post en este blog, para una macro que les ayude a leer un base de datos

https://www.programacionparatodos.com/2019/07/macro-para-leer-datos-de-bases-de-datos.html

jueves, 25 de abril de 2019

Como Programar en lenguaje Logo


Hace muchos años atrás mi mamá tomaba cursos de computación, yo tendría 7 años  cuando me llevo con ella un día a su clase y vi una tortuguita en el monitor de una computadora, en ese momento aprendí  que  una computadora era capaz de seguir las instrucciones mientras yo le hablara en un idioma que me entendiera, claro que en ese momento no sabía que estaba haciendo mi primer programa. Desde entonces quedé fascinada de la computación y todo lo que conlleva.
En ese entonces no estaba Google ni tenía un Smartphone o una Tablet para preguntarle a Google que era lo que estaba aprendiendo.
Esa tortuga que yo había visto es un lenguaje de programación que se llama LOGO, después de muchos años recordé ese momento y comencé a investigar, leí que es el segundo software más viejo de la historia.
Les comparto un liga de un curso de LOGO


Lenguaje derivado de LISP, que trabaja con listas, es un lenguaje de 1958 ceeado por John McCarthy 
Me parece que es software que hoy en día seguiría cumpliendo el objetivo de enseñar a niños los conceptos básicos de programación, la sintaxis es muy simple y como cualquier lenguaje de programación las aplicaciones son infinitas.
Es muy parecido al juguete Magic Screen de la película de Toy Story 1, tiene 2 controles uno para la derecha e izquierda y otro para subir y bajar, igual son los comando de Logo. 

Magic Screen juguete Toy Story


Vamos hacer un programa que dibuje una cuadrado en LOGO,

Primero vamos hacer una simulación en papel, es decir un dibujo
Algoritmo
  • Pintar linea de 5 cm
  • mover cursor hacia arriba
  • pintar linea de 5 cm
  • mover cursor a la izquierda
  • pintat línea de 5 cm
  • mover cursor hacia abajo
  • pintar linea de 5 cm

El código del programa:

RIGHT 90
FORWARD 50
RIGHT 270
FORWARD 50
RIGHT 270
FORWARD 50
RIGHT 270
FORWARD 50

Es una buena práctica escribir las palabras reservadas en mayúsculas, las palabras reservadas son todas las lista de instrucciones que tiene el lenguaje de programación, es como cuando aprender hablar otro idioma y les explican los pronombres, preposiciones, así es es la programación pero tienen otros nombres:

Palabras para Operaciones matemáticas, lógicas o de palabras, Instrucciones para bucles o ciclos.

Sigamos la salida del programa es la siguiente




Guardamos nuestro programa, yo lo llame cuadrado.LGO , .LGO es la extensión de los programas en LOGO , las extensiones nos sirve para identificar con que programa abrir cada archivo, por ejemplo en Excel el xlsx en Word docx en paint .jpg o .png

Y como siempre la programación busca hacer las cosas más fáciles, hay instrucciones que se llaman bucles o ciclos, que nos permiten realizar instrucciones repetitivas sin tener que escribir todo, por ejemplo en logo tenemos la instrucción REPEAT, para decirle cuantas veces repetir las mismas instrucciones, en este caso 4 veces va a caminar hacia adelante y 4 veces va a girar 90 grados, esto en lugar de las primeras 8 lineas que escribimos,

REPEAT 4 [ FORWARD 100 RIGHT 90 ]



Adelante no tengan miedo y comience a escribir sus programas

https://www.programacionparatodos.com

miércoles, 24 de abril de 2019

¿Qué es programar?

Hola bienvenidos a este blog :)

Me he decidido a compartirles acerca de una de las pasiones de mi vida que es la programación, desde hace 24 años aproximadamente empecé en el mundo de la computadoras, conozco varios lenguajes de programación que más adelante les iré compartiendo, pero empecemos con este primer post.

Actualmente y en los años futuros tenemos déficit de programadores, Nextu por ejemplo nos dice que para 2020 faltarán 45 millones de profesionales les dejo la liga para que le den una revisada  NEXUS.

Hay programadores de todas las edades desde niños hasta adultos mayores, por ejemplo el programador mas joven de Microsoft tiene 11 años Pranav Kalyan y el programador mas grande de Apple es Masako Wakamiya de 81 años, así que la edad no es un problema para programar. 

La programación no es solo para personas que tengan un titulo de Ingeniero en sistemas, he conocido Ingenieros Industriales, Arquitectos que aprenden a programar, incluso trabajan en ello, la profesión no limita que aprendas o no a programar, hay un dicho que dice : "De músico, poeta y loco todos tenemos un poco" yo le agregaría y de programador, por eso el nombre de este blog programación para todos .

Empecemos entonces la primer pregunta que pueden hacer es ¿Qué es la programación? o ¿Como programo? o le preguntan a Google jajajajajaja




Bueno hay varias definiciones pero yo me acuerdo de una explicación que me dieron en la secundaria:
La programación es una secuencia de instrucciones para llegar a un objetivo por medio de instrucciones en una computadora.

El maestro en su momento nos dio un ejemplo, nos dijo imagínense que van a prepararse un huevo ahora piensen qué pasos seguir y nos dijo eso que están haciendo de pensar y organizar los pasos es hacer un algoritmo de software y después de hacerlo eliges en que lenguaje de programación quieres hacer el programa eso es programar, traducir a una computadora los pasos a seguir para realizar una tarea.

Para poder ejemplificar un algoritmo, puede ser un listado de pasos o podemos usar diagramas de flujo,  por ejemplo veamos el caso de un huevo estrellado:


Para poder realizar la programación en computadoras, necesitas aprende por lo menos un lenguaje de programación que es como aprender el idioma de las computadoras, hay muchísimos busque rápidamente y según wikipedia hay 672 .

Voy vamos hacer un ejemplo de código de un programa que suma 2 números enteros en Progress 4gl, empecemos con el algoritmo, voy a ponerlo como si fueran enunciados:

  1. Introducir primer número a sumar (variable número entero i)
  2. Introducir segundo número a sumar (variable número entero j)
  3. Realizar suma
  4. Mostrar resultado
En la imagen está el programa escrito 


/*Programa que suma*/                                                           
DEF VAR i AS INTEGER INITIAL 0.                                                 
DEF VAR j AS INTEGER INITIAL 0.                                                 
                                                                                
UPDATE i j.                                                                     
DISPLAY i + j.   


Si este es todo el programa :) 

Imagen con la ejecución del programa 


 Ingresar primer numero
 Ingresar segundo numero
 Mostrar resultado

Como verán en base al algoritmo es muy fácil saber qué hacer porque ya sabemos que queremos de salida, porque el objetivo del programa es sumar 2 números enteros, en esta oración estamos delimitando el objetivo y las condiciones, es decir solo quiero sumar 2 números y que no tengan decimales.
Si son 2 números necesito 2 variables para ingresar los datos que son la letra "J" e "I" , luego realizó la operación y la muestro en pantalla.
La programación es un proceso finito siempre cumple condiciones y llega a un resultado, la computadora hará lo que nosotros le digamos que haga, claro que siempre habrá excepciones o posibles errores ahí es cuando inicia la revisión de nuestro programa y revisar en qué parte nos falta agregar más condiciones o lógica para evitar esos errores.
Una recomendación que puedo darles para ser un buen programador es conocer por lo menos 5 tipos de lenguajes:

  • Un lenguaje para extraer datos de algún motor de base datos como por ejemplo: SQL, MySQL, Progress, Informix, PL/SQL, PostgreSQL,DB2, Oracle
  • Un lenguaje WEB: HTML,XML,PHP, CSS, Javascript, ASP, JSP, Ruby, Ajax, Perl,CSS3,jQuery
  • Un lenguaje orientado a objetos:  C++,VB .NET,Python, Java,Object Pascal, C#
  • Un lenguaje de programación estructurada: C, Pascal
  • Lenguaje Orientado a Negocios: COBOL, Progress 4gl, Informix 4gl, ABAP
Les comparto también las ligas dentro de este mismo blog para ver como utilizamos las matemáticas en la programación:
Y algunos paradigmas de la programación

Saludos amigos programadores, espero sigan estos consejos para disminuir el déficit de programadores,ojala les sea de utilidad este post, lo compartan y vayan pensando en que lenguaje de programación quieren aprender y dejen sus comentarios.

https://www.programacionparatodos.com

Si quieren saber un poco más de mi vida académica y profesional, les comparto mi liga de Linkedin www.linkedin.com/in/ana-zamora .

Entrada destacada

Como Programar en Pascal y Delphi, ejemplo calculadora en Delphi

Que tal amigos, bienvenidos a otra semana de nuestro blog, les quiero platicar acerca de un lenguaje de programación que se llama Pascal, ...