Está en la página 1de 36

egundo post dedicado a excel. Hoy me he levantado muy temprano y de buen humor.

Y es por eso mismo que en vez de meterle mano al formulario del post anterior, he decidido brincarme todo el rollo y publicar una propuesta de un archivo que nos permita imprimir una factura, incluyendo su modulo de clientes y productos. Antes de empezar, la configuracion de mi pc: - indo!s Home "asic. - #ffice $%&% 'onsideraciones - el codigo ("A es el mismo de (isual basic ), por lo que debe funcionar tambien en versiones anteriores a excel $%&%. *e todos modos, el codigo que vamos a escribir sera de lo mas sencillo para brincar esa cuestion. +e podria escribir un codigo bastante robusto y optimo pero eso incrementaria las lineas al triple y podria causar confusion a los lectores novatos en programacion. ,n el post anterior tenemos un e-emplo de como insertar datos en ho-a desde un formulario. ,sa es la misma mecanica que vamos usar, con la unica diferencia que ahora vamos a leer datos de la ho-a y a pasarlos al formulario. .#/0A1,A2*# 3A+ H#4A+ bueno, tons, primero abre excel y de inmediato guardas el libro como factura.xls o factura xlsm. en excel $%&% debes guardarlo como libro con e-ecucion de macros 5 xlsm 6 en $%%7 creo que solo tienes que habilitar las macros. en anteriores a $%%7 da igual.

ahora, el libro nos crea automaticamente 8 ho-as. vamos a cambiarles el nombre como sigue: ho-a& 9 clientes ho-a$ 9 productos ho-a8 9 facturas bien, ahora inserta una ho-a mas y le pones el nombre de impresion - lo siguiente son los encabezados. en la ho-a clientes vamos a escribir lo siguiente es las celdas siguientes: A& 9 razon, "& 9 rfc, '& 9 direccion ingresale unos cuantos datos

la ho-a productos A& 9 clave, "& 9 descripcion, '& 9 precio ingresale unos cuantos datos

la ho-a facturas A& 9 factura, "& 9 fecha, '& 9 razon, *& 9 descripcion, ,& 9 precio, .& 9 cantidad, :& 9 total

- ahora va la ho-a de la impresion. aqui deberias hacer una replica de tu factura de papel en la ho-a de excel, pero solo vamos a tomar en cuenta los lugares que hay que llenar, ya que en el papel estan marcados las lineas. en pocas palabras, excel solo va a imprimir lo que deberias escribir a mano. por e-emplo, supongamos que nuestra factura de papel en blanco es la siguiente:

A4;+1A2*# 3A H#4A *, <0=/,+<#2 entonces, en excel vamos a hacer una plantilla identica a la factura, la llenamos con datos ficticios y luego la imprimimos en una ho-a reciclada5no en la ho-a de la factura6. luego transparentamos la ho-a reciclada con la factura y checamos que los espacios que llenamos estan en el lugar correcto que corresponde al papel de la factura. este paso hay que repetirlo hasta que, cuando transpongamos la ho-a reciclada con la factura original, los lugares queden perfectamente alineados. .inalmente, para comprobar que la plantilla de excel corresponde al papel de tu factura, sacale una copia fotostatica a tu factura e imprimimes la plantilla de excel en la copia. si todo corresponde, entonces podemos pasar al siguiente paso.

:uarda el archivo para que no pierdas los cambios, 5murphy dice que !indo!s solo falla cuando tienes algo sin guardar en pantalla6 *<+,># *, 3#+ .#/0;3A/<#+ =ulsa A31 ? .&& y se abre la ventana de ("A.

3os formularios a crear son: - captura de clientes - captura de productos - impresion de factura - catalogo de productos - catalogo de clientes - menu sin embargo, la captura de datos simples esta explicado en mi post anterior, por lo que la captura de clientes y de productos la vamos a omitir para centrarnos en la impresion de la factura.

