Escritura de Visual Basic Para Las Macros de Aplicaciones

download Escritura de Visual Basic Para Las Macros de Aplicaciones

of 8

Transcript of Escritura de Visual Basic Para Las Macros de Aplicaciones

  • 8/17/2019 Escritura de Visual Basic Para Las Macros de Aplicaciones

    1/8

    Escritura de Visual Basic para las macros de aplicaciones (VBA), se trabaja conobjetos que pueden recibir instrucciones. El objeto Application es el objeto de nivelsuperior en el modelo de objetos de Excel, y contiene:

    • Con!uraci"n de toda la aplicaci"n y las opciones. #uc$as de estasopciones son las mismas que se encuentra en el cuadro de di%lo!o Opciones ,

    disponible en el Bac&sta!e.

    • #'todos para objetos de nivel superior, como, por

    ejemplo, ActiveCell y Active$eet.

    Este Visual artculo se muestra c"mo reali*ar las tareas si!uientes:

    • Colecciones comunes de acceso, como, por ejemplo, $ojas, las y columnas

    • +tilice activas propiedades (como las

    propiedades ActiveCell y ActiveSheet)

    •  ener acceso a la selecci"n actual

    • #ostrar cuadros de di%lo!o

    Este Visual c"mo se basa en -evelopers uide al objeto Application de Excel/001 por 2ran& 3ice. Este artculo contiene in4ormaci"n adicional y ejemplos dec"di!o y, en !eneral la in4ormaci"n de Excel /001 tambi'n es v%lida para Excel/050.

    +tilice la propiedad Application para devolver el objeto Application. +na ve* queuna re4erencia a la aplicaci"n, para tener acceso a los objetos situados bajo elobjeto Application, baja la jerarqua del modelo de objeto, por ejemplo,desde Application a 6or&boo& a 6or&s$eet a Cells.VBA

    Application.Workbooks(1).Worksheets(1).Cells(1,1)

    7uede utili*ar muc$as de las propiedades y m'todos que devuelven los objetos deinter4a* de usuario m%s comunes, como, por ejemplo, la $oja de c%lculo activa sinel calicador de objeto Application. 7or ejemplo, en lu!ar de escribir lo si!uiente.

    VBAApplication.ActiveSheet.Name = "Monthly Sales"

    7uede escribir lo si!uiente.VBA

    ActiveSheet.Name = "Monthly Sales"

    in embar!o, ten!a cuidado cuando utilice estas notaciones de acceso directo quetiene los correctos objetos seleccionados.

    https://msdn.microsoft.com/es-es/library/office/ff194565(v=office.14).aspxhttps://msdn.microsoft.com/es-es/library/office/ff834673(v=office.14).aspxhttps://msdn.microsoft.com/es-es/library/office/ff822753(v=office.14).aspxhttps://msdn.microsoft.com/es-es/library/bb978780(office.12).aspxhttps://msdn.microsoft.com/es-es/library/bb978780(office.12).aspxhttps://msdn.microsoft.com/es-es/library/office/ff193029(v=office.14).aspxhttps://msdn.microsoft.com/es-es/library/office/ff835568(v=office.14).aspxhttps://msdn.microsoft.com/es-es/library/office/ff194464(v=office.14).aspxhttps://msdn.microsoft.com/es-es/library/office/ff194464(v=office.14).aspxhttps://msdn.microsoft.com/es-es/library/office/ff836446(v=office.14).aspxhttps://msdn.microsoft.com/es-es/library/office/ff834673(v=office.14).aspxhttps://msdn.microsoft.com/es-es/library/office/ff822753(v=office.14).aspxhttps://msdn.microsoft.com/es-es/library/bb978780(office.12).aspxhttps://msdn.microsoft.com/es-es/library/bb978780(office.12).aspxhttps://msdn.microsoft.com/es-es/library/office/ff193029(v=office.14).aspxhttps://msdn.microsoft.com/es-es/library/office/ff835568(v=office.14).aspxhttps://msdn.microsoft.com/es-es/library/office/ff194464(v=office.14).aspxhttps://msdn.microsoft.com/es-es/library/office/ff836446(v=office.14).aspxhttps://msdn.microsoft.com/es-es/library/office/ff194565(v=office.14).aspx

  • 8/17/2019 Escritura de Visual Basic Para Las Macros de Aplicaciones

    2/8

    8ay unas pocas instancias donde debe utili*ar el calicador de Application. 7orejemplo, el m'todo 9nime necesita el calicador i!ual que laspropiedades 6idt$ y 8ei!$t de la ventana de la aplicaci"n. En !eneral, laspropiedades que est'n relacionados con la apariencia de la ventana de Excel, oque a4ectan al comportamiento !eneral de la aplicaci"n requieren el calicadorde Application. 7or ejemplo, la propiedad -isplay2ormulaBarque se utili*a para

    mostrar u ocultar la barra de 4"rmulas y el m'todo Calculate requiere el calicador.Colecciones-esde el objeto Application, puede obtener varios tipos de colecciones tiles. Estasecci"n describe las colecciones que se puede tener acceso.

    Columnas y flas

    7ara seleccionar la cuarta columna, puede utili*ar la propiedad Columns.VBA

    Application.Colmns(!).Select

    -e 4orma similar, para seleccionar la cuarta la, puede utili*ar la

    propiedad 3o;s.VBA

    Application.o#s(!).Select

    sheets

    En el ejemplo de c"di!o si!uiente se recorre todas las $ojas de c%lculo del

    libro e imprime las $ojas de c%lculo que contienen los ran!os de datos.

     en!a en cuenta que la colecci"n de $eets se utili*a como una propiedad

    del objeto Application.VBA

    $or iSheet = 1 %o Application.Sheets.Cont

      &' Not &smpty(Application.Sheets(iSheet).se*an+e) %hen

      Application.Sheets(iSheet).rint-t copies=1  n* &'

    Ne/t iSheet

    Propiedades del objeto7ara tener acceso a los distintos objetos de la aplicaci"n Excel /050, $ay un !rannmero de propiedades de Application: demasiados comentar aqu.

  • 8/17/2019 Escritura de Visual Basic Para Las Macros de Aplicaciones

    3/8

    ase!urarse de que est% trabajando con la celda correcta, $ace elm'todo Activate de la colecci"n 6or&s$eets que Sheet1 la $oja de c%lculo

    activa.VBA

    Worksheets("Sheet1").Activate

    With ActiveCell.$ont.0ol* = %re

    .&talic = %re

    n* With

    ActiveChart

    =a propiedad ActiveChart devuelve un objeto C$art que representa el

    !r%co activo, ya sea un !r%co incrustado o una $oja de !r%co. +n !r%co

    incrustado se considera activo cuando est% seleccionado o activado. En el

    ejemplo de c"di!o si!uiente se utili*a la propiedadActiveChart paraa!re!ar un !r%co de columnas >- a la $oja de c%lculo de Monthly Sales.

    VBACharts.A**

    With ActiveChart

      .Chart%ype = /l2Colmn

      .SetSorce2ata Sorce=Sheets("Sheet1").an+e("0314")

      .5ocation Where=/l5ocationAs-b6ect, Name="Monthly Sales"

      .3as%itle = %re

      .Chart%itle.Characters.%e/t = Monthly Sales by Cate+ory

    n* With

    hoja activa=a propiedad ActiveSheet devuelve un objeto 6or&s$eet que representa el

    s$eet ─ t$at seleccionado actualmente es, en la parte superior de la $oja de

    c%lculo. "lo una $oja de un libro puede ser la $oja activa. En el ejemplo de

    c"di!o si!uiente se copia la $oja de c%lculo activa tres veces y coloca lascopias de Sheet1.

    $or nmtimes = 1 %o

    7 t copies in 'ront o' Sheet1.

    ActiveWorkbook.ActiveSheet.Copy 8

    0e'ore=ActiveWorkbook.Sheets("Sheet1")

    Ne/t

    ActiveWindow

    =a propiedad ActiveWindow devuelve un objeto 6indo; que representa la

    ventana activa, que es la ventana en la parte superior. En el ejemplo de

    c"di!o si!uiente se selecciona y se imprime una $oja de c%lculo y, a

    continuaci"n, repite el proceso para una se!unda $oja de c%lculo. =a

    https://msdn.microsoft.com/es-es/library/office/ff838003(v=office.14).aspxhttps://msdn.microsoft.com/es-es/library/office/ff821537(v=office.14).aspxhttps://msdn.microsoft.com/es-es/library/office/ff194426(v=office.14).aspxhttps://msdn.microsoft.com/es-es/library/office/ff194464(v=office.14).aspxhttps://msdn.microsoft.com/es-es/library/office/ff835196(v=office.14).aspxhttps://msdn.microsoft.com/es-es/library/office/ff835196(v=office.14).aspxhttps://msdn.microsoft.com/es-es/library/office/ff838003(v=office.14).aspxhttps://msdn.microsoft.com/es-es/library/office/ff821537(v=office.14).aspxhttps://msdn.microsoft.com/es-es/library/office/ff194426(v=office.14).aspxhttps://msdn.microsoft.com/es-es/library/office/ff194464(v=office.14).aspxhttps://msdn.microsoft.com/es-es/library/office/ff835196(v=office.14).aspx

  • 8/17/2019 Escritura de Visual Basic Para Las Macros de Aplicaciones

    4/8

    propiedad creen+pdatin! se establece en False para eliminar un parpadeo

    mientras se ejecuta la macro.Application.Screenp*atin+ = $alse

    Sheets("Sales").Select

    ActiveWin*o#.Selecte*Sheets.rint-t Copies=1, Collate=%re

    Sheets("/penses").Select

    ActiveWin*o#.Selecte*Sheets.rint-t Copies=1, Collate=%re

    ActiveWorkbook 

    =a propiedad ActiveWorkbook  devuelve un objeto 6or&boo& que

    representa el libro en la ventana activa, que es la ventana en la parte

    superior. Este ejemplo establece el modo de c%lculo manual, para que los

    otros libros no calcular, a continuaci"n, recorre y vuelve a calcular cada $oja

    de c%lculo del libro activo.2im #ks As Worksheet

    Application.Calclation = /lManal

    $or ach #ks &n ActiveWorkbook.Worksheets

      #ks.Calclate

    Ne/t

    Set #ks = Nothin+

    RaneSelection

    =a propiedad RaneSelection devuelve un objeto de 3an!e que representa

    las celdas seleccionadas en la $oja de c%lculo en la ventana especicada

    aunque un objeto !r%co est' activo o seleccionado en la $oja de c%lculo.

    Cuando se selecciona un ran!o de celdas, la propiedadRaneSelection y el

    objeto de Selection representan el mismo ran!o de celdas. Cuando seselecciona un !r%co, la propiedadRaneSelection devuelve la selecci"n

    de celdas. El ejemplo de c"di!o si!uiente muestra los tres primeros

    caracteres en una celda. ?ui*% se pre!unte por qu' se utili*a una propiedad

    de @ame dos veces en una la. RaneSelection!"ame devuelve ladirecci"n del ran!o, como, por ejemplo, Sheet19:A:1:0:14, y, a

    continuaci"n, la propiedad "ame de ran!o devuelve el nombre del ran!o de

    s mismo.an+e("A1").Select

    Ms+0o/ 5e't(ActiveWin*o#.an+eSelection.Name.Name, )

    Selecci#n

    =a propiedad Selection devuelve el objeto seleccionado en la ventana

    activa para un objeto Application. 7or ejemplo, las celdas, la propiedad

    devuelve un objeto Rane los !r%cos, devuelve un objeto Chart. i se

    utili*a la propiedad sin calicador de objeto, es equivalente a

    utili*arApplication!Selection. En el ejemplo de c"di!o si!uiente se cuenta

    https://msdn.microsoft.com/es-es/library/office/ff193498(v=office.14).aspxhttps://msdn.microsoft.com/es-es/library/office/ff835568(v=office.14).aspxhttps://msdn.microsoft.com/es-es/library/office/ff838238(v=office.14).aspxhttps://msdn.microsoft.com/es-es/library/office/ff841101(v=office.14).aspxhttps://msdn.microsoft.com/es-es/library/office/ff193498(v=office.14).aspxhttps://msdn.microsoft.com/es-es/library/office/ff835568(v=office.14).aspxhttps://msdn.microsoft.com/es-es/library/office/ff838238(v=office.14).aspxhttps://msdn.microsoft.com/es-es/library/office/ff841101(v=office.14).aspx

  • 8/17/2019 Escritura de Visual Basic Para Las Macros de Aplicaciones

    5/8

    el nmero de celdas de la selecci"n y se muestra el resultado en un cuadro

    de mensaje.2im cell As -b6ect

    2im cont As &nte+er

    cont = ;

    $or ach cell &n Selection

    cont = cont < 1

    Ne/t cell

    Ms+0o/ cont " item(s) selecte*"

    $hisWorkbook 

    =a propiedad $hisWorkbook  devuelve un objeto Workbook  que

    representa el libro donde se ejecuta el c"di!o de macro actual. Esta

    propiedad permite que los complementos $acer re4erencia al libro que

    contiene el c"di!o. =a propiedad ActiveWorkbook  no 4unciona en este

    caso porque el libro activo puede no ser el que contiene el c"di!o del

    complemento. En otras palabras, la propiedad ActiveWorkbook devuelve el

    libro de complemento -evuelve el libro al que llama el complemento. i

    crea un complemento desde el c"di!o de Visual Basic, se debe utili*ar la

    propiedad $hisWorkbook  para calicar cualquier instrucci"n que debe

    ejecutarse en el libro que se compile como complemento. Este ejemplo de

    c"di!o cierra el libro que contiene el c"di!o de ejemplo. =os cambios del

    libro, si $ay al!uno, no se !uardan.%hisWorkbook.Close SaveChan+es=$alse

    m%todosEsta secci"n describe al!unos de los m'todos que se pueden acceder desde elobjeto Application. Anali*a los cuadros de di%lo!o y cuadros de entrada.

    Cuadros de di&loo

    El m'todo et9pen2ilename muestra el est%ndar de cuadro de

    di%lo!o Abrir y se obtiene un nombre de arc$ivo del usuario sin necesidad

    de abrir todos los arc$ivos. El m'todo 'etOpenFilename le o4rece el

    mayor control sobre el proceso de abrir un arc$ivo desde su aplicaci"n,

    porque todo lo que $ace es devolver el nombre completo de ruta de acceso

    y el arc$ivo seleccionado por el usuario como una cadena. ?u' $acer con

    esa in4ormaci"n es suya. 7or ejemplo, puede pasar el resultado del

    m'todo 9penext. En el ejemplo de c"di!o si!uiente se muestra el cuadro

    de di%lo!o Abrir con el ltrado en el conjunto del cuadro "o se haencontrado para Archivos de te(to (.txt) y, a continuaci"n, muestra un

    cuadro de mensaje de la elecci"n del usuario. en!a en cuenta que el

    arc$ivo no est% abierto.2im 'ile%o-pen As Strin+

    'ile%o-pen = Application.>et-pen$ilename("%e/t $iles (?.t/t),

    ?.t/t")

    https://msdn.microsoft.com/es-es/library/office/ff834966(v=office.14).aspxhttps://msdn.microsoft.com/es-es/library/office/ff834966(v=office.14).aspxhttps://msdn.microsoft.com/es-es/library/office/ff837097(v=office.14).aspxhttps://msdn.microsoft.com/es-es/library/office/ff834966(v=office.14).aspxhttps://msdn.microsoft.com/es-es/library/office/ff837097(v=office.14).aspx

  • 8/17/2019 Escritura de Visual Basic Para Las Macros de Aplicaciones

    6/8

    &' 'ile%o-pen @ "" %hen

    Ms+0o/ "-pen " 'ile%o-pen

    n* &'

    A di4erencia del m'todo 'etOpenFilename, el m'todo 2ind2ile muestra el

    cuadro de di%lo!o Abrir y permite al usuario abrir un arc$ivo. i un arc$ivonuevo se abre correctamente, el m'todo devuelve $rue. i el usuario

    cancela el cuadro de di%lo!o, este m'todo devuelve False. En el ejemplo de

    c"di!o si!uiente se muestra un mensaje que indica al usuario para abrir un

    arc$ivo especco y, a continuaci"n, muestra el cuadro de di%lo!o de Open.

    i el usuario no puede abrir el arc$ivo, se muestra un mensaje.2im bSccess As 0oolean

    Ms+bo/ "5ocate the MonthlySales./ls 'ile."

    bSccess = Application.$in*$ile

    &' Not bSccess %hen

      Ms+bo/ "$ile not open."

    n* &'

    7uede abrir estos cuadros de di%lo!o de arc$ivo, o cualquier otro di%lo!o

    comn de arc$ivo mediante el uso de la colecci"n -ialo!s que 4orma parte

    de Excel. +na de las ventajas de utili*ar la colecci"n de )ialos cuando se

    utili*a el m'todo $o;, se puede pasar ar!umentos para modicar el

    comportamiento predeterminado del cuadro de di%lo!o inte!rado. 7ara

    encontrar los ar!umentos a establecer para un cuadro de di%lo!o

    determinado, busque la constante del cuadro de di%lo!o correspondiente en

    el tema de =istas de ar!umentos de cuadros de di%lo!o inte!rados en la

    re4erencia del pro!ramador de Excel.

    Para ver la lista de miembros de la colecci#n decuadros de di&loo

    5. Abra un m"dulo VBA.

    /. 7ara mostrar el *(plorador de objetos, en el men +er , $a!a clic en

    el *(plorador de objetos. 9 bien, presione F,.

    >. Escriba (l)ialo en el cuadro de bsqueda.

    D. 8a!a clic en el bot"n de bsqueda.

    -nput.o(El m'todo 

  • 8/17/2019 Escritura de Visual Basic Para Las Macros de Aplicaciones

    7/8

    inicialmente, Left  y Top se utili*an para especicar la posici"n del cuadro de

    di%lo!o, HelpFile y HelpContextID especican un arc$ivo de ayuda y qu'

    tema para mostrarlo y Type es el tipo de devoluci"n de datos. en!a en

    cuenta que Left  y Top son relativas a la esquina superior i*quierda de la

    pantalla y se expresan en puntos. Adem%s, si se

    especican HelpFile y HelpContextID, un bot"n de Ayuda se incluye en elcuadro de di%lo!o. Type, el valor predeterminado es / (texto). =os tipos

    permitidos incluyen una 4"rmula, nmero, cadena, valor l"!ico, una

    re4erencia de celda y el valor de error y una lista de valores y se muestran

    en la tabla 5.

    $abla /! $ipos de datos devueltos -nput.o(

    Valorype

    : F0G+na 4"rmula. =a 4"rmula se devuelve como una cadena. Esto es el

    nico ar!umento requerido.F5G+n nmero. ambi'n puede incluir aqu una 4"rmula con valores de

    modo que devuelve un valor.

    F/Gexto (cadena).

    D+n valor l"!ico ($rue o False).

    H+na re4erencia de celda, como un objeto Rane.

    5I+n valor de error como J @KA.

    ID+na lista de valores."ota0

    i Type es H, debe utili*ar la instrucci"n Set para asi!nar el resultado a un

    objeto Rane, tal como se muestra en el si!uiente ejemplo de c"di!o.En el ejemplo de c"di!o si!uiente se pide al usuario el nmero de copias y

    se imprime el nmero de la $oja de c%lculo activa. en!a en cuenta que el

    tipo especica que el m'todo espera un nmero.2im %otalCopies As 5on+, NmCopies As 5on+

    2im srompt As Strin+, s%itle As Strin+

    srompt = "3o# many copies *o yo #antB"

    s%itle = "rints the active sheet"

    %otalCopies = Application.&npt0o/(rompt=srompt, 8

      %itle=s%itle, 2e'alt=1, %ype=1)

    $or NmCopies = 1 %o %otalCopies

      ActiveSheet.rint-t

    Ne/t NmCopies

  • 8/17/2019 Escritura de Visual Basic Para Las Macros de Aplicaciones

    8/8

    El artculo de 2ran& 3ice (-evelopers uide al objeto Application de Excel /001)contiene in4ormaci"n adicional sobre el objeto Application.