Manual de Macros en Excel

download Manual de Macros en Excel

of 88

Transcript of Manual de Macros en Excel

  • 7/24/2019 Manual de Macros en Excel

    1/88

    Manual de macros en Excel

    Captulo 1: Manual de Macros.doc

    INTRODUCCIN

    Qu es una macro?. Una macro son un conjunto de instrucciones que sirven paraautomatizar procesos. Refirindonos a excel supon!amos que realizamos frecuentemente laacci"n de seleccionar un ran!o para aplicarle ne!rita cam#io de fuente $ centrado. En lu!arde %acer estas acciones manualmente se puede ela#orar una macro e invocarla para queejecute los tres procesos autom&ticamente.

    '#jetos propiedades $ mtodos. ( la %ora de tra#ajar con macros en Excel de#en tenerseclaros ciertos conceptos de lo que se llama pro!ramaci"n orientada a o#jetos )''*+. ,o nosextenderemos demasiado so#re la ''* pero si definiremos a continuaci"n los conceptos de'#jeto *ropiedades $ Mtodos.

    Objeto.Cuando en el mundo real nos referimos a o#jeto si!nifica que %a#lamos de al!o m&so menos a#stracto que puede ser cualquier cosa. -i decidimos concretar un poco m&spodemos referirnos a o#jetos coc%e o#jetos silla o#jeto casa etc. En ''* la !eneralizaci"n)o definici"n+ de un o#jeto se llama Clase as la clase coc%e seria como la representante detodos los coc%es del mundo mientras que un o#jeto coc%e seria un coc%e en concreto. e

    momento no definiremos ni estudiaremos las clases sino que nos concentraremos en loso#jetos ten!a en cuenta pero que cualquier o#jeto est& definido por una clase. Cuandodecimos que la clase coc%e representa a todos los coc%es del mundo si!nifica que definecomo es un coc%e cualquier coc%e. ic%o de otra forma $ para aproximarnos a la definici"ninform&tica la clase coc%e define al!o que tiene cuatro ruedas un motor un c%asis...entonces cualquier o#jeto real de cuatro ruedas un motor un c%asis... es un o#jeto de laclase coc%e.

    Propiedades.Cualquier o#jeto tiene caractersticas o propiedades como por ejemplo elcolor la forma peso medidas etc. Estas propiedades se definen en la clase $ lue!o separticularizan en cada o#jeto. (s en la clase coc%e se podran definir las propiedades Color

    (nc%o $ /ar!o lue!o al definir un o#jeto concreto como coc%e $a se particularizaran estaspropiedades por ejemplo: Color 0 Rojo (nc%o 0 metros $ /ar!o 0 23 metros.

    todos. /a ma$ora de o#jetos tienen comportamientos o realizan acciones por ejemplouna acci"n evidente de un o#jeto coc%e es el de moverse o lo que es lo mismo trasladarsede un punto inicial a un punto final. Cualquier proceso que implica una acci"n o pauta decomportamiento por parte de un o#jeto se define en su clase para que lue!o puedamanifestarse en cualquiera de sus o#jetos. (s en la clase coc%e se definira en el mtodomover todos los procesos necesarios para llevarlo a ca#o )los procesos para desplazar de un

  • 7/24/2019 Manual de Macros en Excel

    2/88

    punto inicial a un punto final+ lue!o cada o#jeto de la clase coc%e simplemente tendra queinvocar este mtodo para trasladarse de un punto inicial a un punto final cualesquiera quefueran esos puntos.

    Repasemos a continuaci"n todos estos conceptos pero a%ora desde el punto de vista de

    al!unos de los o#jetos que nos encontraremos en Excel como 4or5-%eet )'#jeto %oja dec&lculo+ o Ran!e )'#jeto casilla o ran!o de casillas+. Un o#jeto Ran!e est& definido por unaclase donde se definen sus propiedades recordemos que una propiedad es unacaracterstica modifica#le o no de un o#jeto. Entre las propiedades de un o#jeto Ran!eest&n 6alue que contiene el valor de la casilla Column $ Ro7 que contienenrespectivamente la fila $ la columna de la casilla 8ont que contiene la fuente de loscaracteres que muestra la casilla etc.

    Ran!e"como o#jeto tam#in tiene mtodos recordemos que los mtodos sirven para llevara ca#o una acci"n so#re un o#jeto. *or ejemplo el mtodo (ctivate %ace activa una celdadeterminada Clear #orra el contenido de una celda o ran!o de celdas Cop$ copia el

    contenido de la celda o ran!o de celdas en el portapapeles...Conjuntos. Una conjunto es una colecci"n de o#jetos del mismo tipo para los que conozcanal!9n len!uaje de pro!ramaci"n es un arra$ de o#jetos. *or ejemplo dentro de un li#ro detra#ajo puede existir m&s de una %oja )4or5-%eet+ todas las %ojas de un li#ro de tra#ajoforman un conjunto el conjunto 4or5-%eets. Cada elemento individual de un conjunto sereferencia por un ndice de esta forma la primera se!unda $ tercera %oja de un li#ro detra#ajo se referenciar&n por 4or5-%eets)1+ 4or5-%eets)+ $ 4or5-%eets)2+.

    Objetos de Objetos. Es mu$ %a#itual que una propiedad de un o#jeto sea otro o#jeto.-i!uiendo con el coc%e una de las propiedades del coc%e es el motor $ el motor es uno#jeto con propiedades como cu#icaje ca#allos n9mero de v&lvulas etc $ mtodos comoaumentarrevoluciones co!ercom#usti#le moverpistones etc..

    En Excel el o#jeto 4or5-%eets tiene la propiedad Ran!e que es un o#jeto Ran!e tiene lapropiedad 8ont que es tam#in un o#jeto $ 8ont tiene la propiedad ;old )ne!rita+.

  • 7/24/2019 Manual de Macros en Excel

    3/88

    so#re su implementaci"n s"lo de#emos conocer sus propiedades $ mtodos $ utilizarlos deforma correcta.

    ;ueno despus de esta extensa pero necesaria introducci"n pasemos $a a %acer al!unacosa en Excel. ,o es necesario que se aprenda lo anterior al pi de la letra $ tampoco es

    necesario que lo comprenda al cien por cien s"lo tn!alo presente para las definiciones quevienen a continuaci"n $ ver& como va asimilando los conceptos de '#jeto propiedadesmtodos etc.

    %ditor de &isua' $asic.

    El editor de visual #&sic es la aplicaci"n que utilizaremos para construir las macros queinteractuaran junto con los li#ros de tra#ajo. ( continuaci"n prepararemos un arc%ivo en elque escri#iremos las primeras instrucciones en 6isual #asic.

    *reparar un arc%ivo nuevo: *ara entrar en el editor de 6isual ;asic ejecute los pasos

    si!uientes1. (ctive opci"n =erramientas> Macro> Editor de 6isual ;&sic. -e a#rir& la ventana si!uiente.

    Maximize la ventana para tra#ajar m&s c"modamente $ procure tener activadas la ventanaExplorador de pro$ectos $ la ventana *ropiedades )6er> Explorador de pro$ectos $ 6er>6entana propiedades+

    Insertar un nue(o m#du'o: Un m"dulo sirve para a!rupar procedimientos $ funciones. Elprocedimiento $ la funci"n son entidades de pro!ramaci"n que sirven para a!ruparinstrucciones de c"di!o que realizan una acci"n concreta. *ara insertar un m"dulo active

    opci"n del men9 ?nsertar> M"dulo. -e activar& una nueva ventana si aparece demasiadopeque@a maximcela.

    Insertar un procedimiento. Aa %emos dic%o que un procedimiento es un #loque deinstrucciones de c"di!o que sirven para llevar a ca#o al!una tarea especfica. Unprocedimiento empieza siempre con la instrucci"n

    Sub Nombre_Procedimiento

    A termina con la instrucci"n

    End Sub

    ( continuaci"n crearemos un procedimiento para poner el texto B=olaB en la casilla (1.Ejemplo 1

    -u# Primero

    Range "A1").Value = "Hola"

  • 7/24/2019 Manual de Macros en Excel

    4/88

    End Sub

    '#serve el c"di!o. Range("A1").Value="Hola" . En esta lnea estamos indicando quetra#ajamos con un o#jeto Ran!e. *ara indicarle que nos referimos a la casilla (1encerramos entre parntesis esta referencia )m&s adelante ver& otra forma de referirnos a

    las casillas+. e este o#jeto indicamos que queremos esta#lecer un nuevo valor para lapropiedad Value o#serve que para separar el o#jeto de su propiedad utilizamos la notaci"npunto. Recuerde que el conjunto Ran!e es un o#jeto que depende del o#jeto 4or5-%eetsas por ejemplo el si!uiente c"di!o %ara lo mismo que el anterior.

    WorS!eet(1).Range ("A1").Value = "Hola"

    ;ueno de %ec%o no %ace lo mismo en la primera opci"n el texto B=olaB se pone dentro de lacasilla (1 de la %oja activa mientras que en el se!undo es en la casilla (1 de primera %oja) del conjunto de %ojas+. /a se!unda notaci"n es m&s lar!a pero tam#in m&s recomenda#le$a que se especifican todos los o#jetos. En muc%as ocasiones se pueden omitir al!unos

    o#jetos precedentes no le aconsejamos %acerlo sus pro!ramas perder&n claridad $concisi"n. -i desea %acer referencia a la %oja activa puede utilizar Acti#eS!eet as el primerejemplo lo dejaremos de la manera si!uiente.

    Sub Primero

    Acti#eS!eet.Range("A1").Value = "Hola"

    End Sub

    -i desea poner B=olaB )o cualquier valor+ en la casilla activa puede utilizar la propiedad

    )o#jeto+ (ctivecell de 4or5-%eets. (s para poner B=olaB en la casilla activa de la %oja activaseria

    Sub Primero

    Acti#eS!eet.Acti#e$ell.Value = "Hola"

    End Sub

    *ara terminar con este primer ejemplo. 4or5-%eets est&n dentro del '#jeto Wor%oo)li#ros de tra#ajo+ $ 4or5;oo5s est&n dentro de (pplication. (pplication es el o#jeto superior

    es el que representa la aplicaci"n Excel. (s el primer ejemplo si!uiendo toda la jerarqua deo#jetos quedara de la forma si!uiente.

    Sub Primero

    A&&lication.Wor%oo(1).WorS!eet(1).Range("A1").Value = "Hola"

    End Sub

  • 7/24/2019 Manual de Macros en Excel

    5/88

    ?nsistiendo con la nomenclatura (pplication casi nunca es necesario especificarlo pienseque todos los o#jetos dependen de este 4or5;oo5s ser& necesario implementarlo si en lasmacros se tra#aja con diferentes li#ros de tra#ajo )diferentes arc%ivos+ a partir de4or5-%eets es aconseja#le incluirlo en el c"di!o so#re todo si se quiere tra#ajar condiferentes %ojas ver& sin em#ar!o que en muc%as ocasiones no se aplica.

    %jecutar un procedimiento o )unci#n. *rue#e ejecutar el primer procedimiento de ejemplo.1. . -it9e el cursor dentro del procedimiento. (ctive opci"n de la #arra de men9s Ejecutar>Ejecutar -u# Userform. Macro> Macros. -e desplie!a unaventana que muestra una lista donde est&s todas las macros incluidas en el li#ro de tra#ajo.-eleccione la macro de la lista $ pulse so#re el #ot"n Ejecutar.

    Ejemplo : En este se!undo ejemplo simplemente ampliaremos la funcionalidad de la macrodel ejemplo 1. (dem&s de escri#ir B=olaB en la casilla (1 de la celda (1 la pondremos enne!rita $ le daremos color al texto. *ara ello utilizaremos las propiedades $o'd * Co'or de'objeto +ont.

    Sub Segundo

    Acti#eS!eet.Range("A1").Value = "Hola"

    Acti#eS!eet.Range("A1").'ont.%old = rue

    Acti#eS!eet.Range("A1").'ont.$olor = R%(*++,-,-)

    End Sub

    True.

  • 7/24/2019 Manual de Macros en Excel

    6/88

    Acti#eS!eet.Range("A1A/").'ont.$olor = R%(*++,-,-)

    End Sub

    6aria#les.

    ( continuaci"n vamos a repetir el pro!rama Ejemplo1 pero en lu!ar de poner B=olaB en lacasilla (1 de la %oja activa dejaremos que el usuario entre un texto desde teclado $ acontinuaci"n !uardaremos ese valor en esa casilla. '#serve que el valor que entre delusuario de#e !uardarse en al!9n lu!ar para poder ponerlo despus en la casilla (1F pues#ien ese valor se !uardar& en una varia#le.

    Una varia#le es simplemente un trozo de memoria que la funci"n o procedimineto se reservapara !uardar datos la forma !eneral de declarar una varia#le es

    02 #ariable AS ti&o.

    -iendo varia#le el nom#re que se asi!na a la misma $

  • 7/24/2019 Manual de Macros en Excel

    7/88

  • 7/24/2019 Manual de Macros en Excel

    8/88

    'ption Explicit

    Sub Entrar_Valor

    0im $ailla A String

    0im e3to A String

    $ailla = n&ut%o3("En >ue cailla >uiere entrar el #alor", "Entrar $ailla")

    e3to = n&ut%o3("ntroducir un te3to " < $!r(1) < "Para la cailla " < $ailla , "Entrada dedato") Acti#eS!eet.Range($ailla).Value = e3to

    End Sub

    ,a sentencia Option %p'icit. En visual #asic no es necesario declarar las varia#les por

    ejemplo en el pro!rama anterior se %u#iera podido prescindir de las lneas im Casilla (s-trin! im

  • 7/24/2019 Manual de Macros en Excel

    9/88

    'ption Explicit 6isual ;asic no da nin!9n tipo de error $ ejecuta el pro!rama. *rue#e elsi!uiente m"dulo e intente ejecutarlo.

    6&tion E3&licit

    Sub Entrar_Valor

    0im e3to A String

    e3to = n&ut%o3("ntroducir un te3to " < $!r(1) < "Para la cailla A1", "Entrada de dato")Acti#eS!eet.Range("A1").Value = eto

    End Sub

    '#serve que el pro!rama no se ejecuta al poner 'ption Explicit forzamos a que se declarentodas las varia#les. 6isual ;asic detecta que la varia#le

  • 7/24/2019 Manual de Macros en Excel

    10/88

    #$tes O lon!itud de cadena ,9mero requerido por los elementos

    Conversi"n de

  • 7/24/2019 Manual de Macros en Excel

    11/88

    Numero1 = Val(n&ut%o3("Entrar el &rimer #alor", "Entrada de dato"))

    Numero* = Val(n&ut%o3("Entrar el &rimer #alor", "Entrada de dato"))

    Acti#eS!eet.Range("A1").Value = Numero1 ? Numero*

    End Sub

    /a funci"n 6al)ato -trin!+ convierte una cadena de caracteres a valor numrico. -i lacadena a convertir contiene al!9n car&cter no numrico devuelve D. (s si al pedir un valorse teclea B=olaB la funci"n 6al devolver& un cero.

    KLN131JJ22L3N23J2N3D223. /a menor posici"n para un n9mero que no sea cero esDDDDDDDDDDDDDDDDDDDDDDDDDDDD1. K2.L a 2.LLF las fracciones se redondean.K.1JL.J2.J a .1JL.J2.JLF las fracciones se redondean. K2JD2E2 a K1JD1NEKJ3 para valores ne!ativosF 1JD1NEKJ3 a 2JD2E2 para valores positivos. El mismointervalo que ou#le para valores numricos. El mismo intervalo que -trin! para valores nonumricos. El valor de retorno de C-tr depende del ar!umento expresi"n.

    Cdec

    ecimal

    C?nt C/n! C-n! C6ar C-tr

    ?nte!er /on! -in!le 6ariant -trin!

  • 7/24/2019 Manual de Macros en Excel

    12/88

    ;ueno despus de esta introducci"n a las varia#les pasemos a estudiar unos cuantoso#jetos $ propiedades que se utilizan %a#itualmente.

    Objeto Ce''s/)i'a3 co'umna0.-irve como el o#jeto ran!e para referenciar una casilla o ran!ode casillas pero en lu!ar de utilizar la referencia de la forma (1 ;1 G2D... utiliza la fila $ la

    columna que ocupa la casilla dentro de la %oja )o o#jeto 4or5-%eet+. *or ejemplo paraponer %ola en la casilla (1 de la %oja activa seria (ctive-%eet.Cells)11+.6alue0B=olaB

    Utilizar Cells para referenciar un ran!o. Esto seria el equivalente aRange("$ailla_nicial$ailla_'inal"). /a forma que se o#tiene utilizando Cells es un pocom&s lar!a pero se ver& que a veces resulta muc%o m&s funcional que utilizando 9nicamenteran!e.

    *ara referirnos al ran!o (1:; pondremos

    Range($ell(1, 1), $ell(/, *)).Value = "Hola"

    'tra forma interesante de Cells es la si!uiente

    Range("A+%1-").$ell(*, 1).Value = "Hola"

    *ondr& en la celda ( el valor B=olaB o#serve que en este ejemplo Cells comienza a contarfilas $ columnas a partir del ran!o especificado en el o#jeto Ran!e.

    &ariab'es de Objetos. Una varia#le o#jeto sirve para %acer referencia a un o#jeto estosi!nifica que podremos acceder a las propiedades de un o#jeto e invocar a sus mtodos atravs de la varia#le en lu!ar de %acerlo directamente a travs del o#jeto. *osi#lemente no

    se utilice demasiado esta clase de varia#les )esta claro que esto depender& de laspreferencias del pro!ramador+ pero %a$ casos en los que no %a$ m&s remedio que utilizarlas por ejemplo en estructuras 8or Eac% ... ,ext como veremos o cuando sea necesarioconstruir funciones que devuelvan ran!os referencias a %ojas etc.

    *ara declarar una varia#le o#jeto se utiliza tam#in la pala#ra im de la formasi!uiente

    *or Ejemplo

    0im R A Range

    0im Ho8a A WorS!eet

    *ara asi!nar un o#jeto a una varia#le de#e utilizar la instrucci"n -et .

    *or Ejemplo

    Set R= Acti#eS!eet.Range("A1%1-")

  • 7/24/2019 Manual de Macros en Excel

    13/88

    Set Ho8a = Acti#eS!eet

    Set Ho8a = WorS!eet(1)

    6eamos a continuaci"n un ejemplo de c"mo utilizar este tipo de varia#les

    Ejemplo . (l!o mu$ simple llenar el ran!o de (1 a ;1D con la pala#ra B=olaB $ despusponer ne!rita o#serve como se asi!na una varia#le o#jeto al o#jeto $ lue!o como se tra#ajacon esa varia#le de la misma forma que tra#ajara directamente so#re el o#jeto.

    Sub ob8()

    0im R A Range

    Set R = Acti#eS!eet.Range("A1-%1+")

    R.Value = "Hola"

    R.'ont.%old = rue

    End Sub

    %' (a'or Not4in!. (l!unas veces puede que sea necesario desasi!nar una varia#le delo#jeto al cual %ace referencia en este caso de#e i!ualar la varia#le al valor ,ot%in! de laforma si!uiente.

    1et &ariab'e5Objeto 6 Not4in!

    =a#itualmente se utiliza ,ot%in! en una estructura condicional para compro#ar si la varia#leo#jeto est& asi!nada. '#serve que si se utiliza una varia#le o#jeto a la cual todava no se le%a %ec%o nin!una asi!naci"n el pro!rama dar& error $ detendr& su ejecuci"n. Es #uenapr&ctica %acer este tipo de compro#aciones antes de tra#ajar con varia#les o#jeto. 6eremosun ejemplo de esto en el tema si!uiente.

    Estructuras condicionales.

    (%ora que $a %a experimentado con unos cuantos o#jetos $ propiedades nos detendremos aestudiar las estructuras condicionales. /as estructuras condicionales son instrucciones de

    pro!ramaci"n que permiten controlar la ejecuci"n de un fra!mento de c"di!o en funci"n de sise cumple o no una condici"n. Estudiaremos en primer lu!ar la instrucci"n if Condici"nt%en..End if )-i Condici"n Entonces...8in -i+ /a estructura condicional que se constru$e conla instrucci"n -i Condici"n Entonces... 8in -i tiene la forma si!uiente. .

    -i Condici"n Entonces

    -entncia1

    http://www.emagister.com/cursos_gratis/visor_cursos/_tophttp://www.emagister.com/cursos_gratis/visor_cursos/_top
  • 7/24/2019 Manual de Macros en Excel

    14/88

    -entncia

    ...

    -entencian

    8in -i

    Cuando el pro!rama lle!a a la instrucci"n -i Condici"n Entonces se eval9a la condici"n siesta se cumple )es cierta+ se ejecutan todas las sentencias que est&n encerradas en el#loque si no se cumple la condici"n se saltan estas sentencias. Esta estructura en 6isual;asic tiene la sintaxis si!uiente

    I) Condici#n T4en

    1entncia7

    1entncia8

    1entnciaN

    %nd I)

    Ejemplo . Entrar una cantidad que representa el precio de al!o por el teclado con lainstrucci"n ?nput;ox $ !uardarlo en la celda (1 de la %oja activa. -i el valor entrado desde elteclado )$ !uardado en (1+ es superior a 1DDD pedir descuento con otro ?nput;ox $!uardarlo en la casilla ( de la %oja activa. Calcular en (2 el precio de (1 menos el

    descuento de (.Sub $ondicional()

    Acti#eS!eet.Range("A1").Value = -

    Acti#eS!eet.Range("A*").Value = -

    Acti#eS!eet.Range("A").Value = -

    P*oner las casillas donde se !uardan los valores D.

    Acti#eS!eet.Range("A1").Value = Val(n&ut%o3("Entrar el &recio", "Entrar"))

    H -i el valor de la casilla (1 es ma$or que 1DDD entonces pedir descuento

    : Acti#eS!eet.Range("A1").Value @ 1--- !en

    Acti#eS!eet.Range("A*").Value = Val(n&ut%o3("Entrar 0ecuento", "Entrar"))

  • 7/24/2019 Manual de Macros en Excel

    15/88

    End :

    Acti#eS!eet.Range("A").Value = Acti#eS!eet.Range("A1").Value _Acti#eS!eet.Range("A*").Value

    End Sub

    Ejemplo L. El mismo que el anterior pero utilizando varia#les.

    'ption Expl icit -u# Condicional)+

    im *recio (s ?nte!er

    im escuento (s ?nte!er

    *recio 0 D

    escuento 0 D

    *recio 0 6al)?nput;ox)BEntrar el precioB BEntrarB++

    H -i el valor de la varia#le precio es ma$or que 1DDD entonces pedir descuento

    ?f *recio Q 1DDD

  • 7/24/2019 Manual de Macros en Excel

    16/88

    celdas para operarlas $ dejarlas en otras celdas $ consecuentemente aumente el n9mero deoperaciones creemos que con ello se !ana en le!i#ilidad $ flexi#ilidad.

    Ejemplo .

    Macro que compara los valores de las casillas (1 $ ( de la %oja activa. -i son i!uales poneel color de la fuente de am#as en azul.

    Sub $ondicional*()

    : Acti#eS!eet.Range("A1").Value = Acti#eS!eet.Range("A*").Value !enActi#eS!eet.Range("A1").'ont.$olor = R%(-, -, *++) Acti#eS!eet.Range("A*").'ont.$olor =R%(-, -, *++) End :

    End -u#

    Etructura :..Ele

    Esta estructura se utiliza cuando se requiere una respuesta alternativa a una condici"n. -uestructura es la si!uiente.

    -i Condici"n Entonces

    -entncia1

    -entncia . .

    -entncia,-ino

    -entncia1

    -entncia . .

    -entncia,

    8in -i

    '#serve que si se cumple la condici"n se ejecuta el #loque de sentencias delimitado por -iCondici"n Entonces $ -i no se cumple la condici"n se ejecuta el #loque delimitado por -ino $8in -i. En 6isual ;asic la instrucci"n -i Condici"n Entonces ... -ino ... 8in -i se expresa conlas instrucciones si!uientes.

    : $ondici;n !en

    SentBncia1

  • 7/24/2019 Manual de Macros en Excel

    17/88

    SentBncia* . .

    SentBnciaN

    Ele

    SentBncia1

    SentBncia* . .

    SentBnciaN

    End :

    Ejemplo N. Entrar una cantidad que representa el precio de !uardarlo en la celda (1 de la%oja activa. -i es superior a 1DDD se aplica un descuento del 1D !uarda en la casilla ( de

    la %oja activa. Colocar descuento. al!o por el teclado con la instrucci"n ?nput;ox $ valorentrado desde el teclado )$ !uardado en (1+ es sino se aplica un descuento del 3 eldescuento se en (2 el total descuento $ en (J el total menos el

    Sub $ondicional_Ele()

    0im Precio A Single

    0im 0ecuento A Single

    Precio = -

    Precio = Val(n&ut%o3("Entrar el &recio", "Entrar"))

    H -i el valor de la varia#le precio es ma$or que 1DDD entonces aplicar descuento del 1D

    : Precio @ 1--- !en

    0ecuento = Precio C (1- D 1--)

    Acti#eS!eet.Range("A*").Value = -,1

    Ele

    H -ino S (plicar descuento del 3

    0ecuento = Precio C (+ D 1--)

    Acti#eS!eet.Range("A*").Value = -,-+

    End :

  • 7/24/2019 Manual de Macros en Excel

    18/88

    Acti#eS!eet.Range("A1").Value = Precio Acti#eS!eet.Range("A").Value = 0ecuentoActi#eS!eet.Range("A").Value = Precio 0ecuento

    End Sub

    Ejemplo 1D. Restar los valores de las casilla (1 $ (. uardar el resultado en (2. -i elresultado es positivo o D poner la fuente de (2 en azul sino ponerla en rojo.

    Sub $ondicional_Ele*()

    Acti#eS!eet.Range("A").Value = A#ti#eS!eet.Range("A1").Value _Acti#eS!eet.Range("A*").Value

    : Acti#eS!eet("A").Value F - !en

    Acti#eS!eet.Range("A").'ont.$olor = R%(*++,-,-)

    Ele

    Acti#eS!eet.Range("A").'ont.$olor = R%(-,-,*++)

    End :

    End Sub

    T

    %structuras I) anidadas.,o tiene que sorprenderle dentro de una estructura if puede ir otra $ dentro de esta otra $otra... 6ea el ejemplo si!uiente.

    Ejemplo 11. Comparar los valores de las casilla (1 $ ( de la %oja activa. -i son i!ualesescri#ir en (2 B/os valores de (1 $ ( son i!ualesB si el valor de (1 es ma$or que (escri#ir B(1 ma$or que (B sino escri#ir B( ma$or que (1B .

    Sub $ondicional()

    : Acti#eS!eet.Range("A1").Value = Acti#eS!eet.Range("A*").Value !en

    Acti#eS!eet.Range("A").Value = "Go Valore de A1 A* on iguale"

    Ele

    : Acti#eS!eet.Range("A1").Value @ Acti#eS!eet.Range("A*").Value !en

    Acti#eS!eet.Range("A").Value = "A1 maor >ue A*"

  • 7/24/2019 Manual de Macros en Excel

    19/88

    Ele

    Acti#eS!eet.Range("A").Value = "A* maor >ue A1"

    End :

    End :

    End Sub

    '#serve que la se!unda estructura ?f..Else..End ?f queda dentro del Else de la primeraestructura. Esta es una re!la !eneral cuando pone un End ?f este cierra siempre el 9ltimo ?f )o Else+ a#ierto.

    T

    6&eradore l;gico.

    Estos operadores se utilizan cuando se necesitan evaluar dos o m&s condiciones para decidirsi se ejecutan o no determinadas acciones.

    Operador ,#!ico 9nd /:0.Utilizaremos este operador cuando sea preciso que para ejecutarun #loque de instrucciones se cumpla m&s de una condici"n. '#serve que de#er&n cumplirsetodas las condiciones . 6ea el ejemplo si!uiente. Ejemplo 1. Entrar el ,om#re la cantidad $el precio de un producto desde el teclado $ !uardarlos respectivamente en (1 ( $ (2.Calcular el total $ !uardarlo en (J. -i el total es superior a 1D.DDD $ el nom#re del productoes B*atatasB pedir un descuento calcularlo el total descuento $ !uardarlo en (3 lue!o restar

    el descuento del total $ !uardarlo en (.Sub E8em&lo_1*()

    0im Producto A String

    0im $antidad A nteger

    0im Precio A Single

    0im otal A Single

    0im 0ecuento A Single

    0im otal0ecuento A Single

    Precio = -

    Producto = n&ut%o3("Entrar Nombre del Producto","Entrar")

  • 7/24/2019 Manual de Macros en Excel

    20/88

    Precio = Val(n&ut%o3("Entrar el &recio", "Entrar"))

    Precio = Val(n&ut%o3("Entrar la cantidad", "Entrar"))

    otal = Precio C $antidad

    Acti#eS!eet.Range("A1").Value = Producto Acti#eS!eet.Range("A*").Value = PrecioActi#eS!eet.Range("A").Value = $antidad Acti#eS!eet.Range("A").Value = otal

    H -i total ma$or que 1D.DDD $ el producto es *atatas aplicar descuento.

    : otal @ 1---- And Producto = "Patata" !en

    0ecuento = Val(n&ut%o3("Entrar 0ecuento", "Entrar"))

    otal_0ecuento = otal C (0ecuento D 1--)

    otal = otal otal_0ecuento

    Acti#eS!eet.Range("A+").Value = otal_0ecuento Acti#eS!eet.Range("AI").Value = otal

    End :

    End Sub

    '#serve que para que se ejecute el #loque de instrucciones entre ?f.. End ?f de#en cumplirselas dos condiciones que se eval9an si falla cualquiera de las dos )o las dos a la vez+ no se

    ejecuta dic%o #loque.Operador ,#!ico Or /O0.Utilizaremos este operador cuando sea preciso que para ejecutarun #loque de instrucciones se cumpla al!una de una serie de condiciones. '#serve que s"loes necesario que se cumpla al!una de las condiciones que se eval9an. 6ea el ejemplosi!uiente.

    Ejemplo 12. Entrar el ,om#re la cantidad $ el precio de un producto desde el teclado $!uardarlos respectivamente en (1 ( $ (2.

    Calcular el total $ !uardarlo en (J.

    -i el total es superior a 1D.DDD o el nom#re del producto el B*atatasB pedir un descuentocalcularlo el total descuento $ !uardarlo en (3 lue!o restar el descuento del total $ !uardarloen (.

    Sub E8em&lo_1()

    0im Producto A String

  • 7/24/2019 Manual de Macros en Excel

    21/88

    0im $antidad A nteger

    0im Precio A Single

    0im otal A Single

    0im 0ecuento A Single

    0im otal_0ecuento A Single

    Precio = -

    Producto = n&ut%o3("Entrar Nombre del Producto","Entrar")

    Precio = Val(n&ut%o3("Entrar el &recio", "Entrar"))

    Precio = Val(n&ut%o3("Entrar la cantidad", "Entrar"))

    otal = Precio C $antidad

    Acti#eS!eet.Range("A1").Value = Producto

    Acti#eS!eet.Range("A*").Value = Precio

    Acti#eS!eet.Range("A").Value = $antidad

    Acti#eS!eet.Range("A").Value = otal

    H -i total ma$or que 1D.DDD o el producto es *atatas aplicar descuento.

    : otal @ 1---- 6r Producto = "Patata" !en

    0ecuento = Val(n&ut%o3("Entrar 0ecuento", "Ent rar"))

    otal_0ecuento = otal C (0ecuento D 1--) otal = otal otal_0ecuento

    Acti#eS!eet.Range("A+").Value = otal_0ecuento

    Acti#eS!eet.Range("AI").Value = otal

    End :

    End Sub

    '#serve que para que se ejecute el #loque de instrucciones entre ?f.. End ?f s"lo es necesarioque se cumpla al!una de las dos condiciones que se eval9an )o las dos a la vez+. -"locuando no se cumple nin!una de las dos no se ejecutan las instrucciones del #loque.

  • 7/24/2019 Manual de Macros en Excel

    22/88

  • 7/24/2019 Manual de Macros en Excel

    23/88

    Condici"n 8alsa Cierta 8alsa Cierta

    Resultado 8also Cierto Cierto Cierto

    '#serve que con el operador (, de#en de cumplirse todas las condiciones )dos o

    veinticinco+ para que el resultado sea cierto. Con el operador 'R s"lo es necesario que secumpla una )de las dos o de las veinticinco+ para que el resultado sea cierto.

    Etructura Select $ae.

    En ocasiones se dar& el caso que en funci"n del valor o ran!o de valores que pueda teneruna varia#le una casilla una expresi"n etc. de#er&n llevarse a ca#o diferentes acciones o!rupos de acciones. 6ea el ejemplo si!uiente. Ejemplo 13. Macro que suma resta multiplicao divide los valores de las casillas (1 $ ( dependiendo de si ;1 contiene el si!no O K x :. Elresultado lo deja en (2. -i en ;1 no %a$ nin!uno de los si!nos anteriores en (2 de#e dejarseun D.

    Sub E8em&lo_1+()

    0im Signo A String

    0im Valor1 A nteger,

    Valor* A nteger,

    otal A nteger Valor1 = Acti#eS!eet.Range("A1").Value

    Valor* = Acti#eS!eet.Range("A*").Value

    Signo = Acti#eS!eet.Range("%1").Value otal=-

    : Signo = "?" !en

    otal = Valor1 ? Valor*

    End i:

    : Signo = "" !en

    otal = Valor1 Valor*

    End i:

    : Signo = "3" !en

    otal = Valor1 C Valor*

  • 7/24/2019 Manual de Macros en Excel

    24/88

    End i:

    : Signo = "" !en

    otal = Valor1 D Valor*

    End i:

    Acti#e$ell.Range("A").Value = otal

    End Sub

    '#serve que en el ejemplo anterior todas las instrucciones if eval9an la misma varia#le. Elpro!rama funciona correctamente pero para estos casos es mejor utilizar la instrucci"n-elect Case el motivo principal es por le!i#ilidad $ ele!ancia. -elect Case tiene la sintaxissi!uiente

    1%,%CT C91% epresi#n

    Case (a'ores " instrucciones.

    Case (a'ores " Instrucciones. . .

    Case (a'ores" Instrucciones.

    C91% %,1%?nstrucciones en caso que no sean nin!uno de los valores anteriores.

    %ND 1%,%CT6ea el ejemplo anterior solucionado con esta estructura. Ejemplo 1.

    -u# Ejemplo1)+

    im -i!no (s -trin!

    im 6alor1 (s ?nte!er 6alor (s ?nte!er

  • 7/24/2019 Manual de Macros en Excel

    25/88

    End -u#

    6ea el ejemplo si!uiente donde cada sentencia Case eval9a un ran!o de valores. Ejemplo1L. *ro!rama que pide tres notas de un alumno mediante la funci"n ?nput;ox. /as notas vana parar respectivamente a las casillas (1 ( $ (2 de la %oja activa. El pro!rama calcula la

    media $ la deja en (J. -i la media est& entre D $ deja en (3 el mensaje BMu$ deficienteB sila nota es 2 deja en (3 el mensaje BeficienteB si la nota es J deja B?nsuficienteB si es 3B-uficienteB si es B;ienB si est& entre L $ deja B,ota#leB si es ma$or que dejaB-o#resalienteB.

    Sub E8em&lo_1J()

    0im Nota1 A nteger,

    Nota* A nteger,

    Nota A nteger

    0im 2edia A Single

    Nota1 = Val(n&ut%o3("Entrar Nota &rimera e#aluaci;n", "Nota"))

    Nota* = Val(n&ut%o3("Entrar Nota Segunda e#aluaci;n", "Nota"))

    Nota = Val(n&ut%o3("Entrar Nota ercera e#aluaci;n", "Nota"))

    2edia = (Nota1 ? Nota* ? Nota) D

    Acti#eS!eet.Range("A1").Value = Nota1

    Acti#eS!eet.Range("A*").Value = Nota*

    Acti#eS!eet.Range("A").Value = Nota

    Acti#eS!eet.Range("A").Value = 2edia

    Select $ae 2edia

    $ae - o * Acti#eS!eet.Range("A+").Value = "2u de:iciente"

    $ae Acti#eS!eet.Range("A+").Value = "0e:iciente"

    $ae Acti#eS!eet.Range("A+").Value = "nu:iciente"

    $ae + Acti#eS!eet.Range("A+").Value = "Su:iciente"

    $ae I Acti#eS!eet.Range("A+").Value = "%ien"

  • 7/24/2019 Manual de Macros en Excel

    26/88

    $ae J o / Acti#eS!eet.Range("A+").Value = "Notable" $ae @/Acti#eS!eet.Range("A+").Value = "Sobrealiente"

    End Select

    End Sub

    T

    'uncione de com&robaci;n.

    (ntes de terminar con el tema de condicionales veremos unas funciones que nos ser&n 9tilesa la %ora de compro#ar o validar el tipo de los datos entrados desde teclado o simplementelos datos contenidos en una casilla. 6olvamos al ejemplo que codificamos de la manerasi!uiente.

    -u# Ejemplo1)+im -i!no (s -trin!

    im 6alor1 (s ?nte!er 6alor (s ?nte!er

  • 7/24/2019 Manual de Macros en Excel

    27/88

    Numeric/epresi#n03esta funci"n devuelve un valor

  • 7/24/2019 Manual de Macros en Excel

    28/88

    2g%o3 Prom&t="la cailla %1 etL #ac9a", itle="ERR6R"

    $ontinuar= 'ale

    End :

    : $ontinuar !en

    Select $ae igno

    $ae "?" otal = Valor1 ? Valor* $ae "" otal = Valor1 Valor* $ae "3" otal = Valor1 CValor* $ae "" otal = Valor1 D Valor*

    $ae Ele otal = -

    End Select

    Acti#e$ell.Range("A").Value = otal

    End i:

    End Sub

    En lu!ar de los tres ?f de compro#aci"n se %u#iera podido utilizar el operador 'R de lamanera si!uientes

    : not Numeric(Acti#eS!eet.Range("A1")) 6r not Numeric(Acti#eS!eet.Range("A*")) _ 6r

    Em&t(Acti#eS!eet.Range("%1")) !en

    2g%o3 Prom&t="0ebe entrar nKmero en A1 A* un igno (?,,3, ) en %1,itle="ERR6R" Ele M?nstrucciones de las operaciones .......

    End i:

    ,ista de +unciones de Comprobaci#n.

    IsNumric/%presi#n0. Comprue#a si expresi"n tiene un valor que se puedeinterpretar como numrico.

    IsDate/%presi#n0. Comprue#a si expresi"n tiene un valor que se puedeinterpretar como tipo fec%a. Is%mpt*/%presi#n0. Comprue#a que expresi"n ten!a al!9n valor que se %a$a

    inicializado. Is%rror/%presi#n0.Comprue#a si expresi"n devuelve al!9n valor de error. Is9rra*/%presi#n+. Comprue#a si expresi"n )una varia#le+ es un arra$ o no. IsObject/%presi#n0. Comprue#a si expresi"n )una varia#le+ representa una

    varia#le tipo o#jeto. IsNu''/%presi#n0.Comprue#a si expresi"n contiene un valornulo de#ido a datos no v&lidos.

  • 7/24/2019 Manual de Macros en Excel

    29/88

    Not4in!. ,o es propiamente una funci"n sirve para compro#ar si una varia#leo#jeto esta asociada a un o#jeto antes de %acer cualquier operaci"n con ella.Recuerde que para tra#ajar con una varia#le o#jeto antes de#e asi!narse a uno)mediante la instrucci"n -et+ en caso contrario se producir& un error en elpro!rama cuando utilice el o#jeto $ se detendr& su ejecuci"n.

    H -i la varia#le R es ,ot%in! es que no %a sido asi!nada no se puede tra#ajar con ella

    : R Not!ing !en

    2g%o3 Prom&t = "Ga #ariable 6b8eto no !a ido aignada", %utton=#b6, _ itle = "Error"

    Ele

    R.Value = "Hola"

    End : . .

    End Sub

    /a funcin Ms!;ox.

    Esta funci"n muestra un mensaje en un cuadro de di&lo!o %asta que el usuario pulse un#ot"n. /a funci"n devuelve un dato tipo ?nte!er en funci"n del #ot"n pulsado por el usuario. (la %ora de invocar est& funci"n se permiten diferentes tipos de #otones.

    -int&xis de Ms!;ox.

    s!$o/ ensaje3 $otones3 T;tu'o3 9rc4i(o de a*uda3 conteto0

    Mensaje : '#li!atorio es el mensaje que se muestra dentro del cuadro de di&lo!o.

    ;otones : 'pcional. Es un n9mero o una suma de n9meros o constantes )vea ta#la 6alorespara #otones e ?conos+ que sirve para mostrar determinados #otones e iconos dentro delcuadro de di&lo!o. -i se omite este ar!umento asume valor D que corresponde a un 9nico;ot"n 'V.

  • 7/24/2019 Manual de Macros en Excel

    30/88

    Microsoft Excel+.

    Constante 6alor escripci"n

    6#'V'nl$ D Muestra solamente el #ot"n (ceptar

    6#'VCancel 1 Muestra los #otones (ceptar $ Cancelar

    6#(#ortRetr$?!nore Muestra los #otones (nular Reintentar e ?!norar

    6#Aes,oCancel 2 Muestra los #otones - ,o $ Cancelar

    6#Aes,o J Muestra los #otones - $ ,o

    6#Retr$Cancel 3 Muestra los #otones Reintentar $ Cancelar

    6#Critical 1 Muestra el icono de mensaje crtico6#Wuestion 2 Muestra el icono de pre!unta de advertencia

    6#Exclamation J Muestra el icono de mensaje de advertencia

    6#?nformation J Muestra el icono de mensaje de informaci"n

    6#efault;utton1 D El primer #ot"n es el predeterminado

    6#efault;utton 3 El se!undo #ot"n es el predeterminado

    6#efault;utton2 31 El tercer #ot"n es el predeterminado

    6#efault;uttonJ L El cuarto #ot"n es el predeterminado

    6#(pplicationModal D

    6#-$stemModal JDN

    D 1 2 J 3 1 2 J J D 3 31 L D JDN...... (plicaci"n modalF el usuario de#eresponder al cuadro de mensajes antes de poder se!uir tra#ajando en la aplicaci"n actual.

    -istema modalF se suspenden todas las aplicaciones %asta que el usuario responda alcuadro de mensajes. cuadro de 3 31+ cuadro de se utiliza

    El primer !rupo de valores )D a 3+ descri#e el n9mero $ el tipo de los #otones mostrados enel di&lo!oF el se!undo !rupo )1 2 J J+ descri#e el estilo del icono el tercer !rupo )Ddetermina el #ot"n predeterminado $ el cuarto !rupo )D JDN+ determina la modalidad delmensajes. Cuando se suman n9meros para o#tener el valor final del ar!umento #uttonssolamente un n9mero de cada !rupo.

  • 7/24/2019 Manual de Macros en Excel

    31/88

    NotaEstas constantes las especifica 6isual ;asic for (pplications. *or tanto el nom#re delas mismas puede utilizarse en cualquier lu!ar del c"di!o en vez de sus valores reales.

    /os valores que puede devolver la funci"n ms!#ox en funci"n del #ot"n que pulse el usuariose muestran en la ta#la si!uiente.

    Tab'a de (a'ores

  • 7/24/2019 Manual de Macros en Excel

    32/88

    Ele

    H -e %a pulsado so#re #ot"n ,o

    .....

    End :

    . .

    End Sub

    6alor escripci"n

    1 (ceptar

    Cancelar2 (nular

    J Reintentar

    3 ?!norar

    -

    L ,o

    (l!unas veces puede que le interese simplemente desple!ar un cuadro Ms!;ox paramostrar un mensaje al usuario sin que se requiera reco!er nin!9n valor. En este caso puedeoptar por la forma si!uiente

    Ms!;ox *rompt:0B=ola usuaria =a aca#ado el procesoB ;uttons:06#'5'n/$

  • 7/24/2019 Manual de Macros en Excel

    33/88

    manera porque el pro!rama !ana en claridad $ ele!ancia $ consecuentemente elpro!ramador !ana tiempo a la %ora de %acer modificaciones o actualizaciones.

    /a sentencia 4it% le a$udar& a tener que escri#ir menos c"di!o sin que por esto el pro!ramapierda en claridad. Concretamente esta funci"n sirve para ejecutar una serie de acciones

    so#re un mismo '#jeto. -u sintaxis es la si!uiente.Wit!Objeto

    Instrucciones

    End Wit!

    Repetiremos el ejemplo 12 utilizando esta sentencia. '#serve como con 4it% se %acereferencia al o#jeto (ctive-%eet.

    Ejemplo 1N. Entrar el ,om#re la cantidad $ el precio de un producto desde el teclado $!uardarlos respectivamente en (1 ( $ (2. Calcular el total $ !uardarlo en (J. -i el total essuperior a 1D.DDD o el nom#re del producto el B*atatasB pedir un descuento calcularlo eltotal descuento $ !uardarlo en (3 lue!o restar el descuento del total $ !uardarlo en (.

    Sub E8em&lo_1()

    0im Producto A String

    0im $antidad A nteger

    0im Precio A Single

    0im otal A Single

    0im 0ecuento A Single

    0im otal_0ecuento A Single

    Precio = -

    Producto = n&ut%o3("Entrar Nombre del Producto","Entrar")

    Precio = Val(n&ut%o3("Entrar el &recio", "Entrar"))

    $antidad = Val(n&ut%o3("Entrar la cantidad", "Entrar"))

    otal = Precio C $antidad

    Wit! Acti#eS!eet .Range("A1").Value = Producto .Range("A*").Value = Precio.Range("A").Value = $antidad .Range("A").Value = otal

  • 7/24/2019 Manual de Macros en Excel

    34/88

    End Wit!

    H -i total ma$or que 1D.DDD o el producto es *atatas aplicar descuento.

    : otal @ 1---- 6r Producto = "Patata" !en

    0ecuento = Val(n&ut%o3("Entrar 0ecuento", "Entrar"))

    otal_0ecuento = otal C (0ecuento D 1--)

    otal = otal otal_0ecuento

    Wit! Acti#eS!eet .Range("A+").Value = otal_0ecuento .Range("AI").Value = otal

    End Wit!

    End :

    End Sub

    Estructuras Repetitivas.

    Este tipo de estructuras permiten ejecutar m&s de una vez un mismo #loque de sentencias.

    Ejemplo D. -upon!amos que tenemos que %acer un pro!rama para entrar las notas de unaclase de 3 alumnos que se !uardaran respectivamente en las celdas de (1 a (3 de la %ojaactiva. espus %acer la media que se !uardar& en (. Con las estructuras vistas %asta

    a%ora podramos %acer:Sub E8em&lo_*- ()

    0im Nota A nteger

    0im 2edia A Single

    2edia = -

    Nota = Val(n&ut%o3("Entrar la 1 Nota ","Entrar Nota"))

    Acti#eS!eet.Range("A1").Value = Nota

    2edia = 2edia ? Nota

    Nota = Val(n&ut%o3("Entrar la 1 Nota ","Entrar Nota"))

    Acti#eS!eet.Range("A*").Value = Nota

    http://www.emagister.com/cursos_gratis/visor_cursos/_tophttp://www.emagister.com/cursos_gratis/visor_cursos/_top
  • 7/24/2019 Manual de Macros en Excel

    35/88

    2edia = 2edia ? Nota

    Nota = Val(n&ut%o3("Entrar la 1 Nota ","Entrar Nota"))

    Acti#eS!eet.Range("A").Value = Nota

    2edia = 2edia ? Nota

    Nota = Val(n&ut%o3("Entrar la 1 Nota ","Entrar Nota"))

    Acti#eS!eet.Range("A").Value = Nota

    2edia = 2edia ? Nota

    Nota = Val(n&ut%o3("Entrar la 1 Nota ","Entrar Nota"))

    Acti#eS!eet.Range("A+").Value = Nota

    2edia = 2edia ? Nota

    2edia = 2edia D +

    Acti#eS!eet.Range("AI").Value = 2edia

    End Sub

    '#serve que este pro!rama repite el si!uiente #loque de sentencias 3 veces.

    ,ota 0 6al)?nput;ox)BEntrar la 1 ,ota : BBEntrar ,otaB++

    (ctive-%eet.Ran!e)B(3B+.6alue 0 ,ota

    Media 0 Media O ,ota

    *ara evitar esta tipo de repeticiones de c"di!o los len!uajes de pro!ramaci"n incorporaninstrucciones que permiten la repetici"n de #loques de c"di!o.

    Etructura re&etiti#a Para ('or).

    Esta estructura sirve para repetir la ejecuci"n de una sentencia o #loque de sentencias unn9mero definido de veces. /a estructura es la si!uiente:

    *ara var 06alor?nicial =asta 6alor8inal

    *aso ?ncremento =acer ?nicio -entencia 1 -entencia . . -entencia , 8in 6ar es unavaria#le que la primera vez que se entra en el #ucle se i!uala a 6alor?nicial las sentenciasdel #ucle se ejecutan %asta que 6ar lle!a al 6alor8inal cada vez que se ejecutan el #loque

  • 7/24/2019 Manual de Macros en Excel

    36/88

    de instrucciones 6ar se incrementa se!9n el valor de ?ncremento. En 6isual ;asic para Excella estructura *ara se implementa con la instrucci"n 8or ... ,ext.

    'or&arib'e 6 &a'or5Inicia' o&a'or5+ina' Ste&Incremento

    1entencia 7 1entencia 8 . . 1entencia NNe3t&ariab'e

    -i el incremento es 1 no %ace falta poner -tep 1.

    Ejemplo 1. Entrar 1D valores utilizando la funci"n ?nput;ox sumarlos $ !uardar el resultadoen la casilla (1 de la %oja activa.

    Sub E8em&lo_*1()

    0im i A nteger

    0im otal A nteger

    0im Valor A nteger

    'or i=1 o 1-

    Valor= Val(n&ut%o3("Entrar un #alor","Entrada"))

    otal = otal ? Valor

    Ne3t i

    Acti#e$ell.Range("A1").Value = otal

    End Sub

    Recorrer casi''as de una 4oja de c='cu'o.

    Una operaci"n #astante %a#itual cuando se tra#aja con Excel es el recorrido de ran!os decasillas para llenarlas con valores mirar su contenido etc. /as estructuras repetitivas son

    imprescindi#les para recorrer !rupos de celdas o ran!os. 6ea los si!uientes ejemplos paraver ejemplos de utilizaci"n de estructuras repetitivas para recorrer ran!os de casillaso#serve la utilizaci"n de las propiedades Cells $ 'ffset.

    Propiedad Ce''s. Aa conoce esta propiedad sirve para referenciar una celda o un ran!o deceldas se!9n coordenadas de fila $ columna.

    Ejemplo /lenar el ran!o de las casillas (1..(3 con valores pares consecutivos empezandopor el .

  • 7/24/2019 Manual de Macros en Excel

    37/88

    Sub E8em&lo_**()

    0im 'ila A nteger

    0im i A nteger

    'ila = 1

    'or i=* o 1- Ste& *

    Acti#eS!eet.$ell('ila,1).Value = i

    'ila = 'ila?1

    Ne3t i

    End Sub

    Ejemplo 2. /lenar un ran!o de filas empezando por una celda que se de#e especificardesde teclado con una serie de 1D valores correlativos )comenzando por el 1+.

    Sub E8em&lo_*()

    0im $ailla_nicial A String

    0im i A nteger

    0im 'ila A nteger, $olumna A nteger

    $ailla_nicial = n&ut%o3("ntroducir la cailla nicial ", "$ailla nicial")Acti#eS!eet.Range($ailla_nicial).Acti#ate

    P Co!er el valor de fila de la celda activa so#re la varia#le 8ila

    'ila = Acti#e$ell.RoQ

    P Co!er el valor de columna de la celda activa so#re la varia#le 8ila

    $olumna = Acti#e$ell.$olumn

    'or i = 1 o 1-

    Acti#eS!eet.$ell('ila, $olumna).Value = i

    'ila = 'ila ? 1

    Ne3t i

  • 7/24/2019 Manual de Macros en Excel

    38/88

    End Sub

    Propiedades RO> * CO,UN. Como %a#r& deducido del ejemplo anterior devuelven la fila$ la columna de un o#jeto ran!e. En el ejemplo anterior se utiliza#an concretamente parao#tener la fila $ la columna de la casilla activa.

    'tra forma de solucionar el ejemplo 2 seria.

    Sub E8em&lo_*()

    0im $ailla_nicial A String

    0im i A nteger

    0im 'ila A nteger, $olumna A nteger

    $ailla_nicial = n&ut%o3("ntroducir la cailla nicial ", "$ailla nicial")Acti#eS!eet.Range($ailla_nicial).Acti#ate 'ila = 1

    'or i = 1 o 1-

    Acti#eS!eet.Range($ailla_nicial).$ell('ila, 1).Value = i

    'ila = 'ila ? 1

    Ne3t i

    End Sub

    Recuerde que cuando utilizamos Cells como propiedad de un ran!o )'#jeto Ran!e+ Cellsempieza a contar a partir de la casilla referenciada por Ran!e.

    Ejemplo J. El mismo con el que introducamos el tema )ejemplo D+ pero utilizando el for $propiedad Cells Sub E8em&lo_*()

    0im Nota A nteger

    0im 2edia A Single

    0im 'ila A nteger

    2edia = -

    'or 'ila = 1 o +

    Nota=Val(n&ut%o3("Entrar la " < 'ila < " Nota ", "Entrar Nota"))

  • 7/24/2019 Manual de Macros en Excel

    39/88

    Acti#eS!eet.$ell('ila, 1) = Nota

    2edia = 2edia ? Nota

    Ne3t 'ila

    2edia = 2edia D +

    Acti#eS!eet.$ell(I, 1).Value = 2edia

    End Sub

    Propiedad O))set. Esta propiedad es tam#in mu$ 9til a la %ora de recorrer ran!o. 'ffsetque si!nifica desplazamiento es una propiedad del o#jeto Ran!e $ se utiliza para referenciaruna casilla situada a n 8ilas $ n Columnas de una casilla dada. 6ea los ejemplos si!uientes.

    Acti#eS!eet.Range ("A1").6::et(*, *).Value = "Hola"

    H Casilla C2 0 =ola filas $ columnas desde (1.

    Acti#e$ell.6::et(+,1).Value = "Hola"

    H 3 8ilas por de#ajo de la casilla (ctiva 0 =ola (ctiveCell.'ffset)+.(ctivate H(ctivar la casillaque est& filas $ columnas de la activa

    Ejemplo 3. El mismo con el que introducamos el tema )ejemplo D+ pero utilizando el 8or $propiedad 'ffset Sub E8em&lo_*+()

    0im Nota A nteger

    0im 2edia A Single

    0im 'ila A nteger

    2edia = -

    Acti#eS!eet.Range("A1").Acti#ate

    'or 'ila = - o

    Nota=Val(n&ut %o3("Entrar la " < 'ila?1 < " Nota ", "Entrar Nota"))

    Acti#e$ell.6::et('ila, -).Value = Nota

    2edia = 2edia ? Nota

    Ne3t 'ila

  • 7/24/2019 Manual de Macros en Excel

    40/88

    2edia = 2edia D +

    Acti#e$ell.6::et(I, 1).Value = 2edia

    End Sub

    Ejemplo . El mismo con el que introducamos el tema )ejemplo D+ pero utilizando el 8or $propiedad 'ffset. '#serve que a%ora vamos cam#iando de celda activa.

    Sub E8em&lo_*I()

    0im Nota A nteger

    0im 2edia A Single

    0im i A nteger

    2edia = -

    Acti#eS!eet.Range("A1").Acti#ate

    'or i = 1 o +

    Nota=Val(n&ut%o3("Entrar la " < i < " Nota ", "Entrar Nota"))

    Acti#e$ell.Value = Nota

    2edia = 2edia ? Nota

    P =acer activa la casilla situada una fila por de#ajo de la actual

    Acti#e$ell.6::et(1, -).Acti#ate

    Ne3t 'ila

    2edia = 2edia D +

    Acti#e$ell.Value = 2edia

    End Sub

    '#serve la diferencia entre los ejemplos 3 $ am#os utilizan la propiedad 'ffset dediferente forma en el ejemplo 3 la casilla activa siempre es la misma (1 'ffset se utilizapara referenciar una casilla a partir de esta. En ( se va cam#iando de casilla activa cadavez de forma que cuando termina la ejecuci"n del pro!rama la casilla activa es (. Cuandoutilizar cada mtodo como casi siempre depende de lo que se pretenda %acer. (qu es#astante claro si le interesa que no cam#ie la casilla utilice 'ffset como en el ejemplo 3 en

  • 7/24/2019 Manual de Macros en Excel

    41/88

    caso que interese que va$a cam#iando %a!a como en el Ejemplo . *or supuesto %a$muc%as variantes so#re el estilo de recorrer Celdas tanto con Cells como con 'ffset solotiene que ir pro#ando $ como casi siempre el que m&s le !uste.

    T

    Etructura re&etiti#a 0o W!ile... Goo& (Hacer 2ientra).

    /a estructura repetitiva for se adapta perfectamente a aquellas situaciones en que se sa#epreviamente el n9mero de veces que se %a de repetir un proceso entrar veinte valoresrecorrer cincuenta celdas etc. *ero %a$ ocasiones o casos en los que no se sa#epreviamente el n9mero de veces que se de#e repetir un proceso. *or ejemplo supon!a que%a de recorrer un ran!o de filas en los que no se sa#e cuantos valores %a#r& )esto escuantas filas llenas %a#r&+ en ocasiones puede que %a$an veinte en ocasiones treinta enocasiones nin!una etc. *ara estos casos la estructura for no es adecuada $ de#eremosrecurrir a la sentencia Do >4i'e...,oopen al!una de sus formas. Esta estructura repetitiva

    est& controlada por una o varias condiciones la repetici"n del #loque de sentenciasdepender& de si se va cumpliendo la condici"n o condiciones. =acer Mientras )se cumpla lacondici"n+ -entencia1 -entencia...-entencia , 8in =acer Mientras En 6isual ;asic

    0o W!ile (e cum&la la condici;n)

    Sentencia1

    Sentencia*

    . .

    Sentencia N

    Goo&

    /os ejemplos que veremos a continuaci"n so#re la instrucci"n o 4%ile../oop se %ar&nso#re una #ase de datos. Una #ase de datos en Excel es simplemente un ran!o de celdas enque cada fila representa un re!istro $ cada columna un campo de re!istro la primera fila esla que da nom#re a los campos. *ara nuestra #ase de datos utilizaremos los campossi!uientes ,om#re Ciudad Edad 8ec%a. *on!a estos ttulos en el ran!o (1:1 de la =oja1)En (1 pon!a ,om#re en ;1 pon!a Ciudad en C1 pon!a Edad $ en 1 8ec%a+ o#serveque los datos se empezar&n a entrar a partir de (.

    Ejemplo L. *ro!rama para entrar re!istros en la #ase pidiendo datos mientras se entre unvalor pre!untar el nom#re no se entre nin!9n 4%ile.../oop '#serve la utilizaci"n de .correspondientes.

    Sub E8em&lo_*J()

    0im Nombre A String

  • 7/24/2019 Manual de Macros en Excel

    42/88

    0im $iudad A String

    0im Edad A nteger

    0im :ec!a A 0ate

    P (ctivar %oja1

    WorS!eet("Ho8a1").Acti#ate

    P (ctivar casilla (

    Acti#eS!eet.Range("A*").Acti#ate

    Nombre = n&ut%o3("Entre el Nombre (Return &ara erminar) ", "Nombre")

    P Mientras la varia#le ,om#re sea diferente a cadena vaca0o W!ile Nombre F@ ""

    $iudad = n&ut%o3("Entre la $iudad ", "$iudad")

    Edad = Val(n&ut%o3("Entre la Edad ", "Edad"))

    'ec!a=$date(n&ut%o3("Entra la 'ec!a ", "'ec!a"))

    P Copiar los datos en las casillas correspondientes

    Wit! Acti#e$ell .Value = Nombre .6::et(-,1).Value = $iudad .6::et(-,*).Value = Edad.6::et(-,).Value = :ec!a

    End 5

    P=acer activa la celda de la fila si!uiente a la actual

    Acti#e$ell.6::et(1,-).Acti#ate Nombre = n&ut%o3("Entre el Nombre (Return &ara erminar) ", "Nombre")

    Goo&

    End Sub

    de datos. Cada campo se entra con ?nput;ox. El pro!rama va en el ?nput;ox correspondienteal nom#re es decir cuando al valor terminar& la ejecuci"n del #loque encerrado entre o lapropiedad 'ffset para colocar los datos en las celdas

  • 7/24/2019 Manual de Macros en Excel

    43/88

    %jemp'o 8. *reste especial atenci"n a este ejemplo $a que se!uro que el c"di!o que vienea continuaci"n lo utilizar& en muc%as ocasiones. (ntes que nada o#serve el ejemplo anteriorfjese en que siempre empezamos a llenar el ran!o de la %oja a partir de la celda ( estotiene una nefasta consecuencia la se!unda vez que ejecute la macro mac%acar& los datosde (: $ si continua ejecutando mac%acar& los datos de los ran!os si!uientes. Una

    soluci"n seria o#servar cual es la casilla vaca si!uiente $ cam#iar en la instrucci"n(ctive-%eet.Ran!e)B(B+.(ctivate la referencia ( por la que corresponde a la primeracasilla vaca de la columna (. El c"di!o que le mostramos a continuaci"n %ar& esto pornosotros es decir recorrer& una fila de celdas a partir de (1 %asta encontrar una vaca $dejar& a esta como celda activa para que la entrada de datos comience a partir de ella.

    *&!ina 23%ttp:>>777.c$#ercursos.net

    Sub E8em&lo_*/()

    P (ctivar %oja1

    WorS!eet("Ho8a1").Acti#ate

    P (ctivar casilla (

    Acti#eS!eet.Range("A1").Acti#ate

    P Mientras la celda activa no est vaca

    0o W!ile Not Em&t(Acti#e$ell)

    P =acer activa la celda situada una fila por de#ajo de la actual Acti#e$ell.6::et(1,-).Acti#ate

    Goo&

    End Sub

    %jemp'o 8@. Es la uni"n de los dos pro!ramas anteriores. Es decir %a#r& un #ucle o 4%ileque #uscar& la primera casilla vaca de la #ase da datos $ otro para pedir los valores de loscampos %asta que se pulse Enter en ,om#re.

    Sub E8em&lo_*/()

    0im Nombre A String

    0im $iudad A String

    0im Edad A nteger

    0im :ec!a A 0ate

  • 7/24/2019 Manual de Macros en Excel

    44/88

    WorS!eet("Ho8a1").Acti#ate

    Acti#eS!eet.Range("A1").Acti#ate

    P ;uscar la primera celda vaca de la columna ( $ convertirla en activa

    0o W!ile Not Em&t(Acti#e$ell)

    Acti#e$ell.6::et(1,-).Acti#ate

    Goo&

    Nombre = n&ut%o3("Entre el Nombre (Return &ara erminar) ", "Nombre")

    P Mientras la varia#le ,om#re sea diferente a cadena vaca

    0o W!ile Nombre F@ ""

    $iudad = n&ut%o3("Entre la $iudad ", "$iudad")

    Edad = Val(n&ut%o3("Entre la Edad ", "Edad"))

    'ec!a=$date(n&ut%o3("Entra la 'ec!a ", "'ec!a"))

    Wit! Acti#e$ell .Value = Nombre .6::et(-,1).Value = $iudad .6::et(-,*).Value = Edad.6::et(-,).#alue = :ec!a

    End 5

    Acti#e$ell.6::et(1,-).Acti#ate

    Nombre = n&ut%o3("Entre el Nombre (Return &ara erminar) ", "Nombre")

    Goo&

    End Sub

    Cuando se tienen que entrar desde el teclado conjuntos de valores al!unos pro!ramadores

    $ usuarios prefieren la f"rmula de que el pro!rama pre!unte si se desean entrar m&s datosla tpica pre!unta Xesea ?ntroducir m&s datos Y si el usuario contesta - el pro!ramavuelve a ejecutar las instrucciones correspondientes a la entrada de datos si contesta que nose finaliza el proceso o#serve como quedara nuestro #ucle de entrada de datos con estesistema.

    Masdatos 0 v#Aes

  • 7/24/2019 Manual de Macros en Excel

    45/88

    o 4%ile Masatos 0 v#Aes ,om#re 0 ?nput;ox)BEntre el ,om#re )Return para >777.c$#ercursos.net T Estructura o../oop 4%ile.

    El funcionamiento de esta estructura repetitiva es similar a la anterior salvo que la condici"nse eval9a al final la inmediata consecuencia de esto es que las instrucciones del cuerpo del#ucle se ejecutaran al menos una vez . '#serve que para nuestra estructura de entrada dedatos vista en el 9ltimo apartado de la secci"n anterior esta estructura es m&s convenienteal menos m&s ele!ante si vamos a entrar datos al menos uno entraremos por tanto lasinstrucciones del cuerpo del #ucle se de#en ejecutar al menos una vez lue!o $a decidiremossi se repiten o no.

    o,om#re 0 ?nput;ox)BEntre el ,om#re )Return para

  • 7/24/2019 Manual de Macros en Excel

    46/88

    (ctiveCell.'ffset)1D+.(ctivate Masdatos 0 Ms!;ox)B'tro re!istro YBv#Aes,oOv#WuestionBEntrada de datosB+ PMientras Masatos 0 v#Aes /oop 4%ileMasatos 0 v#Aes '#serve que en este caso no es necesario la lnea Masatos 0 v#Aesantes de o para forzar la entrada en el #ucle $a que la condici"n va al final.

    TEstructura o../oop Until )=acer.. =asta que se cumpla la condici"n+.

    Es otra estructura que eval9a la condici"n al final o#serve que la interpretaci"n es distinta $aque el #ucle se va repitiendo =(-

  • 7/24/2019 Manual de Macros en Excel

    47/88

    varia#les pueden lue!o utilizar todas las propiedades $ mtodos propios de los '#jetosRan!e. >777.c$#ercursos.net

    *rocedimientos $ funciones.

    -e define como procedimiento i>o funci"n a un #loque de c"di!o que realiza al!una tarea.=asta a%ora %emos construido los pro!ramas utilizando un 9nico procedimiento pero amedida que los pro!ramas )$ los pro#lemas+ crecen se va %aciendo necesaria la inclusi"n dem&s procedimientos. *odra f&cilmente caer en la tentaci"n de utilizar como %asta a%ora un9nico procedimiento por pro!rama pero se dar& cuenta r&pidamente de que este mtodo no

    es nada pr&ctico $a que !randes #loques de c"di!o implican ma$or complicaci"n del mismorepetici"n de sentencias $ lo que es m&s !rave ma$ores pro#lemas de se!uimiento a la %orade depurar errores ampliar funcionalidades o incluir modificaciones. /a filosofa de utilizarprocedimientos es la anti!ua f"rmula del Bdivide $ vencer&sB es decir con los procedimientospodremos tratar cada pro#lema o tarea de forma m&s o menos aislada de forma queconstruiremos el pro!rama paso a paso evitando tener que resolver o controlar m9ltiplescosas a la vez. Cada tarea la realizar& un procedimiento si esta tarea implica la ejecuci"n deotras tareas cada una se implementar& $ solucionar& en su correspondiente procedimientode manera que cada uno %a!a una cosa concreta. (s los diferentes pasos que se de#enejecutar para que un pro!rama %a!a al!o quedaran #ien definidos cada uno en sucorrespondiente procedimiento si el pro!rama falla fallar& a partir de un procedimiento $ deesta forma podremos localizar el error m&s r&pidamente. /os procedimientos son tam#in uneficaz mecanismo para evitar la repetici"n de c"di!o en un mismo pro!rama e incluso endiferentes pro!ramas. -uponemos que %a#r& intuido que %a$ muc%as tareas que se repitenen casi todos los pro!ramas veremos como los procedimientos que ejecutan estas tareas sepueden incluir en un m"dulo de forma que este sea exporta#le a otros pro!ramas $ de estamanera !anar tiempo que como dice el t"pico es precioso.

    T

    efinir un procedimiento.

    Aa lo %emos %ec %o unas cuantas veces pero a% va de nuevo. -u# ,om#re*rocedimento-entencias. End -u#.

    T

    /lamar a un procedimiento.

    *ara llamar un procedimiento desde otro se utiliza la instrucci"n Call ,om#re*rocedimiento.-u# *Uno -entencias. . Call *os . -entencias . End -u#

  • 7/24/2019 Manual de Macros en Excel

    48/88

    /as secuencias del procedimiento *Uno se ejecutan %asta lle!ar a la lnea Call *osentonces se salta al procedimiento *os se ejecutan todas las sentencias de esteprocedimiento $ el pro!rama continua ejecut&ndose en el procedimiento *Uno a partir de lasentencia que si!ue a Call *os.

    *&!ina JD%ttp:>>777.c$#ercursos.net

    Ejemplo 2. Es el mismo pro!rama que el visto en el ejemplo N pero el c"di!o que saltacasilla %asta que se encuentra una vaca se implementa en un procedimiento llamado-altarCeldas/lenas. '#serve que para entrar valores se %a sustituido o 4%ile../oop poro.. /oop 4%ile. -u# Ejemplo2)+ im ,om#re (s -trin! im Ciudad (s -trin! im Edad

    (s ?nte!er im fec%a (s ate

    H /lamada a la funci"n -altarCeldas/lenas el pro!rama salta aqu a ejecutar las

    Hinstrucciones de este procedimiento $ lue!o vuelve para continuar la ejecuci"n a partir de laHinstrucci"n o Call -altarCeldas/lenas o ,om#re 0 ?nput;ox)BEntre el ,om#re )Returnpara >777.c$#ercursos.net T eneralizar una funci"n.

    '#serve que para saltar un ran!o de casillas llenas s"lo necesitar& llamar a la funci"n-altarCeldas/lenas pero siempre $ cuando este ran!o est en una %oja llamada B=oja1B$ empiece en la casilla (1 el procedimiento es poco pr&ctico $a que su &m#ito defuncionamiento es limitado. En la si!uiente secci"n modificaremos el procedimiento demanera que sirva para recorrer un ran!o que empiece en cualquier casilla de cualquier %oja.*ar&metros. /os par&metros son el mecanismo por el cual un procedimiento puede pasarlevalores a otro $ de esta forma condicionar moldear etc. las acciones que ejecuta. Elprocedimiento llamado !ana entonces en flexi#ilidad. /a sintaxis de llamada de unprocedimiento es la si!uiente Call *rocedimiento)*ar&metro1 *ar&metro... *ar&metro,+/os par&metros pueden ser valores o varia#les. /a sintaxis para el procedimiento llamado esla si!uiente -u# *rocedimiento)*ar&metro1 as

  • 7/24/2019 Manual de Macros en Excel

    49/88

    evidentemente de#e %a#er coincidencia de tipo. *or ejemplo si el primer par&metro es unavaria#le tipo ?nte!er el primer valor que se le de#e pasar al procedimiento cuando se llamatam#in %a de ser de tipo ?nte!er )ecuerde que puede r ser un valor directamente o unavaria#le+. Ejemplo 22. El mismo pro!rama que en el ejemplo 2 pero a%ora la funci"n-altarCeldas/lenas tiene dos par&metros =oja $ Casilla?nicial que reci#en

    respectivamente la %oja donde est& el ran!o a recorrer $ la casilla inicial del ran!o. -u#Ejemplo22)+ im ,om#re (s -trin! im Ciudad (s -trin! im Edad (s ?nte!er im fec%a (sate H /lamada a la funci"n -altarCeldas/lenas o#servar que mediante dos par&metros seH (l procedimiento en que %oja est& el ran!o a saltar $ en la casilla donde de#e empezar. Call-altarCeldas/lenas)B=oja1B B(1B+ o ,om#re 0 ?nput;ox)BEntre el ,om#re )Return para>777.c$#ercursos.net

    Masdatos 0 Ms!;ox)B'tro re!istro YB v#Aes,oOv#WuestionBEntrada de datosB+ /oop 4%ileMasatos 0 v#Aes

    End -u# H H *rocedimiento -altarCeldas/lenas. H -irve para S -altar celdas llenas de unacolumna %asta encontrar una vaca que se convierte en activa H *ar&metros : H =oja : =ojadonde est& el ran!o a saltar. H Casilla?nicial : Casilla ?nicial de la columna -u#-altarCeldas/lenas)=oja (s -trin! Casilla?nicial (s -trin!+ 4or5-%eets)=oja+.(ctivate

    (ctive-%eet.Ran!e)Casilla?nicial+.(ctivate o 4%ile not ?sEmpt$)(ctiveCell+(ctiveCell.'ffset)1D+.(ctivate /oop

    End -u#

    '#serve que a%ora el procedimiento -altarCeldas/lenas sirve para recorrer cualquierran!o en cualquier %oja. '#serve que al procedimiento se le pasan dos valores directamenterecuerde $ esto es quiz&s lo m&s %a#itual que tam#in pueden pasarse varia#les porejemplo.

    -u# Ejemplo22 . . im =oja (s -trin! im Casilla?nicial (s -trin! =oja 0 ?nput;ox)BEn que%oja est& la #ase de datos : B BEntrar ,om#re de =ojaB+ Casilla?nicial 0 ?nput;ox)BEn quecasilla comienza la #ase de datosBBCasilla ?nicialB+ H '#serve que los par&metros son dosvaria#les cu$o valor se %a entrado desde teclado en H las dos instrucciones ?nput;oxanteriores. Call -altarCeldas/lenas)=oja Casilla?nicial+ . . End -u#

    *&!ina J2

    %ttp:>>777.c$#ercursos.net

    6aria#les locales $ varia#les lo#ales. El &m#ito de una varia#le declarada dentro de unafunci"n es la propia funci"n es decir no podr& utilizares fuera de dic%a funci"n. (s el

  • 7/24/2019 Manual de Macros en Excel

    50/88

    si!uiente pro!rama que de#era sumar las cinco filas si!uientes a partir de la casilla activa $!uardar el resultado en la sexta es incorrecto. -u# (l!unaCosa)+ . . . Call-umarCinco-i!uientes (ctiveCell.'ffset)D+.6alue 0 -uma . . End -u# -u#-umarCinco-i!uientes)+ im i (s ?nte!er im -uma (s -in!le -uma0D 8or i01

  • 7/24/2019 Manual de Macros en Excel

    51/88

    )indesea#les+ efectos laterales. Copie $ ejecute este pro!rama $ descu#rir& que son losefectos laterales.

    *&!ina J3

    %ttp:>>777.c$#ercursos.netEjemplo Efecto/ateral. (ntes de copiar el pro!rama active una %oja en #lanco $ pon!avalores del 1 al 13 distri#uidos de la forma si!uiente en el ran!o (1:(3 valores del 1 al 3 enel ran!o ;1:;3 valores del al 1D en el ran!o C1:C3 valores del 11 al 13. El si!uientepro!rama de#e recorrer cada una de tres las columnas de valores sumarlos $ poner elresultado en las filas de cada columna. Entonces se!9n los valores que %a entrado encada una de las columnas cuando %a$a aca#ado la ejecuci"n del pro!rama de#e %a#er lossi!uientes resultados ( 0 13 ;0JD C03. *ara llevar a ca#o la suma de los valores decada columna se llama a la funci"n Recorrer-umar tres veces una para cada columnaesta funci"n reci#e en el par&metro 8 el valor de la fila donde de#e empezar a sumar so#re

    el par&metro C el valor de la columna a sumar $ so#re el par&metro W la cantidad de filas que%a de recorrer. El pro!rama utiliza la propiedad Cells para referenciar las filas $ columnas delos ran!os. '#serve atentamente los valores que ir& co!iendo la varia#le 8ila $a que estaser& la que sufra el efecto lateral. -u# Efecto/ateral)+ im 8ila (s ?nte!er 8ila 0 1 CallRecorrer-umar)8ila 13+ Call Recorrer-umar)8ila 3+ Call Recorrer-umar)8ila 23+ End-u# H Columna ( H Columna ; H Columna C

    -u# Recorrer-umar)8 (s ?nte!er C (s ?nte!er W (s ?nte!er+ im i (s ?nte!er im

  • 7/24/2019 Manual de Macros en Excel

    52/88

    ?nsistimos de nuevo en que ten!a cuidado con estas cosas. (l menos a%ora $a est& so#reaviso cuando un pro!rama no %a!a lo que %a previsto una de las cosas que de#er& repasares el paso de par&metros a los procedimientos. *ara aca#ar o#serve que en muc%asocasiones le %emos indicado que en el paso por referencia la varia#le del procedimientollamado es la varia#le declarada en el procedimiento que llama. En este 9ltimo ejemplo le

    %emos dic%o que 8 era la varia#le 8ila pues #ien esto no es cierto 8ila es una varia#le $ 8es otra varia#le a%ora es l"!ico que se pre!unte por qu entonces 8 act9a como si fuera8ila este es un tema que no entra en el &m#ito de este manual si al!una vez pro!rama en C$ lle!a al tema de los punteros entender& que es lo que sucede realmente en el paso porpar&metro $ en el paso por valor. -i $a conoce los punteros de C o *ascal entonces $a %a#r&intuido que el paso por valor en nuestro ejemplo equivaldra a Recorrer8ila)8 C W+F voidRecorrer8ila)int 8 int C int W+ A un paso por referencia a Recorrer8ila)I8 C W+F

    6oid Recorrer8ila)int 8 int C int W+

    *&!ina JL

    %ttp:>>777.c$#ercursos.net T 8unciones.

    Una funci"n es lo mismo que un procedimiento con la salvedad que este devuelve un valor alprocedimiento o funci"n que lo llama. 6ea el si!uiente ejemplo es una funci"n mu$ sencilla$a que simplemente suma dos n9meros $ devuelve el resultado. Ejemplo 2J. 8unci"n quedevuelve la suma de dos valores que se le pasan como par&metros. '#serve las diferentesformas en como se llama la funci"n. -u# Ejemplo2J)+ im x (s ?nte!er im n1 (s ?nte!ern (s ?nte!er G 0 -uma)3 3+ n10 6al ) ?nput;ox)BEntrar un n9mero : B BEntradaB++ n0 6al) ?nput;ox)BEntrar otro n9mero : B BEntradaB++ G0 suma)n1n+ (ctiveCell.6alue 0-uma)(ctive-%eet.Ran!e)B(1B+.6alue (ctive-%eet.Ran!e)B(B+.6alue+ G 0 -uma)3 J+ O-uma )n1 n+

    End -u#

    8unction -uma)61 (s ?nte!er 6 (s ?nte!er+ (s ?nte!er im

  • 7/24/2019 Manual de Macros en Excel

    53/88

    ,om#re8unci"n 0 .... En el ejemplo de 8unction -uma -uma 0

  • 7/24/2019 Manual de Macros en Excel

    54/88

  • 7/24/2019 Manual de Macros en Excel

    55/88

    %ttp:>>777.c$#ercursos.net

    6amos a ver a continuaci"n tres ejemplos m&s so#re funciones. Es importante que los creeen un li#ro de tra#ajo nuevo $ los pon!a en un mismo m"dulo al final del captuloutilizaremos las opciones de exportar e importar m"dulos de procedimientos $ funciones. En

    todos los ejemplos ver& el procedimiento *rocedimiento/lamador es para mostrar de queforma se de#e llamar al procedimiento o funci"n. /os procedimientos implementados son porllamarlo de al!una manera de tipo !eneral es decir son procedimientos que podr& utilizaren muc%as aplicaciones.

    Ejemplo 2L. *rocedimiento que a#re un cuador Ms!;ox $ muestra el texto que se le pasocomo par&metro. -u# *rocedimiento/lamador)+ . . Call m(viso)BEsto es el mensaje deavisoB BEsto es el

  • 7/24/2019 Manual de Macros en Excel

    56/88

    -u# *rocedimiento/lamador)+ im Cantidad (s ?nte!er im 8ec%a (s ate im atos (s-trin! . . atos 0 ?nput;ox)BEntrar una Cantidad : B BEntrarB+ ?f ,otCompro#ar Exportar arc%ivo. (parece uncuadro de di&lo!o. En cuadro de edici"n ,om#re de (rc%ivo teclee el nom#re para el arc%ivodonde se !uardar& el m"dulo por ejemplo Beneral.;asB o#serve que .;(- es la extensi"nde estos arc%ivos. *ulse so#re el #ot"n uardar.

    *&!ina 33

    %ttp:>>777.c$#ercursos.net

  • 7/24/2019 Manual de Macros en Excel

    57/88

    ?mportar un m"dulo. -i est& si!uiendo el ejemplo cierre todos los arc%ivos de Excel $ a#rauno nuevo. 1. . 2. J. (ctive el editor 6isual ;asic. (ctive opci"n de la #arra de men9s

    (rc%ivo> ?mportar (rc%ivo. (parece un cuadro de di&lo!o. -eleccione en la lista ;uscar en: lacarpeta donde tiene u#icado el arc%ivo a importar )la carpeta donde est& eneral.;as si est&si!uiendo el ejemplo+. Una vez localizada la carpeta seleccione el arc%ivo a importar

    )eneral.;as en el ejemplo+ $ pulse so#re (#rir.'#serve como en la ventana de pro$ecto se %a incorporado un nuevo m"dulo que contienetodos los procedimientos $ funciones del arc%ivo importado.

  • 7/24/2019 Manual de Macros en Excel

    58/88

  • 7/24/2019 Manual de Macros en Excel

    59/88

    A Aa est&. (%ora a#ra el Editor de 6isual ;asic $ comprue#e como la !ra#adora %a %ec%otodo el tra#ajo pro usted. (%ora $a s"lo nos queda modificar la macro de forma que esteformato de #ordes sea aplica#le a cualquier ran!o. 6ea el ejemplo si!uiente.

    *&!ina 3N

    %ttp:>>777.c$#ercursos.net

    Ejemplo. En es te ejemplo modificaremos la macro de manera que sirva para dar eseformato a cualquier ran!o de la %oja. '#serve en este ejemplo simplemente pasamos comopar&metro el ran!o a formatear de manera que la ca#ecera del procedimiento quedaria. H*rocedimiento *oner;ordes. H *rocedimiento que pone #ordes a un ran!o. Concretamentelo encierra en un cuadrado le pone lneas H verticales $ pone una do#le lnea inferior en laprimera fila. H *ar&metros: H ,om#re=oja: ,om#re de la %oja donde est& el ran!o. HRan!o

  • 7/24/2019 Manual de Macros en Excel

    60/88

    4or5s%eets),umero=oja+.(ctivate (ctive-%eet.Ran!e)Casilla+.(ctivate H -eleccionar elran!o de celdas con valores ad$acentes a la activa (ctiveCell.CurrentRe!ion.-elect H ;orrarlos #ordes actuales de la selecci"n actuales 4it% -election.;orders)xlia!onalo7n+./ine-t$le 0 xl,one .;orders)xlia!onalUp+./ine-t$le 0 xl,one.;orders)xlEd!e/eft+./ine-t$le 0 xl,one .;orders)xlEd!e>777.c$#ercursos.net

    4it% -election.;orders)xlEd!e

  • 7/24/2019 Manual de Macros en Excel

    61/88

    funcionalidades como ajustar el anc%o de las celdas #orrar los formatos previos etc. A estamacro todavia podra refinarse m&s poner color de fondo a la primera fila poner color a losdatos numricos etc. /o que intentamos decirle es que aprovec%e al m&ximo la utilidad de la!ra#adora de macros ten!a pero en cuenta que casi siempre tendr& que a@adir c"di!o ustedmismo si quiera ampliar la funcionalidad de la macro so#re todo si quiere aplicarle cierta

    !eneralidad.*&!ina 2

    %ttp:>>777.c$#ercursos.net

    6ea el si!uiente ejemplo sirve para representar !r&ficamente un ran!o de valores. /a macrose %a %ec%o de forma similar a la anterior es decir una vez activada la !ra#adora de macrosse %an se!uido todos los pasos necesarios para dise@ar el !r&fico lue!o se %an cam#iadolas referencias a %ojas $ ran!os por varia#les que se colocan como par&metros delprocedimiento para as dotarle de !eneralidad. H *rocedimiento rafico. H *rocedimiento que

    representa !r&ficamente los valores de un ran!o. H *ar&metros: H =ojaatos : =oja dondeest& el ran!o de valores. H Ran!oatos : Ran!o de valores a representar !r&ficamente. H

  • 7/24/2019 Manual de Macros en Excel

    62/88

    T

    ?nsertar funciones de Microsoft Excel desde 6isual ;asic.

    Copie el si!uiente procedimiento $ ejec9telo. Es un procedimiento que sencillamente va

    pidiendo n9meros $ los va colocando en las celdas de la columna ( partir de (1 al finalcoloca la funci"n 0-UM( para sumar los valores introducidos $ la funci"n 0*R'ME?' para%acer el promedio de los mismos valores.

    -u# -umar)+ im 6alor (s ?nte!er im Casilla?nicial (s -trin! im Casilla8inal (s -trin! H=acer activa la casilla (1 de la %oja activa (ctive-%eet.Ran!e)B(1B+.(ctivate o H Entrar unvalor $ convertirlo a numrico 6alor 0 6al)?nput;ox)BEntrar un valorB BEntradaB++ H -i el valores distinto de D ?f 6alor ZQ D

  • 7/24/2019 Manual de Macros en Excel

    63/88

    %ttp:>>777.c$#ercursos.net

    ( continuaci"n le explicaremos como puede averi!uar el nom#re de cualquier funci"n enin!ls. Utilizaremos la !ra#adora de macros. Como ejemplo o#tendremos el nom#re de lasfunci"n 0*R'ME?'. e#er& se!uir los mismos pasos para o#tener el nom#re de cualquier

    funci"n. 1. . (ctive la !ra#adora de macros. 6a$a a una casilla cualquiera C1 por ejemplo $teclee la funci"n tal como lo %ara en su idioma. *or ejemplo pon!a 0*R'ME?')(1:(1D+ oelnom#re de cualquier otra funci"n Excel. eten!a la ejecuci"n de la macro. Edite la macro $o#serve el nom#re que se %a puesto $a s"lo de#e apunt&rselo $ pasarlo a su procedimiento.Es posi#le que la funci"n que vea ten!a una nomenclatura que le suene rara $ es que la!ra#adora de macros utiliza referencias tipo RC )ro7 column+

    2. J.

    *&!ina L

    %ttp:>>777.c$#ercursos.netetecci"n de Errores $ epuraci"n de pro!ramas.

    ( medida que los pro!ramas van creciendo la pro#a#ilidad de cometer errores tam#in vacreciendo. /os errores se clasifican normalmente en tres cate!oras. Errores en tiempo decompilaci"n. -on los tpicos errores que impiden %acer funcionar el pro!rama de#ido porejemplo a errores de sintaxis en las instrucciones llamadas a funciones que no existen ollamadas con el tipo o el n9mero de par&metros incorrectos etc. Este tipo de errores no dandemasiados pro#lemas primero porque el compilador avisa de donde se %an producido $lue!o porque simplemente revisando la sintaxis se solucionan r&pidamente. Errores en

    tiempo de ejecuci"n. Estos errores se producen por una mala pro!ramaci"n del c"di!o al no%a#er previsto determinados casos concretos o especiales como por ejemplo intentar a#rirun arc%ivo que no existe imprimir sin compro#ar que la impresora est& conectada definir malla dimensi"n de un arra$ e intentar acceder a miem#ros que no existen etc. Cuando seproduce este tipo de errores se detiene la ejecuci"n del pro!rama $ normalmente se informadel tipo de error que se %a producido. Muc%os de estos errores se pueden solucionarmediante rutinas o funciones de tratamiento de errores estudiaremos este tipo de rutinas unpoco m&s adelante. Errores de funci"n. -on los m&s complicados de detectar $a que ni sedetectan en la fase de ejecuci"n ni provocan la detenci"n del pro!rama son de#idos a laincorrecta pro!ramaci"n de al!9n proceso $ como resultado se o#tienen datos err"neos.Errores de este tipo son c&lculos mal %ec%os #ucles infinitos devoluci"n de valoresincorrectos etc. Como ni los detecta el compilador ni provocan la interrupci"n del pro!ramade#en revisarse a mano $ claro si el pro!rama es extenso $ trata muc%os datos sudetecci"n puede resultar dificultosa. 6isual ;asic $ todos los entornos de pro!ramaci"nincorporan %erramientas para facilitar la detecci"n de este tipo de errores son las%erramientas de depuraci"n. (ntes de comenzar a descri#ir como funcionan estas%erramientas le recomendamos una vez m&s que modularice su pro!rama utilizandoprocedimientos cortos que realicen tra#ajos concretos $ precisos de esta forma conse!uir&adem&s de que el pro!rama quede m&s ele!ante $ en un futuro sea m&s sencillo modificarloevitar el tener que revisar !randes #loques de c"di!o para detectar errores de este tipo.

  • 7/24/2019 Manual de Macros en Excel

    64/88

    T

    =erramientas de depuraci"n.

    Como se aca#a de indicar estas %erramientas son mu$ 9tiles a la %ora de testear paso a

    paso el funcionamiento del pro!rama $ detectar los procesos que provocan un malfuncionamiento del mismo. Copie los datos si!uientes en la primera %oja de un li#ro detra#ajo estos datos ser&n utilizados por las funciones que utilizaremos para explicar elfuncionamiento de las %erramientas de depuraci"n.

    ( 1 2 J 3 L N 1D 11 1 Enero 1 2 J 3 L N 1D

    ; 2JD L3J 2J 3J 2D3 LDN J ND 2L 2NL

    C 8e#rero 222 DL 2LDJ JL3 2322 J3DN JN2 J32D 232 JD3

    Marzo 2123 2NJ3 21JD J2LD JJDN 2132 21L1 222 2LJ J1N (#rilE Ma$o JD JLD 22 21N2 2L JNJ 22J JLLD JDD 212

    8 [unio J2J3 223 JD L1D 2J3 JD1 23N 1 2N JD1

    JN1 2NJ D3 LD JN1L 2J3J 23 J1J1 JN 23N2

    *&!ina

    %ttp:>>777.c$#ercursos.net

    Copie el c"di!o si!uiente es el que utilizaremos para estudiar $ ver ejemplos so#re las%erramientas de depuraci"n. /a primera )-u# *rue#a+ recorre los datos de las columnas%asta encontrar una vaca esta funci"n va llamando a RecorrerColumna sirve para recorrerlas filas de una columna %asta encontrar una vaca va sumando los valores que encuentraen las filas $ va contando cuantas %a$ de llenas al final llama a la funci"n C&lculos estafunci"n coloca en respectivas casilla la suma de los valores de la columna la cantidad deceldas llenas que %a encontrado $ la media. Una vez %a$a copiado las funciones ejec9telaspara compro#ar su correcto funcionamiento antes de proceder al estudio de las %erramientasde depuraci"n. -u# *rue#a)+ 4or5s%eets)1+.Ran!e)B;B+.(ctivate H Recorrer las casillas deuna fila %asta que se encuentre una vaca o 4%ile ,ot ?sEmpt$)(ctiveCell+ Call

    RecorrerColumna (ctiveCell.'ffset)D 1+.(ctivate /oop End -u# *rivate -u#RecorrerColumna)+ im -umaColumna (s /on! H-uma de los valores de la columna imMa$orWueCero (s ?nte!er H Contar casillas con valores ma$ores que cero im esp8ila

    (s ?nte!er H ?ncremento de 8ila -umaColumna 0 D Ma$orWueCero 0 D esp8ila 0 D HRecorrer las filas de una columna %asta que se encuentre una vaca o 4%ile ,ot?sEmpt$)(ctiveCell.'ffset)esp8ila D++ ?f (ctiveCell.'ffset)esp8ila D+.6alue Q D

  • 7/24/2019 Manual de Macros en Excel

    65/88

    *rivate -u# Calcular)-uma (s /on! W (s ?nte!er 8 (s ?nte!er+ (ctiveCell.'ffset)8 O D+.6alue 0 -uma (ctiveCell.'ffset)8 O 2 D+.6alue 0 W (ctiveCell.'ffset)8 O J D+.6alue 0-uma > W End -u#

    *&!ina N

    %ttp:>>777.c$#ercursos.net

    (ctive la #arra de depuraci"n para ver los #otones que se utilizar&n en las secciones que seexplican a continuaci"n )6er> ;arras de =erramientas> epuraci"n+.

    Modo Ejecuci"n paso a paso por instrucciones. El modo paso a paso permite la ejecuci"n delpro!rama instrucci"n por instrucci"n de esta forma es posi#le ver que el funcionamiento delpro!rama es el correcto es decir que la ejecuci"n de instrucciones si!ue los pasos que se%a#an previsto. *ara ejecutar un procedimiento paso a paso s"lo de#e ir pulsando so#re el#ot"n activar la opci"n de men9 epuraci"n >*aso a *aso por ?nstrucciones o ir pulsando la

    tecla 8 que se!uramente es lo m&s c"modo. Ejemplo. 1. . -it9e el cursor dentro delprocedimiento *rue#a. 6a$a pulsando la tecla 8 $ ver& como se ejecuta ejecuta una solainstrucci"n por cada pulsaci"n. *uede ir alternando con la %oja de c&lculo para ver que es loque ocurre cada vez que se ejecuta una instrucci"n.

    Cuando est ejecutando paso a paso puede utilizar los #otones si!uientes para llevar a ca#odeterminadas acciones.

    -irve para detener la ejecuci"n del pro!rama. -irve para ejecutar el resto del pro!rama. -irvepara ejecutar todo un procedimiento. Cuando en la ejecuci"n de un procedimiento se lle!a auna lnea que llama a otro procedimiento o funci"n pulsando este #ot"n se puede provocar

    la ejecuci"n de todo el c"di!o de esta funci"n para lue!o continuar con el modo paso a paso.Ejemplo. 1. . -it9e el cursor dentro del procedimiento *rue#a. 6a$a ejecutando paso a paso%asta la lnea Call RecorrerColumna 2. En este punto pulse el #ot"n o#serve como seejecuta toda el procedimiento RecorrerColumna para lue!o continuar con la ejecuci"nnormal de *aso a *aso. *ara activar esta opci"n tam#in puede activar la opci"nepuraci"n> *aso a paso por procedimientos o #ien pulsar la com#inaci"n M(AO8. -irvepara ejecutar todas las instrucciones del procedimiento activo $ volver )o terminar+. Ejemplo.1. . -it9e el cursor dentro del procedimiento *rue#a. 6a$a ejecutado paso a paso %asta lainstrucci"n Ma$orWueCero 0 Ma$orWueCero O 1 Aa dentro del procedimientoRecorrerColumna.

    *&!ina LD

    %ttp:>>777.c$#ercursos.net

    2.

    *ulse so#re el #ot"n ver& como se termina la ejecuci"n de este procedimiento $ se vuelve alprocedimiento *rue#a para continuar con la ejecuci"n paso a paso. *ara activar esta opci"ntam#in puede la opci"n epuraci"n> *aso a paso para salir o #ien pulsar la com#inaci"nC',

  • 7/24/2019 Manual de Macros en Excel

    66/88

    El modo ?nterrupci"n. En pro!ramas lar!os resulta fastidioso tener que ejecutarlos paso apaso so#retodo si sa#emos que el error se produce en una parte avanzada del pro!rama. Elmodo interrupci"n permite la ejecuci"n del pro!rama %asta una instrucci"n determinadapara a partir de esta ejecutar paso a paso $ as poder detectar el error. efinir puntos deinterrupci"n. 1. . -it9e el cursor so#re la instrucci"n en la cual de#e detenerse el pro!rama

    para continuar paso a paso. *ulse so#re el #ot"n . (lternar punto de interrupci"n pulsar la tecla 8N o #ien %acer un clic en la parteizquierda de la ventana del m"dulo )la franja vertical en color !ris+.

    *ara desactivar un punto de interrupci"n si!a los mismos pasos.

    -olucionar los errores. 6entana de ?nspecci"n o pulse so#re el #ot"n .

    (@adir una varia#le a la ventana de inspecci"n. (unque no es necesario estar ejecutando elpro!rama en modo paso a pas o es conveniente. 1. . -eleccione la varia#le que deseea@adir a la ventana %aciendo un clic so#re ella. *ulse so#re el #ot"n tam#in puede activarepuraci"n> ?nspecci"n r&pida o pulsar la com#inaci"n MaAO8N. (parece un cuadro dedi&lo!o donde se muestra el valor actual de la varia#le. -i no est& ejecutando el pro!ramapaso a paso aparecer& el valor 8uera de Contexto. *ulse so#re el #ot"n (!re!ar para a@adirla varia#le a la ventana de inspecci"n.

    2.

    e#e tener en cuenta que para revisar las varia#les las expresiones que les asi!nan valoresde#en de ejecutarse al menos una vez.

    *&!ina L1

    %ttp:>>777.c$#ercursos.net

    Ejemplo. 1. -it9e un punto de interrupci"n en la lnea. Ma$orWueCero 0 Ma$orWueCeroO 1 . 2. J. Ejecute el pro!rama cuando este se deten!a en el punto de interrupci"n sit9e elcursor so#re la varia#le -umaColumna )puede ponerlo en cualquier parte+. *ulse so#re el#ot"n . *ulse so#re el #ot"n (!re!ar para que la varia#le se inserte en la ventana?nspecciones. Repita los pasos anteriores para las varia#les Ma$orWueCero $ esp8ila 3.6a$a ejecutando el pro!rama paso a paso $ o#serve como va cam#iando el valor de lasvaria#les en la ventana de inspecci"n.

    Recuerde que puede a!re!ar una varia#le a la ventana de inspecci"n aunque no estejecutando el pro!rama.

  • 7/24/2019 Manual de Macros en Excel

    67/88

  • 7/24/2019 Manual de Macros en Excel

    68/88

    Ejecute el pro!rama. '#serve que el pro!rama se interrumpe cuando -umaColumna co!eun valor superior a 2DDDD a partir de este podramos continuar con la ejecuci"n paso a paso$ ver como evoluciona el valor de la varia#le o varia#les.

    *&!ina L2

    %ttp:>>777.c$#ercursos.net

    /a 6entana ?nmediato. Es otra forma de inspeccionar varia#les cuando el pro!rama est& enmodo interrupci"n )ejecut&ndose paso a paso+ pero adem&s ofrece la posi#ilidad decam#iar valores de las varia#les e incluso ejecutar o evaluar expresiones. *ara ver el valorde una varia#le en la ventana inmediato de#e anteponerle un Y $ lue!o pulsar Enter. *araactivar la ventana ?nmediato active opci"n 6er>?nmediato o pulse la com#inaci"nC',>777.c$#ercursos.net

    .

    -it9e el cursor despus de la instrucci"n /oop $ escri#a e#u!.*rint B 8uera del ;ucle : B I-umaColumna.

    2.

  • 7/24/2019 Manual de Macros en Excel

    69/88

    Ejecute el pro!rama )sin puntos de interrupci"n+.

    Una vez terminada la ejecuci"n o#serve lo que %a$ escrito en la ventana inmediato. ( vecesresulta interesante controlar en que pasos la varia#le %a ido co!iendo determinados valorespara %acer esto de#er&n declararse las correspondientes varia#les que %a!an las funciones

    de contador. Ejemplo. =aremos lo mismo que en el ejemplo anterior pero indicando los pasosde #ucle $ las llamadas al procedimiento RecorrerColumna. K eclare a nivel !lo#al alvaria#le Contar/lamadas de tipo ?nte!er. K eclare dentro del *rocedimientoRecorrerColumna la varia#le *asose;ucle de tipo ?nte!er. K ?nicialice a 1 la varia#leContar/lamadas dentro de la funci"n *rue#a %&!alo antes de la instrucci"n o 4%ile. Ke#ajo de la instrucci"n (ctiveCell.'ffset)D 1+.(ctivate pon!a Contar/lamadas 0Contar/lamadasO1 K ?nicialice a 1 la varia#le *asose;ucle dentro del procedimientoRecorrerColumna %&!alo antes de la instrucci"n o 4%ile. K e#ajo de la instrucci"nesp8ila 0 esp8ila O 1 pon!a *asose;ucle 0 *asose;ucleO1 K Cam#ie lasexpresiones e#u!.*rint por e#u!.*rint B*aso de ;ucle: B I *asoe;ucle I B-umaColumna 0 B I -umaColumna e#u!.*rint B -umaColumna /lamada : B I

    Contar/lamadas I B -umaColumna 0 B IK Ejecute el pro!rama $ o#serve la salida en la ventana ?nmediato.

    *or supuesto cuando el pro!rama est terminado $ compro#ado de#er& quitar todas lasinstrucciones e#u!.*rint

    A con esto terminamos el tema de la depuraci"n. ?nsistimos en la importancia de estas%erramientas no s"lo a la %ora de localizar errores de pro!ramaci"n sino tam#in a la %orade compro#ar la evoluci"n del pro!rama cuando se dan determinadas condiciones. jenosaca#ar el tema insistiendo de nuevo en la importancia que modularice sus pro!ramaso#serve que si lo %ace tam#in le resultar& muc%o m&s sencillo detectar errores depro!ramaci"n.

    *&!ina L3

    %ttp:>>777.c$#ercursos.net

    Errores de Ejecuci"n.

    Es imposi#le excluir del todo los errores en los pro!ramas. -i adem&s $ como es de desearel pro!rama ser& utilizado por usuarios que no %an tenido nada que ver en el proceso dedesarrollo e implementaci"n posi#lemente )se!uramente+ se producir&n errores de#ido a suincorrecta utilizaci"n. Estos errores son los que se de#en prevenir. Errores de este tipo sonpor ejemplo intentar acceder a un arc%ivo inexistente entrar valor es incorrectos a travs deun cuadro de di&lo!o o formulario )datos tipo -trin! cuando se requieren n9meros...+.

  • 7/24/2019 Manual de Macros en Excel

    70/88

    producen en tiempo de ejecuci"n. /a finalidad de estas rutinas es que el pro!rama no sedeten!a o al menos si se detiene informar so#re la posi#le causa del error e intentarcontrolarlo de al!una forma. Estudiaremos a continuaci"n como se realiza esto en visual#asic.

    Copie el m"dulo si!uiente ser& el que utilizaremos en los ejemplos. Es un simpleprocedimiento que pide dos valores al usuario los suma $ los !uarda en la celda (1 de=oja.

    'ption Explicit -u# *rue#a)+ im n1 (s ?nte!er im n (s ?nte!er im total (s ?nte!er n1 0?nput;ox)BEntrar un valorB BEntradaB+ n 0 ?nput;ox)BEntrar otro valor B BEntradaB+ total 0 n1O n 4or5s%eets)B=ojaB+.Ran!e)B(1B+.6alue 0 total End -u#

    *&!ina L

    %ttp:>>777.c$#ercursos.net

    Rutinas de tratamiento de errores. eneralmente una rutina de tratamiento de erroresreacciona ante casos esperados por el pro!ramador. En el ejemplo que nos ocupa podraser que el usuario entrara caracteres en lu!ar de n9meros por lo que el pro!rama !enerarael error si!uiente.

    Mediante una rutina de tratamiento de errores informaremos del error que se %a producido $direccionaremos la ejecuci"n del pro!rama %acia donde interese. En visual #asic eltratamiento de errores es una parte normal de la ejecuci"n del pro!rama. /a instrucci"n parael tratamiento de errores es ', ERR'R '

  • 7/24/2019 Manual de Macros en Excel

    71