3a creacion de los formularios omitidos la debes hacer tu mismo. la manera de cambiar las propiedades tambien esta explicado en el post anterior, tambien vamos a omitir esa explicacion. la creacion de formularios e insercion de controles tambien sera omitida, pues esta en el post anterior. los prefi-os que vamos a usar para los controles son: lbl 9 etiqueta o label txt 9 cuadro de texto o textbox cmb 9 cuadro combinado o combobox lst 9 cuadro de lista o listvie! grb 9 marco o frame 5grb de groupbox, no se nota la influencia de .net6 ch@ 9 casilla de verificacion o chec@box 5el cuadrito que le pones o quitas una palomita6 Auiero hacer notar que existe un control grid que facilita la tarea de almacenar datos, pero dado que hay que encontrar su referencia, y a que tambien varia su uso, ubicacion y existencia con el uso de cada version de !indo!s, no lo vamos a usar. 2o vamos a agregar ningun control externo para hacer mas compatible este archivo entre ordenadores con diferentes sistemas operativos. bueno, una vez aclarados los puntos anteriores, vamos por el form mas culero: .A'1;/A'<#2 - agrega un nuevo formulario y le pones el nombre de frm.acturacion y caption <0=/,+<#2 *, .A'1;/A -

- inserta los siguientes controles con los siguientes nombresBpropiedades: grb*atos'liente con caption 9 *atos del 'liente, !idth 9 CCC y height 9 7D 5estira el form para que quepa6 -- dentro de grb*atos'liente vas a insertar E etiquedas y E cuadros de texto -----lbl/azon con caption 9 /azon -----lbl*ireccion con caption 9 *ireccion -----lbl/.' con caption 9 /.' -----lbl.echa con caption 9 .echa

-----lbl2o.actura con caption 9 2o. .actura -----txt/azon -----txt*ireccion -----txt/.' -----txt.echa -----txt2o.actura recuerda que a una etiqueta le corresponde a su lado un cuadro de texto con el mismo nombre, por e-emplo, txt/azon va ubicado al lado derecho de lbl/azon. Acomoda los espacios de manera que todo quede bien a la vista del usuario:

- ahora inserta C cuadros de lista afuera y por deba-o del grb*atos 'liente con los siguientes atributos lst'antidad con !idth 9 EC y height 9 &)$ lst*escripcion con !idth 9 $$7.$E y height 9 &)$

lst=recio con !idth 9 )7.EE y height 9 &)$ lst<mporte con !idth 9 77.$E y height 9 &)$ en el orden de creacion, ubicalos a la misma altura uno -unto de otro. ademas, inserta una etiqueta arriba de cada lista para que el usuario sepa que contiene cada columna: arriba de lst'antidad pones una lbl'antidad con caption 'antidad arriba de lst *escripcion pones un lbl*escripcion con caption descripcion y asi con las otras dos listas restantes. mira nomas que chulo esta quedando el form:

- continuamos con la ultima parte de su diseFo: inserta tres cuadros de texto deba-o inmediato de lst<mporte con los siguientes atributos: txt+ubtotal con !idth 9 )&.E y enabled 9 false txt<(A con !idth 9 )&.E y enabled 9 false 5estoy en en mexico, se notaGGGG6 txt1otal con !idth 9 )&.E y enabled 9 false

5cuando enabled es falso el control esta bloqueado para su uso, cuando es true se puede usar6 -estos tres txtHs ponles sus correspondientes etiquetas, osea al txt+ubtotal le pones a su izquierda un lbl+ubtotal con caption 9 +ubtotal, y asi con los tres txtHs -ademas, inserta un txt3etras deba-o del lst'antidad y estiras su tamaFo hacia la derecha hasta llegar a la lbl+ubtotal y luego estiras hacia aba-o hasta coincidir con lbl<(A. 3e pones multiline 9 true, enabled 9 false. ,ste txt no lleva etiqueta. -Agregar un boton de comando llamado cmd"uscar con caption 9 "uscar 'liente y lo ubicamos en la parte de mas aba-o del formulario a la izquierda. -agrega un boton de comando llamado cmd=roductos con caption 9 =roductos y ubicalo a la derecha de cmd"uscar -agrega un boton de comando llamado cmdAceptar con caption 9 Aceptar y ubicalo a la derecha de cmd=roductos -agrega una casilla de verificacion o chec@box con nombre ch@<mprimir y caption 9 <mprimir al aceptar y ubicala a la derecha de cmd'ancel este es el aspecto final que deberia tener el formulario:

