Escritura de Visual Basic Para Las Macros de Aplicaciones
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.