=/#:/A0A2*# 3#+ ,(,21#+ - haz doble clic@ encima del form en alguna region donde no tenga ningun control. - aparece la ventana de codigo. si te fi-as, en la parte de arriba del lado izquierdo tiene el nombre de todos los controles que contiene el formulario, incluyendo el propio formulario pero con el nombre de ;ser.orm, y del lado derecho estan los eventos de los mismos. tons para programar un evento, escogemos en el lado izquierdo el control y del lado derecho el evento a programar. - escoge el control ;ser.orm 5osea, el formulario6

- luego escoge el evento A'1<(A1,

- ("A te va a insertar el encabezado y final del evento activate. 3as lineas de codigo que pongamos en ese espacio se van a e-ecutar cuando formulario se active.

las lineas de aba-o del evento clic@ las podemos eliminar para no causar confusion.

y bueno, escribimos dentro del evento activate del formulario las siguientes lineas: =rivate +ub ;ser.ormIActivate56 0e.txt.echa.1ext 9 *ate ,nd +ub a continuacion pulsa .E y verifica que en el txt.echa se ha escrito la fecha automaticamente. si hasta aqui todo va bien, continuamos con los eventos de los demas controles como sigue: control cmdAceptar, evento 'lic@ =rivate +ub cmdAceptarI'lic@56 <f 0sg"ox5 Jfinalizar la captura de la facturaGK, vbAuestion ? vbYes2o6 9 vb2o 1hen ,xit +ub guardar.actura 0sg"ox 5ch@<mprimir.(alue6 <f 0e.ch@<mprimir.(alue 9 1rue 1hen <mprimir.actura ,nd +ub control cmd"uscar, evento 'lic@ =rivate +ub cmd"uscarI'lic@56 frm"uscar'liente.+ho! H mostrar el formulario de buscar clientes ,nd +ub control cmd=roductos, evento 'lic@ =rivate +ub cmd=roductosI'lic@56 frmAgregar=roducto.+ho! H mostrar el formulario de agregar productos ,nd +ub control ;ser.orm, evento activate =rivate +ub ;ser.ormIActivate56 0e.txt.echa.1ext 9 *ate H para poner la fecha cuando se e-ecute el form ,nd +ub H-- al final de la ventana de codigo, vamos a crear tres procedimientos que no estan ligados al evento de ningun control, y que pueden ser e-ecutados cuando se requiera, aun sin e-ecutar ningun evento. =ublic +ub sumar<mporte56 H suma solo la ultima lista, osea, los importes *im i As <nteger *im d1otal As *ouble d1otal 9 % .or i 9 % 1o 0e.lst<mporte.3ist'ount - & d1otal 9 d1otal ? (al50e.lst<mporte.3ist5i66 2ext

0e.txt+ubtotal.1ext 9 d1otal <f d1otal L % 1hen H aqui se hacen los calculos para el subtotal, iva y total 0e.txt<(A.1ext 9 /ound55(al50e.txt+ubtotal.1ext6 B &%%6 M &), $6 0e.txt1otal.1ext 9 (al50e.txt+ubtotal.1ext6 ? (al50e.txt<(A.1ext6 ,nd <f ,nd +ub =rivate +ub guardar.actura56 *im i As <nteger +heets5 Kfacturas J 6.Activate H activamos la ho-a en la que vamos a traba-ar <f 1rim5/ange5 KA$K 6.(alue6 9 KK 1hen H localizamos la celda en donde vamos a empezar a insertar /ange5 KA$K 6.Activate ,lse /ange5 J A& J 6.,nd5xl*o!n65xl*rop*o!n6.Activate ,nd <f Active'ell.(alue 9 0e.txt2o.actura.1ext H insertamos los datos Active'ell.2ext.(alue 9 0e.txt.echa.1ext Active'ell.2ext.2ext.(alue 9 0e.txt/azon.1ext .or i 9 % 1o 0e.lst'antidad.3ist'ount Active'ell.2ext.2ext.2ext.(alue 9 0e.lst*escripcion.3ist5i6 Active'ell.2ext.2ext.2ext.2ext.(alue 9 0e.lst=recio.3ist5i6 Active'ell.2ext.2ext.2ext.2ext.2ext.(alue 9 0e.lst'antidad.3ist5i6 Active'ell.2ext.2ext.2ext.2ext.2ext.2ext.(alue 9 0e.lst<mporte.3ist5i6 2ext ,nd +ub =rivate +ub <mprimir.actura56 H esta hace lo mismo pero con la ho-a de impresion *im i As <nteger +heets5 J<0=/,+<#2N 6.Activate /ange5 Ka&:h$EK 6.'lear'ontents H limpiamos la ho-a para la nueva impresion 5esta linea es necesaria6 /ange5 Jg$N 6.(alue 9 0e.txt.echa.1ext /ange5 J'$N 6.(alue 9 0e.txt/azon.1ext /ange5 J'8N 6.(alue 9 0e.txt*ireccion.1ext /ange5 JbDN 6.+elect .or i 9 % 1o 0e.lst'antidad.3ist'ount - & Active'ell.(alue 9 0e.lst'antidad.3ist5i6 Active'ell.2ext.(alue 9 0e.lst*escripcion.3ist5i6 Active'ell.2ext.2ext.(alue 9 0e.lst=recio.3ist5i6 Active'ell.2ext.2ext.2ext.2ext.(alue 9 0e.lst=recio.3ist5i6 Active'ell.2ext.2ext.2ext.2ext.2ext.(alue 9 0e.lst<mporte.3ist5i6 Active'ell5xl*rop*o!n6.Activate 2ext /ange5 Jg&ON 6.(alue 9 0e.txt+ubtotal.1ext /ange5 Jg$%N 6.(alue 9 0e.txt<(A.1ext

/ange5 Jg$&N 6.(alue 9 0e.txt1otal.1ext /ange5 Jb$%N 6.(alue 9 0e.txt3etras.1ext Active indo!.+elected+heets.=rint#ut 'opies:9&, 'ollate:91rue, <gnore=rintAreas:9.alse ,nd +ub - aqui las capturas

-- 2#1A'<#2 - en el e-emplo no estoy incluyendo la funcion para convertir los numeros en texto porque es muy largo, sin embargo, en el archivo de e-emplo que de-o al final si esta implementada. y eso es todo con respecto a la facturacion. 'A/:A/ '3<,21,+ - cierra el formulario frm.acturacion - agrega otro formulario llamado frm"uscar'liente con caption 9 "uscar 'liente - agregale los siguientes controles.

lbl'lientes con caption 9 'lientes cmb'lientes con style 9 $ frm+tyle*rop*o!n3ist 5lista para escoger items6 cmdAceptar con caption 9 Aceptar ubicalos de la siguiente manera: lbl'lientes en la parte mas arriba, luego aba-o el cmb'lientes y aba-o de este pones el cmdAceptar.

los eventos: control cmd'lientes, evento 'hange =rivate +ub cmb'lientesI'hange56 'ells..ind5 hat:90e.cmb'lientes.1ext, After:9Active'ell, 3oo@<n:9 I xl.ormulas, 3oo@At:9xl=art, +earch#rder:9xl"y/o!s, +earch*irection:9 I xl2ext, 0atch'ase:9.alse, +earch.ormat:9.alse6.Activate ,nd +ub control cmdAceptar, evento 'lic@ =rivate +ub cmdAceptarI'lic@56 ith frm.acturacion .txt/azon.1ext 9 Active'ell.(alue .txt/.'.1ext 9 Active'ell.2ext.(alue .txt*ireccion.1ext 9 Active'ell.2ext.2ext.(alue ,nd ith ;nload 0e ,nd +ub control ;ser.orm, evento Activate =rivate +ub ;ser.ormIActivate56 *im s;ltima'elda As +tring 0e.cmb'lientes.'lear +heets5 J'3<,21,sN 6.Activate <f 1rim5/ange5 JA$N 6.(alue6 9 KK 1hen ,xit +ub <f 1rim5/ange5 JA8N 6.(alue6 9 KK 1hen 0e.cmb'lientes.Add<tem 5/ange5 JA$N 6.(alue6

,xit +ub ,nd <f s;ltima'elda 9 /ange5 JA&N 6.,nd5xl*o!n6.Address .or ,ach f <n /ange5 JA$:K P s;ltima'elda6.'ells 0e.cmb'lientes.Add<tem 5f.(alue6 2ext ,nd +ub asi se debe ver en la ventana de codigo

y con eso ya podemos cargar a los clientes en la factura. A:/,:A/ =/#*;'1#+ a la factura es similar a cargar los clientes, solo que vamos a llenar las listas.

- cierra los formularios abiertos - agrega un nuevo formulario llamado frmAgregar=roducto y le pones caption 9 Agregar =roductos - insertale los siguientes controles: cmb'lave con style 9 $ frm+tyle*rop*o!n3ist txt*escripcion con enabled 9 false txt=recio con enabled 9 false txt'antidad cmdAgregar con caption 9 Agregar a los txtHs y al cmb les pones sus respectivos lblHs asi podria verse el diseFo:

y ahora el codigos de los eventos: =rivate +ub cmb'laveI'hange56 <f 0e.cmb'lave.(alue 9 KK 1hen ,xit +ub *im s;ltima'elda As +tring 0e.txt*escripcion.1ext 9 KK 0e.txt=recio.1ext 9 KK <f 0e.cmb'lave.3ist'ount L & 1hen s;ltima'elda 9 /ange5 JA&N 6.,nd5xl*o!n6.Address ,lse s;ltima'elda 9 KA$K ,nd <f /ange5 JA$:K P s;ltima'elda6.+elect +election..ind5 hat:91rim50e.cmb'lave.1ext6, After:9Active'ell, 3oo@<n:9xl(alues I , 3oo@At:9xl=art, +earch#rder:9xl"y/o!s, +earch*irection:9 I xl2ext, 0atch'ase:9.alse, +earch.ormat:9.alse6.Activate ith 0e

.txt*escripcion.1ext 9 Active'ell.2ext.(alue .txt=recio.1ext 9 Active'ell.2ext.2ext.(alue ,nd ith ,nd +ub =rivate +ub cmdAgregarI'lic@56 <f 1rim50e.txt'antidad.1ext6 9 KK 1hen 0sg"ox 5 J*ebes ingresar la cantidadQQN 6: ,xit +ub <f 0e.txt*escripcion.1ext 9 KK 1hen 0sg"ox 5 J*ebes elegir un productoQQN 6: ,xit +ub ith frm.acturacion .lst'antidad.Add<tem 50e.txt'antidad.1ext6 .lst*escripcion.Add<tem 50e.txt*escripcion.1ext6 .lst=recio.Add<tem 50e.txt=recio.1ext6 .lst<mporte.Add<tem 5+tr5(al50e.txt'antidad.1ext6 M (al50e.txt=recio.1ext666 ,nd ith frm.acturacion.sumar<mporte 0e.txt*escripcion.1ext 9 KK 0e.txt=recio.1ext 9 KK 0e.txt'antidad.1ext 9 KK 0e.cmb'lave.3ist<ndex 9 -& 0e.cmb'lave.+et.ocus ,nd +ub =rivate +ub txt'antidadIRey=ress5"y(al ReyAscii As 0+.orms./eturn<nteger6 H esto es para que el textbox solo acepte numeros <f ReyAscii S CD #r ReyAscii L E7 1hen ReyAscii 9 % ,nd <f ,nd +ub =rivate +ub ;ser.ormIActivate56 *im s;ltima'elda As +tring 0e.cmb'lave.'lear +heets5 J=/#*;'1#+K 6.Activate <f 1rim5/ange5 JA$N 6.(alue6 9 KK 1hen ,xit +ub <f 1rim5/ange5 JA8N 6.(alue6 9 KK 1hen 0e.cmb'lave.Add<tem 5/ange5 JA$N 6.(alue6 ,xit +ub ,nd <f s;ltima'elda 9 /ange5 JA&N 6.,nd5xl*o!n6.Address .or ,ach f <n /ange5 JA$:K P s;ltima'elda6.'ells 0e.cmb'lave.Add<tem 5f.(alue6 2ext ,nd +ub - aqui estan las capturas pa que vean la identacion

- ,3 0,2; es para finalizar el e-emplo: - inserta un form con nombre frm0enu y caption 9 0enu -inserta tres botones cmd.acturar con caption 9 .acturar cmd'aptura'liente con caption 9 Agregar 'liente cmd'aptura=roducto con caption 9 Agregar =roducto - ubicalos en el orden de creacion uno al lado de otro este es el aspecto que podria tener:

- en el evento 'lic@ del control cmd.acturar escribe lo siguiente: =rivate +ub cmd.acturarI'lic@56 frm.acturacion.+ho! ,nd +ub y hasta aqui.

=A/A .<2A3<TA/ - en la ho-a de impresion, debes quitar las lineas y texto que sirvieron para checar la factura con la plantilla sin mover los tamaFos de las celdas. - como podras observar, el codigo hace referencia directa a ciertas celdas y ho-as. +i cambias el nombre de una ho-a, tambien lo debes hacer en el codigo. - el nombre del libro no importa 3# A;, *,",+ <0=3,0,21A/ 1; 0<+0# - una macro o boton para e-ecutar el formulario menu desde excel - el formulario de captura de clientes - el formulario de captura de productos - al hacer clic@ en una lista, las otras tres listas deben activar el item que esta en la misma direccion. 1<=+ - te molesta que los cambios de ho-as e insercion sean visibles detras del formularioGG entonces en el evento activate del menu ponle application.screenupdating 9 false. esto desconecta la pantalla de excel y se queda congelada mientras traba-as en el formulario. 2o olvides poner en true de nuevo esta opcion en el evento queryunload del formulario, sino no vas a poder descongelar la pantalla. - la funcion application.visible 9 false, es igual a la anterior pero esta esconde definitivamente a excel de !indo!s de-ando solo el formulario activo. 1ambien tienes que activarla cuando cierres el formulario. - para e-ecutar el formulario de manera automatica al abrir el libro, en el entorno de ("A, en el explorador de ob-etos das doble clic@ en el ob-eto 1his!or@boo@ y en el evento open le pones frm0enu.sho! - para cerrar el libro cuando cierres el menu pones en el evento queryunload del menu la siguiente linea: active!or@boo@.save H para guardar los cambios hechos application.quit - para controlar el texto que aparece en el statusbar de excel, usas la funcion application.statusbar 9 Klo que quieras escribirK

0#*<.<'A'<#2 =A/A *,+'#21A/ ,U<+1,2'<A+ ';A2*# +, <0=/<0A # :;A/*, 3A .A'1;/A - en la ho-a de productos, agrega una encabezado mas con el titulo existencia

metele algunos datos, estos deben ser numeros 5pues es existencia6

ahora, hay que agregar un procedimiento mas al formulario de facturacion, ese procedimiento sera el encargado de que por cada producto que se encuentre en la factura, sus existencia sea descontada de la ho-a. ese procedimiento es sencillo: =rivate +ub descontar,xistencia5"y(al s*escripcion As +tring, "y(al n'antidad As <nteger6 *im s;ltima'elda As +tring *im ho-aActiva As +tring ho-aActiva 9 Active+heet.2ame H para recordar la ho-a activa +heets5K=/#*;'1#+K 6.Activate H nos pasamos a la ho-a de productos H aqui nomas fi-amos los rangos, pa que no marque error si no hay nada en la lista <f 1rim5/ange5Kb$K 6.value6 SL KK 1hen s;ltima'elda 9 /ange5Kb&K 6.,nd5xl*o!n6.Address ,lse s;ltima'elda 9 Kb$K ,nd <f

Hseleccionamos el rango de busqueda, para hacer mas rapido el proceso /ange5Kb$:K P s;ltima'elda6.+elect H esto es para localizar la clave que nos interesa... mmm estoy pensando que H esta parte deberia ser mas corta. +election..ind5 hat:9s*escripcion, After:9Active'ell, 3oo@<n:9xl(alues I , 3oo@At:9xl=art, +earch#rder:9xl"y/o!s, +earch*irection:9 I xl2ext, 0atch'ase:9.alse, +earch.ormat:9.alse6.Activate H una vez localizada la clave, solo hacemos la resta ith 0e Active'ell.2ext.2ext.value 9 (al5Active'ell.2ext.2ext.value6 - n'antidad ,nd ith Hfinalmente, regresamos a la ho-a anterior, esto es para evitar errores Active or@boo@.+heets5ho-aActiva6.Activate ,nd +ub H aqui esta la pantalla pa que vean la identacion

y luego, en el mismo formulario de facturacion, en el evento clic@ del boton cmdAceptar modificamos el codigo para que K traba-e K este nuevo procedimiento. esta modificacion consta de agregar solamente una linea dentro del bucle, asi nos aseguramos de que se e-ecute por cada producto de la lista: =rivate +ub guardar.actura56 *im i As <nteger +heets5KfacturasK 6.Activate H activamos la ho-a en la que vamos a traba-ar <f 1rim5/ange5KA$K 6.value6 9 KK 1hen H localizamos la celda en donde vamos a empezar a insertar /ange5KA$K 6.Activate ,lse /ange5KA&K 6.,nd5xl*o!n65xl*rop*o!n6.Activate ,nd <f Active'ell.value 9 0e.txt2o.actura.1ext H insertamos los datos Active'ell.2ext.value 9 0e.txt.echa.1ext Active'ell.2ext.2ext.value 9 0e.txt/azon.1ext .or i 9 % 1o 0e.lst'antidad.3ist'ount - &

Active'ell.2ext.2ext.2ext.value 9 0e.lst*escripcion.3ist5i6 Active'ell.2ext.2ext.2ext.2ext.value 9 0e.lst=recio.3ist5i6 Active'ell.2ext.2ext.2ext.2ext.2ext.value 9 0e.lst'antidad.3ist5i6 Active'ell.2ext.2ext.2ext.2ext.2ext.2ext.value 9 0e.lst<mporte.3ist5i6 descontar,xistencia 0e.lst*escripcion.3ist5i6, (al50e.lst'antidad.3ist5i66 2ext ,nd +ub

pruebenlo y me dicen que px. descargar el libro de e-emplo: https:BBs@ydrive.live.comBGcid9)A7)"'.*8OE&O,A,Pid9)A7)"'.*8OE&O,A, V$&8O7Wcid9)A7)"'.*8OE&O,A,Pid9)A7)"'.*8OE&O,A,V$&8O7 - quiero aprovechar para agradecer las 7%%% visitas y sus putos )8 puntos, aunque con el @arma eso ya vale madres.