Você está na página 1de 52

26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

INTRODUCCINALAPROGRAMACINDE
OFFICE.VisualBasicparaAplicaciones(VBA)

MACROS
2.1.UTILIZACINDELAGRABADORADEMACROS.

2.2.EJECUCINDEUNAMACRO.

2.1VISUALIZACINDELCDIGOCORRESPONDIENTEAUNAMACRO.

3ELEDITORDEVISUALBASIC

3.1ENTORNODEPROGRAMACINENEXCELYWORD

4ELMODELODEPROGRAMACINORIENTADAAOBJETOS

4.1LOSOBJETOSDEMICROSOFTOFFICE.

4.2UTILIZACINDELEXAMINADORDEOBJETOS

5ELMDULODECDIGO

5.1AYUDASALAHORADEESCRIBIRELCDIGO

6TIPOSDEDATOS

6.1DECLARACINDEVARIABLESYCONSTANTES

6.2DECLARACINDEVARIABLES

6.3REGLASPARAPONERNOMBRESALASVARIABLES

6.4DECLARACINDECONSTANTES

6.5REGLASPARAPONERNOMBRESALASCONSTANTES

6.6ALCANCEOMBITODELASVARIABLES

7CONTROLDELORDENDEEJECUCIN

7.1SENTENCIASDESELECCIN

7.2SENTENCIASDEREPETICIN(BUCLES)

8DEPURACINDELCDIGO

8.1PUNTOSDEINTERRUPCIN(BREAKPOINTS)

8.1.1INSERCINDEPUNTOSDEINTERRUPCINENELCDIGO

8.1.2ELIMINARPUNTOSDEINTERRUPCIN

8.1.3MODOINTERRUPCIN

8.1.4CUADRODESUGERENCIADEDATOS

9COMUNICACINENTREPROCEDIMIENTOSYFUNCIONES

10OBJETOSDEEXCEL

10.1OBJETOAPPLICATION

10.2PseudoobjetoActiveWorkbook.

10.3ColeccinWorkSheet(Worksheets)

http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 1/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)
EndSub

10.4ObjetoRange.

10.5ObjetoFont.

10.6ColeccinDocumentProperty(DocumentProperties).

10.7ColeccinShape(Shapes).

11OBJETOSDEWORD

11.1ObjetoscomunesconExcel.

11.2ColeccinDocument(Documents).

DimoUnDocuAsObject

DimoUnDocuAsObject

11.3PseudoobjetoActiveDocument.

11.4ObjetoRange.

11.5ColeccinSection(Sections).

11.6ColeccinParagraph(Paragraphs).

11.7ColeccinSentence(Sentences).

11.8ColeccinWord(Words).

12OBJETOSDEACCESS

12.1ObjetoApplication

12.2ColeccinDatabase(Databases).

12.3ColeccinProperty(Properties).

12.4ColeccinRecordset(Recorsets).

12.5ColeccinField(Fields).

12.6ObjetoDoCmd.

13COMUNICACINENTREAPLICACIONES

13.1AperturaDeAplicaciones

13.2UtilizacindeAplicacionesyaExistentes

13.3FinalizacindeunaAplicacin

13.4UtilizacindelosObjetosdeunaAplicacin

13.5ComunicacinconAccess

1 INTRODUCCINALAPROGRAMACINDEOFFICE

ApesardelasmltiplesopcionesqueofreceelconjuntodeaplicacionesdeMicrosoftOffice(enespecial,Excel,AccessyWord),siempre
existelaposibilidaddequetalesopcionesnosatisfaganporcompletolosrequerimientosdelusuario.

Porello,resultainteresantedisponerdeunconjuntodeutilidadesquepermitenpersonalizarlainterfazgrficayprocesarlainformacincon

http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 2/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

todalacomplejidadquesenecesite.EstasutilidadesestnreunidasenunentornodeprogramacindenominadoEditordeVisualBasic.

VisualBasicesunlenguajedeprogramacinconelcualsehaceposiblerealizarprogramaspersonalizadosquesecomuniquene
interaccionenconelconjuntodeherramientasgrficasdeOffice.

Estelenguajedeprogramacinnospermitirtrabajarsobreaspectoscomo:mensajesdeerrorpersonalizados,asistentesparalarealizacinde
cualquieraccindentrodeunaaplicacindeOffice,formulariospersonalizados,etc.

MACROS
AntesdeentrarenlaprogramacindeOffice,convieneestudiarunaspectontimamenterelacionadoconloanterior:setratadelautilizacin
demacros.

Unamacroesunconjuntodeaccionesqueestnreunidasyautomatizadas,demodoqueseejecutancomounanicaaccin.Realmente,se
tratadeunprogramaenVisualBasicquerealizadeformaautomticaunaseriedeoperacionesamenudorepetitivasyrutinarias.

TantoExcelcomoWordproporcionanunsencillomtododecreacindemacros:setratadelagrabadorademacros.Sinembargo,stano
apareceenAccess,sinoqueensulugardisponemosenestaaplicacindeuneditordemacrosconunasaccionesyapredefinidas.

2.1.UTILIZACINDELAGRABADORADEMACROS.
Paracrearunanuevamacro,seguiremoslossiguientespasos:

1. Picar en la opcin de la barra de mens HerramientasMacroGrabar nueva macro. Aparecer un cuadro de dilogo donde se ha de
indicar:
Nombreconelqueidentificaremoslamacro.
Posibilidaddehacerquelamacroaparezcacomoenalgunadelasbarras(sloenWord)obienquesepuedaejecutaralpulsaralguna
combinacindeteclas(paraWordyExcel).

Proyectosalosqueseasociarlamacro(eldocumentoolibroactual,todoslosdocumentosconstruidosconlaplantillaNormal.dot,etc.).
Finalmente,unabrevedescripcindelamacro.

http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 3/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

Unavezespecificadoslosvaloresrequeridos,picaremosenelbotnAceptar.

2. A continuacin, se observar que la opcin del men HerramientasMacroGrabar nueva macro ha sido sustituida por
HerramientasMacroDetenergrabacin.Estonosindicaquelamayoradelasaccionesquerealicemosacontinuacin,hasta
seleccionardichaopcindelabarrademens,pasarnaformarpartedelamacroqueestsiendograbada.Delmismomodo,apareceren
lapantallaelbotnDetenergrabacin.

3. Una vez efectuadas todas las acciones que deseamos formen parte de la macro, pulsaremos el botn Detener grabacin o la opcin
correspondientedelabarrademens.

2.2.EJECUCINDEUNAMACRO.
Unavezalmacenadaunamacro,puedeserutilizadasiemprequesedesee.Paraello,seguiremoslossiguientespasos:

1.SeleccionarlaopcinHerramientasMacroMacrosdelabarrademens.Apareceruncuadrodedilogoenelsepodrseleccionar,en
primerlugar,laprocedenciadelasmacros,traslocualaparecerunalistadesta,escogeremoslamacroquesequiereejecutar.
2.

Sepodrejecutarlamacroporcompleto(Ejecutar)obiendescomponindolaenlasdiferentesaccionesquelaforman(Pasoapaso).

2.1 VISUALIZACINDELCDIGOCORRESPONDIENTEAUNAMACRO.

Comoseindicanteriormente,unamacrorealmentesecomponedeunaseriedelneasdecdigoenVisualBasicesdecir,setratadeun
Mdulodecdigo.

Parapodervisualizarelcdigoquecorrespondeaunamacro,podemosseleccionarlaopcinHerramientasMacroMacros.Acontinuacin,
picaremosenelbotnModificar,traslocualaparecerenpantallaelentornodeprogramacindeVisualBasic.EnlaventanadeMdulode
cdigo se mostrar el conjunto de instrucciones que ejecutan las acciones que forman parte de la macro. Tambin podemos pulsar la
combinacindeteclasALT+F11.
http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 4/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

3 ELEDITORDEVISUALBASIC

AlahoradeprogramarenVisualBasicparaAplicaciones,disponemosdeunentornodeprogramacinbastantecompleto:enExcelyWord
tenemos el Editor de Visual Basic. Sin embargo, en Access no disponemos de la totalidad del editor, sino simplemente de algunas de sus
ventanas.

3.1 ENTORNODEPROGRAMACINENEXCELYWORD

TantoenExcelcomoenWord,alponerenfuncionamientoeleditordeVisualBasicdesdelaopcinHerramientasMacroEditordeVisual
Basicdelabarrademens,lapantallaofreceraunaspectosimilaralquemuestralafigurasiguiente.

Veamosacontinuacinlautilidaddecadaunadelasventanasocuadrosqueseobservan:

Exploradordeproyectos.Estaventanamuestraunalistajerrquicadelosproyectosytodosloselementoscontenidosenlosmismosya
losquehacereferenciacadaunodeellos.Cadadocumento,libroobasededatosqueseabraenWord,ExceloAccess,respectivamente,
lleva asociado un proyecto de VBA. Un proyecto de VBA puede estar formado por un nmero arbitrario de mdulos de cdigo o
UserForms.

Examinadordeobjetos.Representaalgosimilaraunmapapararecorrerlosobjetos,mtodos,propiedadesyeventosrelacionadoscon
un control ActiveX o una aplicacin (Word, Excel o Access). Mediante el Examinador de objetos, la forma de programar un objeto
determinadosesimplifica.

Mdulodecdigo.EnestaventanaseescribeelcdigoenVisualBasicqueposteriormenteseejecutar.Haytrestiposdemdulosde
cdigo: estndar, clase y formulario, cada uno de los cuales posee un cometido especfico. Estos mdulos tienen la misin de agrupar
mdulosdecdigoconunafuncincomn.

http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 5/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

Ventana UserForm. Esta ventana contiene un UserForm (Formulario del usuario), con el cual se pueden crear cuadros de dilogo
personalizadosparasuusoenlosprogramasdeVBA.MedianteunUserFormyloscontrolesActiveXdelcuadrodeherramientassepodr
construircualquiercuadrodedilogopersonalizado,adaptadoalasnecesidadesdelprograma.

Cuadrodeherramientas.EnlencontramosunaseriedecontrolesActiveX,demodoquepodemosseleccionarlosyarrastrarloshaciael
UserForm(aligualquesehacaconlacajadeherramientassobreunformulariodeAccess).

VentanaInmediato.Enella,podremosintroduciryejecutarunalneadecdigoenVisualBasic,yverdeinmediatoelresultadoquese
obtendra.Portanto,seutilizaralahoradedepurarcdigodeVisualBasic.

Otrasventanasquepodemoshaceraparecerenelentornodeprogramacin,yquesirvenpararealizarladepuracindelcdigo,son:

VentanaInspeccin.SepuedeseleccionarunavariabledeunmdulodecdigoyarrastrarlaalaventanaInspeccin,demodoquecada
vezquevareelvalordedichavariabledurantelaejecucindelcdigo,elnuevovaloraparecerdeformaautomticaenestaventana.Por
tanto,nuevamenteseutilizaralahoradeladepuracindelcdigo.

Locales. Su funcionamiento es similar al de la ventana Inmediato, con la diferencia de que no es necesario aadir las variables a
inspeccionar, sino que, de forma predeterminada, aparecen automticamente los valores de todas las variables declaradas en el
procedimientoactual.

VentanaPropiedades.MuestralaspropiedadesdeuncontrolActiveX,deunUserFormodeunMdulodecdigo.Laspropiedadespueden
aparecerordenadasdedosformasdistintas:

Alfabticamente.

http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 6/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

Porcategoras.




2.3.2.ENTORNODEPROGRAMACINENACCESS.

Hay que sealar que, como se ha mencionado antes, el entorno de programacin para Access presenta algunas diferencias, puesto que
nicamente incluye las ventanas de Mdulo de cdigo, Examinador de objetos y Depuracin (sta ltima engloba las ventanas Inspeccin y
Locales).

2.3.3.UTILIZACINDELEDITORDEMACROSDEACCESS.

ElprocesoparacrearmacrosenAccessdifierebastantealquesesigueenWordoExcel.Seseguirnlossiguientespasos:

1.Desdelaventanadelabasededatos,seleccionamoslafichaMacros.
http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 7/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

2.PicandoenelbotnNuevo,comenzaremosacrearunanuevamacro.

3.AparecerelEditordemacros,conesteaspectoycomponentes

Nombredelamacro.Sireunimosvariasaccionesenunasola,podemosasociaracadaunadeellasunnombrerepresentativo.

Condicindeejecucin.Sepuedeespecificaruncriterio,demodoquelaaccinseejecutarnicamentesistesecumple.Pordefecto,
elcriterioesVerdadero,locualsignificaquelaaccinsiempreseejecutaralponerenmarchalamacro.

Accin.Enesteapartado,sehadeespecificarlaaccinquesehaderealizarsobrelabasededatos,eligiendolaquesedeseedeunalista
desplegablequepodemosvisualizar,siendolasmsusualeslassiguientes:
AbrirConsulta:abreunasonsultadeseleccinodereferenciascruzadas,obienejecutaunaconsultadeacciones.Laconsulta

puedeabrirseenelmodoDiseo,HojadedatosoPresentacinpreliminar(paravercmoresultaraalimprimir).

AbrirFormulario:abreunformularioenelmodoFormulario,Diseo,HojadedatosoPresentacinpreliminar.

http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 8/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

AbrirInforme:abreuninformeenelmodoDiseo,Presentacinpreliminar,obienloimprimedirectamente.

AbrirTabla:abreunatablaenelmodoDiseo,HojadedatosoPresentacinpreliminar.

AplicarFiltro:aplicaunfiltrooconsultaaunatabla,formulariooinforme,paralimitaruordenarlosregistrosresultantes.

Bip:seemiteunsonidoestilparasealarerroresocambiosvisualesimportantes.

BuscarRegistro:buscaelprimerregistroquecoincideconelcriterioespecificadolabsquedasepuederealizarenelformulario

oenlahojadedatosactiva(tablaoconsulta).
BuscarSiguiente : busca el siguiente registro que coincide con los criterios especificados en la accin BuscarRegistro ms

recienteoenelcuadrodedilogoBuscar.
Cerrar.Cierralaventanaespecificadaolaventanaactivaencasodenoespecificarninguna.Sielobjetoquehayenlaventana

(tabla,consulta,etc.)nohasidoguardado,apareceelcuadrodedilogoGuardar.
CuadroMsg:presentauncuadrodemensajeconunaadvertenciaoinformacin.

EstablecerValor:estableceunvalorparauncontrol,campoopropiedaddeunformulario,hojadedatosoinforme.

Guardar:guardasiempreelobjetoespecificadooelobjetoactivo(tabla,consulta,etc.),encasodenoespecificarninguno,enla

basededatosenquefuecreado.
IrARegistro:hacequeelregistroespecificadoseconviertaenelregistroactivoenunformulariouhojadedatos.

Salir:saledeAccess.

SeleccionarObjeto:seleccionaelobjetoespecificadodelabasededatos.

Descripcin.Sepuedeaadiruncomentariooinformacindescriptivasobrecadaaccin.

Argumentosdeaccin.Dependiendodelaaccinseleccionada,habrqueespecificarunosdeterminadosargumentosoparmetrospara
laejecucindelamisma.Porejemplo,paralaaccinAbrirTabla,debemosindicaraspectoscomoelnombredelatablaaabriryel
mododeapertura(Diseo,Hojadedatos,etc.)

Cuadrodeinformacin.Muestraunbrevecomentariosobrelaaccinseleccionada,elcualnospuedefacilitarlatareadeconfigurarsus
argumentos.

4 ELMODELODEPROGRAMACINORIENTADAA

OBJETOS
PararealizarmdulosoprogramasenVisualBasicoVBA(VisualBasicparaAplicaciones),esnecesariointroducirunosconceptosbsicos
sobreeltipoomodelodeprogramacinquesehadeutilizar.Enconcreto,VBAsebasaenelmodelodeprogramacinorientadoaobjetos,muy
distintoalmodelotradicionalqueutilizanlenguajescomoFortranyotros.

Elpuntodepartidadeestemodelosefundamentaenlaideadequeelentornoestformadoporobjetos.Enesteentorno,queennuestrocaso,
seraelconjuntodeaplicacionesdeOffice,podemosencontrar:

Objeto.Entidadsignificativaexistenteenelentorno.Engeneral,elentornoseconcibecomoelconjuntoderelacionesentrelosdistintos
objetosadems,cadaobjetopuedeestarcompuestodeotrosobjetos(subobjetos).

Clase.Conjuntodeobjetosdistintosdelmismotipo.

Estado.Caractersticasopropiedadesdeunobjetoenunmomentodado.

Comportamiento:Operacionesrealizablesporelobjeto.

http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 9/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)


Porejemplo,podramostenerunobjetoAscensor,elcualestaraformadoporlossubobjetosPuertaautomtica,Cabina,Botndealarma,
Botndeparada,Botnalaplanta1,Botnalaplanta2,etc.

En cuanto a su estado, podramos tener las propiedades Ocupado (con los valores S o No), Tipo de movimiento (Subiendo, Bajando,
Ninguno),etc.

Respectoasucomportamiento,podramostenerlasoperacionesSubir,Bajar,Detenerse,Abrirpuertaautomtica,etc.

Porotrolado,sepuedeobservarquelossubobjetosBotndeparada,Botnalaplanta1,Botnalaplanta2,etc.,formaranpartedeuna
clasellamadaBotones,yaquecadaunoesunobjetodistintoperotodospertenecenaunmismotipodeobjeto.

4.1 LOSOBJETOSDEMICROSOFTOFFICE.

CentrndonosenOfficeyenellenguajeVBA,tenemos:

Objeto. Toda entidad de Office funcional, manejable y programable. En Office, prcticamente todo puede concebirse como objeto
(botones,tablas,consultas,documentos,hojasdeclculo,etc.).

Colecciones.Objetosdistintosquesondelmismotipo.Siempreaparecenenplural(Worksheets,Shapes,Workbooks,etc.),yequivaldran
aloquehemosllamadoClases.Porejemplo,WorksheetsyWorkbooksrepresentan,respectivamente,lacoleccinoconjuntodehojasde
clculoabiertasydelibrosabiertosenExcel,DocumentsrepresentalacoleccindedocumentosabiertosenWord,etc.

Miembros.Conjuntoformadoporelestadoyelcomportamientoquesepuedeaplicaraunobjetoconcreto.Dentrodeesteapartado,
podemosdiferenciardosconceptos:
Propiedades.Atributosocaractersticaspropiasdeunobjeto(tamao,posicin,forma,etc.).


Mtodos.Accionesquepuedenrealizarsesobreoconunobjeto(abrir,cerrar,eliminar,etc.)

Eventos.Sucesosquetienenlugarenunmomentodado,anteloscualespuederesponderunobjeto(pulsartecla,pulsarbotnderecho

del ratn, etc.). Por defecto, ante un evento un determinado objeto no proporciona ninguna respuesta, cuya configuracin queda en
manosdelusuario.

3.2.JERARQUADEOBJETOS

Sehaindicadoanteriormentequeprcticamentetodoslosobjetospuedensubdividirseenotrosobjetosmenores(subobjetos).Estosignifica
quetendremosunciertoordenojerarquadeobjetos,demodoqueunobjetodeunprimernivelpodradividirseenobjetosqueloformanenel
siguientenivel.

SiguiendoelejemplodelobjetoAscensor,tendramosestediagramajerrquico:



Ascensor


Puerta Cabina

Centrndonos en Office, encontramos una serie de niveles jerrquicos, de modo que en un nivel superior, tendramos el objeto aplicacin
(Application).Estosignificaqueelobjetomayoralcualpodemoshacerreferenciaeslapropiaaplicacinconlaqueestemostrabajando(Excel,
AccessoWord).

http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 10/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

Acontinuacin,semuestraunaposibleprimerajerarquadelasaplicacionesExcelyWord.EnlaaplicacinExcel,podemostenervarios
libros abiertos, y cada uno de ellos puede tener un cierto nmero de hojas de clculo. En cuanto a la aplicacin Word, pueden existir en un
momento dado una cierta cantidad de documentos abiertos, cada uno de los cuales est formado por diferentes secciones (fragmentos de un
documentoindependientesentres).



3Excel
2Word


Application Application



Workbooks
Documents

4.2 UTILIZACINDELEXAMINADORDEOBJETOS

Ya se ha comentado brevemente que una de las ventanas del Editor de Visual Basic es el Examinador de objetos se trata de un mapa o
manual de instrucciones donde se puede buscar iinformacin referente a un objeto de Office. A continuacin, se muestran y explican los
distintoscomponentesqueloforman.

http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 11/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

ListadesplegableProyectoBiblioteca.DisponemosdeunaBibliotecadeObjetos,quenoesmsqueunarchivoconinformacinsobre
objetos,propiedades,mtodosyenumeraciones.HaybibliotecasreferentesaExcel,aAccess,etc.Seleccionaremoslabibliotecadonde
buscar(pordefecto,labsquedaserealizaen<Todas>).

Textodebsqueda.Enestecuadro,introduciremoslaexpresinsobrelacualbuscamosinformacin(porejemplo,lapropiedadName,el
objetoWorkbook,etc.)

Resultadosdelabsqueda.Aparecer,unavezseleccionadaunabibliotecayuntextodebsqueda,unalistadebibliotecasmenores,
clasesomiembrosquecumplenelcriteriodebsqueda.Losresultadossedividenentresapartados.

Biblioteca.Bibliotecadondesehaencontradoinformacin.

Clase.Clasesobrelaquesehaencontradoinformacin.

Miembro.Miembroquecumpleelcriteriodebsquedaespecificado.

Clases.Semuestrantodoslosobjetosqueexistenenunabibliotecadeterminada.

Listademiembros.ApareceunalistaconlasPropiedades,mtodosyenumeracionesqueadmiteelelementoseleccionadodelalista
Clases.

Detalles.SenosmuestrainformacindetalladasobreelmiembroseleccionadodelaListademiembros.
EnelapartadoListademiembroshemosnombradounconceptoqueconvieneexplicarantesdepasaralaescrituradeprogramasenVisual
Basic.Setratadelasenumeraciones.

Una enumeracin es una lista finita de constantes enteras exclusivas, con un valor dentro de un rango predeterminado por Office. Esas
constantessirvenparadefinirlaspropiedadesdelosobjetos,sintenerquerecordarlosvaloresconcretos.Porejemplo,eltipodeletranegrita
podra estar indicado por Word, como la constante de enumeracin wdBold, que correspondera a un cierto valor entero que no hemos de
recordar.Deestemodopodramosponerunprrafodeldocumentoennegritaescribiendo:Document.Section.font=wdBold

Lasconstantesdeenumeracincomienzacondistintosprefijosdependiendodelaaplicacinparalacualseantiles.As,enWordcomienzan
porwd,mientrasqueenAccesscomienzanporacy en Excelporxl. Las constantes generales de Visual Basic comienzan por vb, y las que
puedenserutilizadasencualquieraplicacindeOffice,pormso.

5 ELMDULODECDIGO

EnlaventanadeMdulodecdigoescribiremoslosprogramasomdulosnecesarios.Estosmdulospodrnserdedostipos:

Sub:procedimientoorutinaquenodevuelveningnvalorlaslneasdecdigoqueincluyerealizanalgunaaccin,peronodevuelveno
retornanningnvalorelcdigodeunSubvaincluidoentreestasdoslneas:
Sub

...
http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 12/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)
EndSub
Function:adiferenciadelosmdulosSub,lasfuncionesrealizanunciertoclculoyretornanodevuelvenunvalorquepuedeserutilizado
enotrosmduloselcdigodeunafuncinestincluidoentreestasdoslneas:
Function

...

EndFunction

En el Mdulo de Cdigo, indicaremos, en la parte superior, con que objeto vamos a trabajar y cul va a ser el procedimiento o evento a
definir.Enelreadetrabajodelaventana,escribiremoslaslneasdecdigoquedefinirnelprocedimiento.

ParahacerquelasdistintasventanasdelEditordeVBAaparezcanodesaparezcan,tenemoselmenVer.

5.1 AYUDASALAHORADEESCRIBIRELCDIGO

Llegadoelmomentodeescribirunmdulodecdigo,disponemosdeunaseriedeayudasqueserndegranutilidad.Estasayudassepueden
activarodesactivaravoluntadmediantelaopcindemenHerramientasOpcionesEditordelEditordeVBA.

Lasayudasdelasquedisponemossonlassiguientes:

Lista de miembros automtica. Al escribir tras el nombre de un objeto vlido un punto, aparecer una lista con los miembros que
podemosaplicaralobjeto.

Informacinrpidaautomtica.Seutilizaparaconocerlosparmetrosdeunmtodoentendiendoquecadamtodoesunafuncincon
una serie de argumentos o parmetros, tras escribir el nombre del mismo y pulsar la barra espaciadora, aparecer la lista de sus
argumentos(losargumentosopcionalesaparecenentrecorchetes:[]).

Sugerencia de datos automtica. Como se ver a continuacin, en VBA se pueden utilizar variables y constantes al definir estos

http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 13/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

elementos,acadaunodeellosselehadeasignaruntipodedatonoesnecesariomemorizarlos,sinoque,cuandoseanecesariodeclarar
unavariableoconstante,aparecerunalistaconlostiposdedatosdisponiblesenVBA.

6 TIPOSDEDATOS

Losmdulosdecdigoconstan,fundamentalmente,detrespartes:

Declaracionesdeconstantes.Unaconstanteesinternamenteunazonadememoriadondeelordenadoralmacenadeformafijaundato,
mientrasdurelaejecucindelmdulooprogramaquelacontiene.

Declaracionesdevariables.Unavariablees,internamente,unazonadememoriaparaelalmacenamientotemporaldedatosqueseutilizan
enlosprogramas.

Instrucciones.Realizanlasaccionespropiamentedichas.
Respectoalasconstantesyvariables,stashandeposeerundeterminadotipo,esdecir,cadaunapuedealmacenardatosqueseencuentranen
determinados intervalos de valores. Los tipos de datos ms usuales en VBAy los intervalos de valores correspondientes se muestran en esta
tabla:


TipodeDatosmsusuales Intervalodevalores

Byte 0a255

Integer(Entero) 32.768a32.767

Long(Enterolargo) 2109a2109
Single(Realencomaflotantedeprecisin Negativos:3,41038a1,41045
sencilla)
Positivos:1,41045a3,41038
Double(Realencomaflotantededoble Negativos:1,810308a4,910324
precisin)
Positivos:4,910324a1,810308

Boolean(BooleanooLgico) True(Verdad)oFalse(Falso)

Object(Objeto) ObjetodeOffice.

String(Cadenadecaracteres) De1a65.400caracteres

Variant Cualquiervalor

6.1 DECLARACINDEVARIABLESYCONSTANTES

Pordeclaracindevariablesentendemoslaindicacinalmdulooprogramadequesevaahacerusodetalesvariables.EnVBA,noes
necesario declarar variables, es decir, podemos ir aadiendo variables en el cdigo segn sea necesario sin embargo, s que resulta muy
convenienteladeclaracinporunaseriederazones:

Facilitalalegilibilidadycomprensindelcdigo.

Ayudaadetectarerroresenlaescrituradelcdigo.

Aumentalavelocidaddeejecucindelosprogramas.

Sinosedeclaraunavariableoconstante,sesuponequeesdetipoVariant,locualconllevaunaseriedeinconvenientes:
http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 14/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

Sepuedellegaradesaprovecharmuchamemoriaparadatossencillos(enteros,byte...).Mientrasqueunavariabledetipobyteutilizaslo8
celdillasdememoria,unavariablevariantutiliza128celdillas.

Laejecucindelosprogramasesmslenta,puesnosesabedeantemanoeldatoquecontendrunavariable.

6.2 DECLARACINDEVARIABLES

ExisteenVBAdosformasdedeclararlasvariables:

Declaracinimplcita.Estetiponosepuedeconsiderarformalmenteunadeclaracin.Consisteenutilizarlavariabledirectamente,sin
indicarsutipo.Portanto,alnoindicaruntipoconcreto,sesuponetipoVariant.

Ejemplos:

vMiVariable=Cadenadeprueba
vAprobados=12



Declaracinexplcita.Seindicalaexistenciadeunavariableantesdesuuso,indicandoademseltipodedatosqueposee.Utilizaremos

paraellolaspalabDimyAs.Sinoseindicaningntipodedatos,sesuponequelavariableesdetipoVariant.
Ejemplos:

DimvUnaVariable
DimsgNotaMediaAsSingle
DimsTextoAsString
DimvMalaVariableAsVariant


EltipoVariantsertilcuandonosepamosdeantemanoquesloquesevaaalmacenarenlavariable.Porejemplo,siesperamosqueel
usuarioescribaelvalordeunavariablesinsabersivaaseruntextoounnmero,podremosutilizarestetipodedatosconventaja.

6.3 REGLASPARAPONERNOMBRESALASVARIABLES

Alahoradeponernombrealasvariables,existenunasreglas.Unassonobligatorias,yotrasno,aunquessonrecomendables:

Obligatorias.
Elnombrehadecomenzarporuncarcteralfabtico.

Nopuedetenermsde255caracteres.

Nopuedeconteneroperadoresmatemticosnisignosdepuntuacin.

Nopuedecorresponderaunapalabraclave.

Recomendable:Sepuedenutilizarprefijospararecordarfcilmenteeltipodedatosdelasvariables.
Boolean:b Single:sg String:st

Byte:by Variant:v Integer:i

http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 15/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

Long: Object:o Double:d

6.4 DECLARACINDECONSTANTES

Enelcasodelasconstantes,sloesposibleladeclaracinexplcita,esdecir,seindicalaexistenciadelaconstantesiempreantesdesuuso.
Paraello,utilizamoslaspalabrasreservadasConstyAs.Sinoseindicauntipodedatos,sesuponequelaconstanteesdetipoVariant.

Puestoqueunaconstanterepresentaunvalorquenovara,enlapropiadeclaracinsehadeindicarculesesevalor.

6.5 REGLASPARAPONERNOMBRESALASCONSTANTES

Lanormativaqueseutilizaparaponernombrealasconstanteseslamismaqueenelcasodelasvariables,tantoenelapartadoobligatorio
comoenelrecomendable.

Ejemplos:
ConstvUnaVariableAsVariant=6.5

ConstsCiudadAsString=SantaCruzdeTenerife
ConstvNumeroPi=3.141592


ConstbyNumeroAsByte=8


6.6 ALCANCEOMBITODELASVARIABLES

Unavezvistoelmododedeclaracinyusodelasvariablesyconstantes,esprecisodefinirloquesedenominaalcanceombito:setratadel
campodeactuacinodisponibilidaddeunavariable,constanteoprocedimiento.

Veremos a continuacin que, dependiendo del nivel en el cual fue declarada una variable o constante, stas podrn utilizarse en mayor o
menormedida.Existentresnivelesdedeclaracin:

Niveldeprocedimiento.
Lasvariablesdeestenivel,alasquetambinsellamalocales,sedeclaranalprincipiodeunprocedimiento(SuboFunction).Dichas
variablesoconstantessloestarndisponiblesdentrodedichoprocedimiento.

Niveldemdulo.

LasvariablessedeclaranenlaseccindedeclaracionesdelaventanadeMdulodeCdigo(esdecir,enlapartesuperiordedicha
ventanayantesdeescribircualquierprocedimiento).Talesvariablesoconstantesestarndisponiblesparatodoslosprocedimientosquese
incluyanenelMdulodecdigo.

NivelPblico.
Lasvariablessedeclaran,aligualquelasvariablesdeNiveldemdulo,enlaseccindedeclaraciones(partesuperiordelMdulode
cdigo).Sinembargo,acadadeclaracinseanteponelapalabrareservadaPublicenlugardeDim.Comoresultado,lasvariablespblicas
oglobalesestarndisponiblesparatodoslosprocedimientosdetodoslosmdulosdecdigodelprograma.

http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 16/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

Enlasiguientefigurasepuedenobservarejemplosdedeclaracionesenlosdistintosniveles.
Aligualqueexista,alahoradeponernombresalasvariables,larecomendacindeutilizarunprefijoparaidentificarencualquiermomento
eltipodedatosdelasmismas,tambinresultarecomendableanteponernuevosprefijosalosanteriores,conelfindesaberentodoinstantecul
eselmbitodecadaunadelasvariablesoconstantes.Estosprefijos,comosepuedeobservarenlafiguraanterior,son:

Paralasvariableslocales:ninguno.

ParalasvariablesdelNiveldemdulo:m_

ParalasvariablesdelNivelPblico(globales):g_

7 CONTROLDELORDENDEEJECUCIN

Alahoradeejecutarseunprogramaoprocedimiento,esdecir,ponerseenfuncionamiento,elordenquesesigueesnormalmentesecuencial,
esdecir,sevanrealizandolasdistintasinstruccionesenfuncindelordenenqueaparecen.

Enocasiones,sinembargo,esnecesariomodificarelordendeejecucindescritoconanterioridad,esdecir,sehademodificarelordende
ejecucindelasinstrucciones.Deestemodo,haydostiposprincipalesdesentenciasdecontroldelordendeejecucin:

Deseleccin(condicionales).

Derepeticin(bucles).

7.1 SENTENCIASDESELECCIN

Estetipodesentenciasnospermitenejecutardistintasaccionesenfuncindeciertoscriteriosocondicionesqueespecifiquemosavoluntad.
Paraestableceresascondiciones,disponemosdelosllamadosoperadoresrelacionales:

=(Igual)

<>(Distinto)

>=(Mayoroigual)

=<(Menoroigual)

>(Mayor)

<(Menor)

Acontinuacin,describiremoslasestructurasdeseleccinmsusualesenVBA,incluyendoalgnejemploilustrativo.

EstructuraIfThenEndIf(SiEntoncesFinSi)

http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 17/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

Utilizandoestaestructura,sisecumplelacondicinindicadatraslapalabraIfseejecutarelconjuntodeaccionesqueaparezcaantesde
lapalabraEndId.Veamosunejemplo:
SubCondicion1()

DimvEntradaAsVariant

vEntrada=InputBox(Escribeunnmeromayorque10)

IfvEntrada<10Then

MsgBoxError:Hasescritounnmeromenorque10

EndIf

MsgBoxElnmeroescritohasido:&vEntrada

EndSub

EstructuraIfThenElseEndIf(SiEntoncesSiNoFinSi)
SisecumplelacondicinespecificadatrasIf,serealizalaseriedeaccionescomprendidasantesdeElse.Encasocontrario,esdecirsino
secumple,serealizalaseriedeaccionescomprendidasentreElseyEndIf.Heaquunejemplo:

SubCondicion2()

DimvEntradaAsVariant

vEntrada=InputBox(Escribeunnmeromayorque10)

IfvEntrada<10Then

MsgBoxError:Hasescritounnmeromenorque10

Else

MsgBoxElnmeroescritohasido:&vEntrada

EndIf

EndSub

EstructuraIfThenElseIfEndIf(SiEntoncesSiNo,SiFinSi)
Estaestructuranospermiteevaluarmsdeunacondicindentrodeunmismobloquedeseleccin.CadainstruccinElseIf(podemos
tener tantos como necesitemos) representa una nueva condicin. Tambin se puede incluir como ltima condicin la palabra Elseque,de
nuevo,indicarloquesehadehacerencasodequelaltimacondicinqueseindiqueseafalsa.Observmosloenelsiguienteejemplo:
SubCondicion3()
DimvEntradaAsVariant

vEntrada=InputBox(Escribeunnmeromayorque10)

IfvEntrada<10Then

MsgBoxError:Hasescritounnmeromenorque10

ElseIfvEntrada=10Then

MsgBoxError:Hasescritoelnmero10

Else

http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 18/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

MsgBoxElnmeroescritohasido:&vEntrada

EndIf
EndSub

EstructuraSelectCaseCaseIsEndSelect(SeleccionarCaso)
Estaestructuraesmuchomsflexiblequelasanteriores.Permitemltiplesselecciones,inclusoentreunaseriedevaloresnoexclusivas.
CadainstruccinCaserepresentaunaposiblecondicin,mientrasqueconCaseElseseindicalaaccinarealizarsisedacualquierotrocaso
distintodelosindicadosconanterioridad.Elsiguienteejemploilustradeformabastanteclaralaformadeutilizarestaestructura:
SubSeleccionarCadaCaso()
DimiEntradaAsInteger
iEntrada=InputBox(Pontudato)
SelectCaseiEntrada

Case1,3,5,7,9
MsgBoxEsunimparmenorque10
Case9,10
MsgBoxEselnmero9el10

CaseIs>10
MsgBoxEsunnmeromayorque10

CaseElse

MsgBoxQunmerotanextrao...!
EndSelect

EndSub

7.2 SENTENCIASDEREPETICIN(BUCLES)

Lassentenciasderepeticin,tambindenominadasbucles,permitenrealizarunamismaseriedeaccionesvariasveces.Resultaobvioque
habr que especificar alguna condicin para que las acciones vuelvan a ejecutarse (condicin de continuacin) o bien para que contine la
ejecucin en la accin posterior (condicin de terminacin) en caso de que esto no se indique claramente, podra ocurrir que tal serie de
accionesseejecutaseinfinitamente,locualsedenominabucleinfinito.

Existencuatrotiposfundamentalesdesentenciasderepeticinobucles,quesedetallanacontinuacin:

EstructuraDoLoopUntil(HacerVolverainiciarbucleHasta)
ConestaestructurahacemosqueseejecutenlasinstruccionesincluidasentreDoyLoophastaquesecumplaunaciertacondicinindicada
traslapalabraUntil.Heaquunejemploilustrativo:
SubBucle1()
DimiNumeroAsInteger

Do

http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 19/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

iNumero=InputBox(Escribeunnmero1paraacabar)
MsgBoxHasescritoelnmero&iNumero
LoopUntiliNumero=1

EndSub

EstructuraDoLoopWhile(HacerVolverainiciarbucleMientras)
Utilizandoestaestructura,seejecutanlasinstruccionesincluidasentreDoyLoopmientrassecumplaunaciertacondicinindicadatrasla
palabra While. La condicin ya no es de terminacin del bucle, sino de continuacin en el mismo. En el siguiente ejemplo podemos
observarlo:
SubBucle2()

DimiNumeroAsInteger
Do

iNumero=InputBox(Escribeunnmero1paraacabar)
MsgBoxHasescritoelnmero&iNumero
LoopWhileiNumero<>1
EndSub

EstructuraWhileWend(MientrasFinMientras)

SetratadeunaestructuramuyparecidaalbucleDoLoopWhile.Ladiferenciaradicaenquelacondicindecontinuacinenelbuclese
evalaalprincipiodelmismo.Portanto,tambindifierenenelnmeromnimodeiteracionesquesevanarealizar.Veamoselsiguiente
ejemplo:
SubBucle3()

DimiNumeroAsInteger
WhileiNumero<>1
iNumero=InputBox(Escribeunnmero1paraacabar)

MsgBoxHasescritoelnmero&iNumero
Wend
EndSub

EstructuraForNext(ParaSiguiente)
Representalainstruccinderepeticinmspotenteyflexible.Conella,seconsiguerepetirlasaccionesincluidasentrelaspalabrasFory
Next.SeincluirenestaestructuraunavariabledetipoIntegerquesevaincrementandodeformaautomticadichavariabletendrunvalor
inicialyotrofinalenlaprimeraiteracin,lavariabletomaelvalorinicial,mientrasqueenlassiguientes,seincrementa,automticamente
comoyasehaindicado,elvalordedichavariable.Losincrementospuedensernegativososuperioresalaunidad(paraindicarlo,seutilizar
lapalabrareservadaStep)enlaltimaiteracin,lavariabletomaelvalorfinal.
SubBucleFor()
DimiBucleAsInteger

http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 20/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

ForiBucle=1To5
MsgBoxElvalordelavariabledebuclees&iBucle
Next

MsgBoxElvalorfinaldelavariabledebuclees&iBucle
EndSub

Hemosdeaadiralgunasobservacionesconrespectoalasdistintasestructurasderepeticionexplicadasanteriormente:

Enciertoscasos,puederesultartil,desdeelmismointeriordeunbucle,indicarunacondicinprematuradeterminacinestoserealiza
utilizandolainstruccionesExitDo(paralosbuclesDoLoop)oExitFor(paralosbuclesForNext).

LosbuclesDoLooppuedenincluirlascondicionesUntiloWhiletraslapalabraDo,ynotrasLoop.Enesecaso,lacondicinseevala
porprimeravezantesdeentrarenelbucle(enelcasodeLoopWhile,elfuncionamientosera,portanto,anlogoalbucleWhileWend).

Enocasiones,lavariableenteraqueseutilizaenunbucleForNextpuedesersustituidaporotraexpresinmscompleja.Estoseutiliza
normalmentepararecorrerlosdistintosobjetosqueformanpartedeotroobjetomayorodeunacoleccin.Paraobtenerestefuncionamiento,
sehandeutilizarlaspalabrasreservadasForEachIn(Paracadaen).Observemosesteejemplo:
SubParrafosDeWord()
DimoParrafoWordAsObject
ForEachoParrafoWordInActiveDocument.Range.Paragraphs
MsgBoxoParrafoWord
NextoParrafoWord
EndSub

8 DEPURACINDELCDIGO

Pordepuracindelcdigoentendemoslalocalizacindelosproblemascontenidosenlalgicadelmismo,esdecir,tantoenlosvaloresque
lasvariablesvanadquiriendocomoenlasdistintasaccionesquesevanejecutando.

A continuacin, se estudiarn distintas herramientas para depurar cualquier programa o procedimiento, ampliando la informacin ya
facilitadasobrealgunasdelasventanasquepuedenaparecerenelentornodelEditordeVisualBasic.Ahorabien,recordemosqueEnAccess
sloexistenlasventanasLocaleseInspeccin.

8.1 PUNTOSDEINTERRUPCIN(BREAKPOINTS)

Enocasiones,puedeinteresarponerenejecucinunprogramaeinterrumpirloenunalneaespecfica.Estoesposiblemediantelosllamados
puntos de interrupcin (breakpoints), que se adjuntan a la lnea especfica en la cual se desea detener la ejecucin. De este modo, cuando el
cursodeejecucindelprogramalleguealalnea,stesedetendr,esdecir,lalneaconpuntodeinterrupcinquedarpendienteysinejecutar
enesemomento,laaplicacindeOfficedondesehacreadoelmdulodeModoEjecucinaModoInterrupcin.

Traslainterrupcin,sepodrlassiguientesacciones:

evaluarlasvariablesqueestnsiendoutilizadas

verelcursoexactodeejecucindelcdigo,esdecir,lasecuenciadeaccionesqueserealizan

http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 21/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

8.1.1INSERCINDEPUNTOSDEINTERRUPCINENELCDIGO

Podemosinsertarpuntosdeinterrupcinenunadeterminadalneadetresformasdistintas:

situarelcursorsobrelalneadeseadaypulsarF9

picarenDepuracinAlternarpuntodeinterrupcin

picarenlabarraqueapareceenlaparteizquierdadelaventanadeMdulodeCdigo.
El resultado obtenido tras alguno de los pasos anteriores es la aparicin de un punto en la barra izquierda de la ventana del Mdulo de
Cdigo,juntoalalneadondesedesedetenerlainterrupcin,lacualapareceresaltadaencolorpardo.Estosepuedeobservarenlafigura
siguiente:

8.1.2ELIMINARPUNTOSDEINTERRUPCIN

Paraeliminarelpuntodeinterrupcincolocadoenunalnea,podemosescogeralgunodelospasossiguientes:

PulsarF9trasponerelcursorenlalneamarcada.

PicarenDepuracinAlternarpuntodeinterrupcintrasponerelcursorenlalneamarcada.

Pulsarenelpuntodeinsercinquehaaparecidoenlabarraizquierdajuntoalalnea.

PulsarenDepuracinBorrartodoslospuntosdeinterrupcinestoeliminarcualquierpuntodeinsercindelcdigo.

8.1.3MODOINTERRUPCIN

http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 22/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

UnavezquehemosentradoenelModoInterrupcin,yconelprogramadetenido,aparecesealadalalneaporlacualhaquedadointerrumpido,
comovemosenlasiguientefigura:

Apartirdeesemomento,podremosrealizardistintasacciones:

inspeccionarlosvaloresdelasvariables

seguirelcursodelprogramapasoapaso(esdecir,lneaalnea)medianteF8lalneaquesevayaaejecutarencadamomentoaparecer
sealadaporlaflechadelaizquierda

seguirconlaejecucinnormaldelprogramamedianteF5

detenerlaejecucindelprogramamedianteEjecutarRestableceroelbotncorrespondientedelabarradeherramientas

8.1.4CUADRODESUGERENCIADEDATOS

Este cuadro de informacin se pondr en funcionamiento slo cuando entremos en Modo Interrupcin (para activarlo o desactivarlo,
recurriremosaHerramientasOpcionesEditor).

Elfuncionamientodelcuadroeselsiguiente:alcolocarelpunteroderatnsobrealgunavariableopropiedad,apareceenunpequeorecuadro
suvalorenelmomentoactual,esdecir,enelinstanteenquelaejecucinestdetenida.Vemosloenlafigurasiguiente:

http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 23/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

7.1.5.AADIRVARIABLESALAVENTANAINSPECCIN

EnlaventanaInspeccin,delacualyasehablanteriormente,sepuedenestudiarvariableselvalordecadavariablequeaparezcaenesta
ventanaseactualizarautomticamente,segnavancelaejecucindelprograma(paraactivarodesactivarestaventana,podemosseleccionar
VerVentanaInspeccin).

ParaaadirunavariablequesedeseaestudiarenlaventanaInspeccin,realizaremosestasecuenciadeoperaciones:

picardosvecessobrelavariable,obienseleccionarlaarrastrandoconelratn

arrastrarlavariableseleccionadaalaventanaInspeccin(opicarenDepuracinAgregarInspeccin).

Alrealizarestasoperaciones,porejemplo,sobrelavariableiCuantasPalabras,podramosobteneralgosemejantealasiguientefigura:

SeobservaqueexistencuatrocolumnasocamposenlaventanaInspeccin,demodoqueelsignificadodecadaunodeelloseselsiguiente:

Expresin.Variableocombinacindelasmismasquesedeseainspeccionar.

Valor. Valor de Expresin en el momento actual en ocasiones, tendremos como valor <Fuera de contexto> (es decir, variable no
utilizada).

Tipo.Tipodedatosdelavariableoexpresinenocasiones,tendremoselvalorEmpty(esdecir,variablenodeclarada).

Contexto.mbitodelasvariablesnormalmente,semostrarelMduloyProcedimientodondesehadeclaradolavariable.

7.1.6.UTILIZACINDELAVENTANALOCALESPARALADEPURACIN

La estructura y el contenido de la ventana Locales son muy similares a los de la ventana Inspeccin (para activar la ventana Locales,
seleccionaremosVerVentanaLocales).Sinembargo,existenalgunasdiferenciasnotables:

noaparecelacolumnaContexto,questenamosenlaventanaInspeccin

aparecenlosvaloresdetodaslasvariablesdelprocedimientoactual,ynoslodelasqueseexplcitamenteseindiquen

habrqueejecutarelprocedimientoparaobservarlasvariables,esdecir,antesdelaejecucinnoapareceningunadeellas

http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 24/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

ElaspectodelaventanaInspeccin,enunmomentodado,podraserelquesemuestraelafigurasiguienteelsigno+indicaquealpulsarlose
puedenverlosvaloresdetodaslasvariablesopropiedadescontenidasenelobjetoqueapareceasuderecha.

7.1.7.UTILIZACINDELAVENTANAINMEDIATOPARALADEPURACIN

LaventanaInmediatotienedosusosprincipales:

imprimirelvalordeunaexpresin,constanteovariabledeterminadaparaello,seescribirlainstruccinDebug.Print,seguidadela
variableaimprimir,enlaventanadelMdulodecdigo.

ejecutarunalneadecdigo,obteniendoelresultadodeformainmediata.

9 COMUNICACINENTREPROCEDIMIENTOSY

FUNCIONES
EnlosdistintosmdulosdeVisualBasicquesecreen,unosprocedimientospuedeninvocaraotros,esdecir,puedenhacerreferenciaaotros
procedimientosSuboFunction,demodoqueseejecutarnlasaccionesquecontengaelprocedimientoinvocado.

Pordefecto,losprocedimientossedeclarananivelPublic,esdecir,quepodrnestarenlamismaventanademduloqueelprocedimiento
llamadoroenotradistinta.

Pararealizarunallamadaaunprocedimiento,simplementeseindicasunombrecomounainstruccinms.Encasodequeelprocedimientosea
unaFunction,sepuedetomarcomosegundomiembrodeunaasignacin.

Veamosenunejemploelfuncionamientodelasllamadasaprocedimientos.

http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 25/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

FunctionsgAreaCircunferencia(ByValsgArgRadioAsSingle)AsSingle

sgAreaCircunferencia=3.14159*sgArgRadio^2

EndFunction

SubEscribirResultado(ByValsgArgumentoAreaAsSingle)

9.1.1.1.1.1.1MsgBox"Elreadelacircunferenciaes"&sgArgumentoArea

9.1.1.1.1.1.2EndSub

SubProcedimientoPrincipal()

DimsgRadioAsSingle

DimsgAreaAsSingle

sgRadio=InputBox("Escribeelradiodelacircunferencia")

sgArea=sgAreaCircunferencia(sgRadio)

EscribirResultado(sgArea)

9.1.1.1.1.2EndSub

10 OBJETOSDEEXCEL

PodemosveracontinuacinunresumendelajerarquadelosobjetosmsimportantesdelosquedisponemosenExcel.Porsupuesto,hay
muchosotros,pero,ademsderesultarprcticamenteimposibledominarlostodos,convieneutilizarnicamenteciertosobjetosquenos
proporcionantodalafuncionalidadquenecesitamosalahoradeescribirnuestrosmdulosVBA.

http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 26/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

Estudiemosacontinuacincadaunodelosobjetos/colecciones:

10.1 OBJETOAPPLICATION

EsteobjetorepresentalapropiaaplicacindeOfficeenlaqueestemostrabajando.Portanto,vaaexistirencualquierotraaplicacin(Word,
Access).

Eselobjetodenivelmsaltoy,engeneral,sepodromitirsuespecificacinenelcdigo.Veamosunejemplo:

SubAcabar()SubAcabar()

Application.QuitQuit

EndSubEndSub

9.2.COLECCINWINDOW(WINDOWS).

EstacoleccindeobjetosrepresentatodaslasventanasquehayabiertasenunmomentodadoenExcel.Observemosalgunosejemplos:

SubContar()

MsgBoxApplication.Windows.Count

EndSub

SubCerrar()

Application.Windows(3).Close

EndSub

9.3.COLECCINWORKBOOK(WORKBOOKS)

Esta coleccin representa el conjunto de libros abiertos en un momento dado en Excel. Veamos algunos mtodos tiles relacionados con
estosobjetos:

http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 27/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

Open.Abreunlibro,indicandosunombrey,opcionalmente,suubicacin.Observemosunejemplo:

SubAbrirLibro()

DimoMilibroAsObject

SetoMilibro=Workbooks.Open(filename:=C:\AIA\Notas.xls)

EndSub

Activate.Activaellibroqueseleindiquedelosqueestnabiertoslaespecificacindellibrosepodrhacerporsunombreoporsu
ndicedeordendeapertura(antigedad).Veamosalgunosejemplos:

SubActivandoPorNombre()

Workbooks("Aleatorios.xls").Activate

EndSub

SubActivandoPorOrden()

Workbooks(3).Activate

EndSub

Add.Creaunlibronuevoenlaaplicacin,enprincipiosinnombre.Veamosunejemplo:

SubAadirLibro()

DimoMilibroAsObject

SetoMiLibro=Workbooks.Add

EndSub

SaveAs.Almacenaunlibroconelnombrequeleindiquemos.Observemoselejemplo:

SubAadirGuardar()

DimoMiLibroAsObject

SetoMiLibro=WorkBooks.Add

oMiLibro.ActiveSheet.Range(A1:A100).Value==rand()*20
http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 28/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

oMiLibro.SaveAsfilename:=C:\Pruebas\Aleatorios.xls

EndSub

Close.Cierraunlibro,conopcinaguardarloscambios.Obsrveseelejemplo:

SubCerrarLibroGuardar()

DimoMilibroAsObject

SetoMilibro=Workbooks.Open(FileName:=C:\AIA\Notas.xls)

oMiLibro.ActiveSheet.Range(L3).Value=9.5

oMiLibro.Closesavechanges:=True

EndSub

Existen dos mtodos relacionados con la apertura y cierre de libros estos mtodos son Application.GetOpenFilename y
Application.GetSaveAsFilename.SepuedenutilizarencualquieraplicacindeOffice.AbrenloscuadrosdedilogodeAbriryGuardarcomo,
respectivamente,peronorealizantalesacciones,sinoquedevuelvenunacadenadecaracteres,conelnombreindicadoporelusuario,lacualha
deusarseconelmtodoSave.

10.2 PseudoobjetoActiveWorkbook.

MedianteelpseudoobjetoActiveWorkbookhacemosreferenciaallibroqueestactivoenunmomentodadoenExcel.Comorealmentese
tratadeunobjetoWorkbook,alpseudoobjetoActiveWorkbookselepuedenaplicarlosmismosmtodosqueaaquel.

Existe una diferencia obvia entre el objeto Workbook y el pseudoobjeto ActiveWorkbook, y es que mientras que se pueden tener varios
objetosWorkbookenunmomentodadoenExcel,slotendremosunobjetoActiveWorkbook.

10.3 ColeccinWorkSheet(Worksheets)

La coleccin de objetos Worksheet representa el conjunto de hojas de clculo existentes en un libro determinado. Veamos tres ejemplos
sencillos:

SubContarHojas()

MsgBoxActiveWorkbook.Worksheets.Count

EndSub

SubVerValor()

http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 29/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

MsgBoxWorksheets(1).Range(A1).Value

EndSub

SubVerValor2()

MsgBoxWorksheets(Hoja2).Range(A1).Value

EndSub

Estudiemosacontinuacinalgunosmtodosypropiedadestilesaplicablesaestosobjetos:

Cells.Permitehacerreferenciaaunaceldaconcretadelahoja,comoseobservaenelejemplo:

SubVerValorCelda()

MsgBoxWorksheets(1).Cells(3,2).Value

EndSub

UsedRange.Nos permite hacer referencia al conjunto de celdas no vacas que existen en la hoja de clculo, es decir, el rea
rectangulardelahojadeclculoqueenglobaatodasycadaunadelasceldasenlascualesexistealgnvalor.Observemosesteejemplo,
enelquesuponemosquelahojadeclculoHoja3slocontieneestosvalores,ycuyoresultadosera6.3.

A B C
1

2 3.5 6.3
3 2
4 2.9 7.25

SubVerValor3()

MsgBoxWorksheets(Hoja3).UsedRange.Cells(1,3).Value

EndSub

Activate.Activalaceldaqueseleindique,mediantedosformasdistintasdeparametrizacin,segnvemosenestosejemplos:

SubActivarHojaPorIndice()

ActiveWorkBook.Worksheets(2).Activate

http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 30/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

EndSub

SubActivarHojaPorNombre()

ActiveWorkBook.Worksheets(Hoja3).Activate

EndSub

Add.Permiteaadirunanuevahojadeclculoaunlibro,justodelantedelahojaactiva.

SubAadirHoja()

Workbooks(3).Activate

ActiveWorkbook.Worksheets.Add

EndSub

Delete.Eliminalahojaqueseindiquedeunlibro.Veamosunejemplo:

SubEliminarHoja()

Workbooks(3).Activate

ActiveWorkbook.Worksheets(Hoja4).Delete

EndSub

Printout.Imprimeunahojadeclculo,comosepuedeobservarenesteejemplo:

SubAadirHoja()

Workbooks(NotasAIA).Activate

ActiveWorkbook.Worksheets(Hoja1).Printout

EndSub

Copy.Creaunlibronuevoycopiaenllahojaindicadaelnuevolibroslocontendresahoja.

SubCopiarHoja()

Workbooks(NotasAIA).Activate

ActiveWorkbook.Worksheets(Hoja1).Copy

EndSub

http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 31/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

10.4 ObjetoRange.

ElobjetoRangerepresentaunconjuntodeceldasdentrodeunlibroesteconjuntonormalmenteserunrearectangular,aunquetambin
puedehacerreferenciaaunasolocelda,mltiplesreasrectangulares,etc.Veamosalgunosejemplossencillos:

SubPonerUnValor()

DimNuevaHojaAsObject

SetNuevaHoja=Worksheets.Add

NuevaHoja.Range(C3).Value=6

EndSub

SubVariasCeldas

ActiveWorkbook.Worksheets(2).Range(A1:C3)=7

EndSub

Acontinuacin,semuestranalgunosmtodosypropiedadestilesdeesteobjeto:

ClearContents.BorraelcontenidodelasceldasdelobjetoRangeespecificado.

SubBorrar()

Range(A1,E3).ClearContents

EndSub

Cells.Hacereferenciaaunaceldaconcretadentrodelrango,indicandolafilaylacolumna.Elsiguienteejemploasignaelvalor1ala
celdaC5delahojaHoja3dellibroactivo.

SubValorEnCelda()

Worksheets(Hoja3).Range(B3:E7)Cells(3,2)=1

EndSub

CurrentRegion.Hacereferenciaaunconjuntodeceldaslimitadoporceldasvacasolosbordesdelahoja.Obsrveseladiferenciacon

elmtodoUsedRangedelobjetoWorksheet.Engeneral,elmtodoCurrentRegionnoenglobartodaslasceldasnovacas,salvoenel
casoenqueentreellasnohayaningunafilaocolumnavaca.Veamosacontinuacindosejemplosdeutilizacindeestemtodoenel
segundodeellos,contamoslosnmerosnegativosqueexistenenlacolumnaA,sinsaberenqufilahemosdeacabardeinspeccionar.


http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 32/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

SubBorrarRangoDesconocido()

Worksheets(2).Range("A1").CurrentRegion.ClearContents

EndSub

SubContarNegativos()

DimoCeldaAsObject

DimiNegativoAsInteger

ForEachoCeldaInWorksheets(2).Range("A1").CurrentRegion

IfoCelda.Value<0Then

iNegativo=iNegativo+1

EndIf

Next

MsgBoxEltotaldenegativoses&iNegativo

EndSub

Columns.Hacereferenciaaunacolumnadeunrango.ElsiguienteejemplomodificaelcontenidodetodaslasceldasdelacolumnaCque

pertenecenalrango.

SubValorEnColumna()

Worksheets(2).Range("B2:D4").Columns(B).Value==rand()

EndSub

Rows.Hacereferenciaaunadeterminadafiladeunrango.Elsiguienteejemplomodificaelcontenidodetodaslasceldasdelasfilas4y5

quepertenecenalrango.

SubValorEnFila()

Worksheets(Hoja1).Range("C4:E6").Rows(1:2).Value=0.5

EndSub

Offset.Representaundesplazamientodefilaycolumnarespectoaunacelda.Observmosloenesteejemplo,queasignadistintostextosa
lasceldasdelacolumnaB,dependiendodelvalordelaceldacontiguadelacolumnaA.

SubExamenDeColumna()
http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 33/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

DimoCeldaAsObject

ForeachoCeldaInWorksheets(1).Range(A1:A30).Cells

IfIsNumeric(oCelda.Value)Then

oCelda.Offset(0,1).Value=Nmero

Else

oCelda.Offset(0,1).Value=Quizseauntexto...

EndIf

Next

EndSub

10.5 ObjetoFont.

Representaeltipodeletrautilizadoparalosvaloresdelasceldasdeunrango.Estudiemosacontinuacinalgunaspropiedadestilesdeeste
objeto.

SubPonerNegrita()

Range("A1:B5").Font.Bold=True

EndSub

SubCambiarTipoLetra()

UsedRange.Font.Name=TimesNewRoman

EndSub

SubQuitarCursiva()

Worksheets(Hoja3).Range(A1:B5).Font.Italic=False

EndSub

SubColor()

Worksheets(2).Range(C2).Font.Color=50000

EndSub

http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 34/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

10.6 ColeccinDocumentProperty(DocumentProperties).

Esta coleccin representa las propiedades o caractersticas de un libro (Ttulo, Autor, Aplicacin, Fecha de ltima modificacin, etc.).
Veamosestosdosejemplosenelprimero,simplementemostramoselnombredecadapropiedadysuvalorenelsegundo,asignamosunvalor
alapropiedadcuyonombreesAuthor:

SubPropiedadesDeLibro()

OPropAsObject

ForEachoPropInActiveWorkbook.BuiltinDocumentProperties

MsgBoxoProp.Name&=&oProp.Value

Next

EndSub

SubPonerValor()

DimsNombreAsString

sNombre=InputBox(Escribeelnombredelautordellibro)

ActiveWorkbook.BuiltinDocumentProperties("Author")=sNombre

EndSub

10.7 ColeccinShape(Shapes).

LacoleccindeobjetosShaperepresentalasformasuobjetosdedibujo/grficos.Observemosunprimerejemplosencillo:

SubContarGraficos()

MsgBoxActiveWorkbook.Worksheets(1).Shapes.Count

EndSub

Veamosacontinuacinalgunosmtodosypropiedadestilesdeestacoleccin:

Name.Cadagrficooformaposeeunnombre.Pordefecto,sereltipodeformayelndicedecreacinenordencreciente.El

siguienteejemplocambiaelnombredeunobjetodedibujo,quesetratadeunalneayfueelsegundoobjetogrficoquesecreenlahoja.

SubCambiarNombre()

Workbooks(1).Worksheets(2).Shapes(Line2).Name=Linea

EndSub

AddShape.Aadeunaformagrficaalahojadeclculo.Habrqueindicareltipodeformaysuscaractersticas,comosepuede

observarenestosejemplos:

SubAadirRectangulo()

http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 35/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

ActiveWorkbook.Worksheets(Hoja3).Shapes.AddShape_

(msoShapeRectangle,144,144,72,72)

EndSub

SubAadirNombrarTriangulo()

Workbooks(2).Worksheets(3).Shapes.AddShape_

(msoShapeIsoscelesTriangle,10,10,100,100).Name=Triangulo

EndSub

AddLine.Aadeunalneaenlahoja,indicandolospuntosinicialyfinal.

SubAadirLinea()

Workbooks(2).Worksheets(3).Shapes.AddLine0,0,100,50

EndSub

Height.Hacereferenciaalaalturadelaforma.

Width.Hacereferenciaalanchodelaforma.

ElsiguienteejemplomodificalasdimensionesdeunaformadedibujoqueexisteenlahojaHoja3,llamadoRectangulo.

SubModificarDimensiones()

WithWorkbooks(1).Worksheets(Hoja3).Shapes(Rectangulo)

.Height=50

.Width=100

EndWith

EndSub

11 OBJETOSDEWORD

Acontinuacin,seobservaungrficoresumendelajerarquadeobjetosexistentesenWord.AligualqueocurraenExcel,existenmuchos
otrosobjetos,peroresultaraprcticamenteimposibleaprenderlostodos,ademsdelhechodequealgunosdeellostienenunautilidadlimitada.

http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 36/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

11.1 ObjetoscomunesconExcel.

ElobjetoApplicationylascoleccionesWindowsyDocumentPropertiestienenelmismocomportamientoqueenExcel,comopodemosver
enelsiguienteejemplo:

SubMaximizarWord()

Application.WindowState=wdWindowStateMaximize

MsgBoxNumerodeventanas=&Application.Windows.Count

EndSub

11.2 ColeccinDocument(Documents).

EstacoleccinrepresentaelconjuntodedocumentosabiertosenunmomentodadoenWord.Estudiemosalgunosmtodosypropiedades
aplicablesaestacoleccin.

Open.Abreundocumento,indicandosunombre(yubicacin).

SubAbrirDocumento()

DimoMiDocAsObject

SetoMiDoc=Documents.Open(filename:=C:\Windows\Resumen.doc)

http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 37/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

EndSub

Activate. Activa el documento que se indique de los que estn abiertos en un momento dado. La forma de hacer referencia a los
documentosfuncionadeformaparecidaacomosehacaconloslibrosenExcel,peroalahoradereferenciarlosmedianteunndice,ste
esinversorespectoalordendeaperturadelosdocumentos.Vemosloendosejemplos:

SubActivandoPorNombre()

Documents("CartaPepe").Activate

EndSub

SubActivandoPorOrden()

Documents(3).Activate

EndSub

Add.Creaundocumentoenlaaplicacin,enprincipiosinnombre.

SubAadirDocumento()

DimoNuevoDocuAsObject

SetoNuevoDocu=Documents.Add

EndSub

SaveAs.Grabaundocumentoconelnombreindicado.

SubAadirYGuardar()

DimoMiDocuAsObject

SetoMiDocu=Documents.Add

oMiDocu.Words(1).InsertBeforetext:=PrimerasPalabras.

oMiDocu.SaveAsfilename:=C:\Alumnos\ApuntesAIA.doc

EndSub

Close.Cierraundocumento,conopcinaguardarloscambios.

SubCerrarDocumento()

http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 38/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

DimoUnDocuAsObject

SetoUnDocu=Documents.Open_(fileName:=C:\Alumnos\ApuntesAIA.doc)

oUnDocu.Words(2).InsertAftertext:=ltimaspalabras.

oUnDocu.Closesavechanges:=True

EndSub

Printout.Mandaundocumentoalaimpresora.

SubImprimirDocumento()

DimoUnDocuAsObject

SetoUnDocu=Documents.Open(fileName:=C:\Alumnos\ApuntesAIA.xls)

oUnDocu.Printout

EndSub

11.3 PseudoobjetoActiveDocument.

ElpseudoobjetoActiveDocument,querealmentesetratadeunainstanciacindelacoleccinDocuments,representaeldocumentoqueest
activoenunmomentodado.AlserunobjetoDocument,selepuedenaplicarlosmismosmtodosypropiedadesqueaaquel,comopodemos
observarenelsiguienteejemplo:

SubDocumentoActivo()

IfDocuments.Count>0Then

MsgBoxEldocumentoactivoes&ActiveDocument.Name

11.3.1.1.1Else

11.3.1.1.2MsgBoxNohaydocumentosabiertos

EndIf

EndSub

11.4 ObjetoRange.

Esteobjetorepresentaunreacontiguaenundocumento.ParadefinirunobjetodeestetipoenWord,habrqueindicarculeselcarcter
inicialyculelfinaldelrango.Elejemplosiguientedefineunrangoquecomienzaenelcarcter0,sinincluirlo,yacabaeneldcimoinclusive,

http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 39/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)
esdecir,abarcalosdiezprimeroscaracteresdeldocumento.

SubUnRango()

DimoMiRangoAsObject

SetoMiRango=Documents(1).Range(start:=0,end:=10)

11.4.1.1.1EndSub

Estudiemosalgunosmtodosypropiedadestilesdeesteobjeto:

InsertBefore.Insertaeltextoindicadodelantedelrango.

SubEscribirDelante()

DimoUnRangoAsObject

SetoUnRango=ActiveDocument.Range(start:=0,end:=0)

oUnRango.InsertBeforetext:=PrimerasPalabras

EndSub

InsertAfter.Siguiendounformatosimilaralmtodoanterior,insertauntextodetrsdelrango.

SubEscribirDetrsDelDecimo()

DimoRangoAsObject

SetoRango=ActiveDocument.Range(start:=0,end:=10)

oRango.InsertAftertext:=ltimasPalabras

EndSub

Delete.Eliminaelrangoindicado.

SubEliminarSieteCaracteres()

DimoRangoAsObject

SetoRango=ActiveDocument.Range(start:=2,end:=9)

oRango.Delete

EndSub

http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 40/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

Text.Representaeltextocontenidoenunrango.Veamosunejemplo:

SubVerSustituirTexto()

DimoRangoAsObject,sTextoAsString

SetoRango=ActiveDocument.Range(start:=0,end:=11)

sTexto=oRango.Text

IfsTexto=ViejoTextoThen

oRango.Text=NuevoTexto

EndIf

EndSub

Bold,Italic,Underline.Estaspropiedadesespecificanelestilodeletradeltextocontenidoenelrango.Tambinsepuedeutilizarla
propiedadNamedelsubobjetoFontparaseleccionareltipodeletradelrango,comoseobservaenelsiguienteejemplo:

SubDarFormatoAlTexto()

DimoRangoAsObject

oRango=ActiveDocument.Range(start:=10,end:=20)

WithoRango

.Font.Name=CenturyGothic

.Bold=False

.Italic=True

.Underline=True

EndSub

11.5 ColeccinSection(Sections).

EstacoleccinrepresentacadaunadelasdivisionesindependientesdequeconstaundocumentoenWord.Lomsusualesqueundocumento
nicamenteconstedeunaseccin,salvoenalgunoscasosexcepcionales.Observemosunejemplosencillo:

SubSecciones()

DimoUnaSeccionAsObject

MsgBoxActiveDocument.Sections.Count

SetoUnaSeccion=ActiveDocument.Sections(1)

EndSub

http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 41/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

11.6 ColeccinParagraph(Paragraphs).

Estacoleccinestformadaporcadaunodelosprrafosdecontieneundocumento.Observemosunprimerejemplo:

SubTercerParrafo()

DimoElParrafoAsObject

MsgBoxActiveDocument.Paragraphs.Count

SetoElParrafo=ActiveDocument.Paragraphs(3)

EndSub

Estudiemosacontinuacinalgunosmtodosypropiedadestilesdeestacoleccin:

Alignment.Alineaelprrafoconrespectoalapgina(izquierda,derecha,centrado,justificado).

SubCentrarParrafo()

11.6.1.1DimoUnParrafoAsObject

SetoUnParrafo=ActiveDocument.Paragraphs(1)

oUnParrafo.Alignment=wdAlignParagraphCenter

EndSub

LineSpacing.Especificaunespaciadoentrelaslneasdeunprrafo,medidoenpuntos.Adems,disponemosdelosmtodosSpace1,
Space15,Space2paraespaciadospredeterminadosbastanteusuales.

SubEspaciarParrafo()

ActiveDocument.Paragraphs(3).LineSpacing=16

EndSub

Add.Aadeunnuevoprrafo,queenprincipionosermsqueunsaltodelnea.

SubAadirParrafo()

11.6.1.2DimoParrafoAsObject

SetoParrafo=ActiveDocument.Paragraphs.Add

o.Parrafo.Space15

EndSub

Range.TransformaelprrafoenunobjetoRange.Deestemodo,alresultadoselepodrnaplicartodoslosmtodosdelobjetoRange.
HayquesealarqueestapropiedadtambinexisteparalosobjetosSection.Veamosunejemplobastantecompleto:

SubRangoParrafo()

11.6.1.3DimoParrafoAsObject

SetoParrafo=ActiveDocument.Paragraphs.Add
http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 42/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

WithoParrafo.Range

.Bold=True

.Text=Esteeselnuevoprrafo

.InsertAftertext:=yestovaacontinuacin

EndWith

EndSub

Hayquesealarquesepuedenenglobarvariosprrafosenunrango,demodoquepodremosmanejarlosconjuntamente.Enelsiguiente
ejemplo,cambiamoselestilodeletrade3prrafos:

SubRangoDeTresParrafos()

DimoRangoAsObject,oDocuAsObject

SetoDocu=Documents(CartaBanco.doc)

SetoRango=oDocu.Range(start:=oDocu.Paragraphs(2).Range.Start,_end:=oDocu.Paragraphs(4).Range.End)

WithoRango

.Bold=True

.Italic=True

EndWith

EndSub

11.7 ColeccinSentence(Sentences).

Estacoleccinrepresentacadaunadelasfrasescontenidasenundocumento.Engeneral,unobjetoSentencesepuedetratarcomounobjeto
Range,demodoqueselepodrnaplicarlosmismosmtodosypropiedades.Observemoselsiguienteejemplo:

SubFrases()

DimoUnaFraseAsObject

SetoUnaFrase=ActiveDocument.Sentences(3)

oUnaFrase.Font.Name=WideLatin

oUnaFrase.Italic=True

oUnaFrase.InsertBeforeText:=Estaeslacuartafrase.

EndSub

http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 43/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

ComoocurraconlosobjetosParagraph,sepuedenenglobarvariasfrasesenunrango.Elsiguienteejemplosubrayalasfrasessegunda,
terceraycuarta.

SubRangoFrases()

DimoRangoAsObject,oDocuAsObject

SetoDocu=Documents(2)

SetoRango=oDocu.Range(start:=oDocu.Sentences(2).Start,_

end:=oDocu.Sentences(4).End)

oRango.Underline=True

EndSub

11.8 ColeccinWord(Words).

LacoleccinWordsrepresentacadaunadelaspalabrascontenidasenundocumento.DelmismomodoquelosobjetosSentence,unobjeto
WordsepuedetratarcomounobjetoRange,aplicndolelosmismosmtodosypropiedades.

SubPalabras()

DimoPalabraAsObject

ForeachoPalabrainActiveDocument.Words

MsgBoxoPalabra

Next

EndSub

DelamismaformaqueconlosobjetosParagraphySentence,podemoshacerqueunrangoabarquevariaspalabras,comoseobservaenel
ejemplosiguiente,enelquecambiamoslapresentacindelasquinceprimerapalabrasdeldocumentoeinsertamosuntextoalprincipiodel
documento.

SubMayusculas()

DimoRangoAsObject,oDocuAsObject

SetoDocu=Documents(Resumen.doc)

SetoRango=oDocu.Range(Start:=oDocu.Words(1).Start,

End:=oDocu.Words(15).End)

WithoRango

.Case=wdUpperCase

.InsertBeforeText:=Textoanterior

.Italic=True

EndWith
http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 44/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

EndSub

12 OBJETOSDEACCESS

Acontinuacin,semuestraunresumendelajerarquadeobjetosenAccessporsupuesto,existenmuchosotrosobjetos,peronicamentenos
centraremosenlosmstiles.


DoCmd

12.1 ObjetoApplication

Este objeto representa la propia aplicacin Access, y funciona de modo parecido a como lo haca en Excel y en Word, salvo algunas
diferencias.Heaqualgunosmtodosypropiedadesaplicablesaesteobjeto:

CloseCurrentDatabase.Cierralabasededatosconlaqueestamostrabajandoveamosunejemplosencillo:

SubCerrarBaseDatos()

Application.CloseCurrentDatabase

EndSub

OpenCurrentDatabase.Abreunabasededatos,especificandosunombre(ylocalizacin),comosepuedeobservarenesteejemplo:

SubAbrirBaseDatos()

http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 45/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

Application.OpenCurrentDatabase(C:\AIA\futbol.mdb)

EndSub

12.2 ColeccinDatabase(Databases).

Estacoleccinrepresentalasbasesdedatosconlasqueestamostrabajandoenunmomentodadohayquetenerencuentalaproblemticade
Accessconrespectoalaimposibilidaddelasimultaneidaddedistintasbasesdedatos.

Comoconsecuencia,enlaprctica,estacoleccinsirveparaconsultarbasesdedatosdesdeExceloWord,mientrasqueenAccess,seutilizaen
sulugarelpseudoobjetoCurrentDB,querepresentalabasededatosactiva(nica)enunmomentodado.Vemosloenunejemplo:

SubBaseDatosActual()

DimoBdatosAsObject

SetoBdatos=Application.CurrentDb

MsgBoxLaB.D.activaes&oBDatos.Name

EndSub

12.3 ColeccinProperty(Properties).

LacoleccindeobjetosPropertieshacereferenciaalasdistintaspropiedadesdeunabasededatos(autor,fechadelaltimamodificacin,
etc.).NoexistengrandesdiferenciasencuantoalacoleccinDocumentPropertiesdeExcelodeWord.Heaquunejemplosencillo:

SubVerPropiedades()

DimoBDAsObject,oPropiAsObject

SetoBD=Application.CurrentDB

ForeachoPropiInoBD.Properties

MsgBoxPropiedad=&oPropi.Name&Valor=&oPropi.Value

Next

EndSub

12.4 ColeccinRecordset(Recorsets).

Estacoleccincontieneunconjuntoarbitrarioderegistros,procedentesdetablaoconsulta.Enelsiguienteejemploseobtienendosconjuntos
deregistros:unoprocededeunatablayelotrodeunconsulta.

http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 46/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

SubAbrirRegistrosTablaCons()

DimoRegTablaAsObject,oRegCons

SetoRegTabla=CurrentDB.OpenRecordset(Equipos)

SetoRegCons=CurrentDb.OpenRecordset(Consulta2)

MsgBoxLaTablaabiertaes&oRegTabla.Name

EndSub

Estudiemosacontinuacinalgunosmtodosypropiedadestilesdeestacoleccin:

RecordCount.ProporcionaelnmeroderegistrosquecontieneelRecordSet,comoseobservaenelsiguienteejemplo:

SubContarRegistros()

DimoRegistrosAsObject

SetoRegistros=CurrentDB.OpenRecordset(Pacientes)

MsgBoxNmerodepacientes=&oRegistros.RecordCount

EndSub

MoveFirst,MoveLast.BuscanelprimeryelltimoregistrodelRecordSet,respectivamente.Pordefecto,alabrirunatablaoconsulta,
estaremossituadosenelprimero.Veamosunejemplo:

SubRegistros()

DimoRegisAsObject

SetoRegis=CurrentDB.OpenRecordset(ConsultaPorPas)

oRegis.MoveLast

EndSub

MoveNext.Buscaelsiguienteregistrorespectodelltimoenelqueestemossituados.

EOF.IndicasihemosllegadoalfinaldelRecordset,esdecir,yanoexistenmsregistros.

12.5 ColeccinField(Fields).

LacoleccinFieldsrepresentacadaunodeloscamposqueformanpartedelosregistrosdeunRecordSetesdecir,nospermiteobtenercada
unodelosvaloresquecomponenunregistro.Veamosalgunosejemplossencillos:

SubContarCampos()
http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 47/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

DimoRegsAsObject

SetoRegs=CurrentDB.OpenRecordset(Mdicos)

MsgBoxLatablaMdicostiene&oRegs.Fields.Count&campos

EndSub

SubVerCampos()

DimoRegsAsObject,iBucleAsInteger

SetoRegs=CurrentDB.OpenRecordset(Partidos)

ForiBucle=0tooRegs.Fields.Count1

MsgBoxElnombredelcampon&iBucle&es&oRegs.Fields(iBucle).Name

Next

MsgBoxoRegs.Fields(GolesEquipoLocal).Value

EndSub

12.6 ObjetoDoCmd.

Este objeto, algo peculiar, hace referencia a la ejecucin de ciertas acciones sobre la base de datos (ver tablas, abrir formularios, etc.).
Veamosalgunosdesusmtodosypropiedadesmstiles:

OpenTable,OpenForm,OpenReport.Abre,respectivamente,latabla,formulariooinformequeseindiquey,opcionalmente,elmodode

apertura(acViewPreview,acViewNormal,acViewDesign).Observemosesteejemplo,queabrecadaunodetalesobjetos:

SubAbrirObjetos()

Application.DoCmd.OpenTableCandidatos,acViewDesign

Application.DoCmd.OpenFormFormVotantes

DoCmd.OpenReportInfProyec,acViewPreview

EndSub

GoToControl.Nossitaenuncontrol(botn,campo,etc.)deunatabla,formulariooinformeabierto.Obsrveseenelsiguienteejemplo:

SubIrAControl()

DoCmd.OpenFormFormVotantes

DoCmd.GoToControlNivelCultural

EndSub


http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 48/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

FindRecord,FindNext.Buscaunregistroquecontengaunvalorespecificadoenelcampoactual,yelsiguienteregistroquelocontenga,

respectivamente,comoseveacontinuacin:

SubBuscar()

DoCmd.OpenTablePartidos

DoCmd.GoToControlTendencia

DoCmd.FindRecordCentro

DoCmd.FindNext

EndSub

Close. Cierra un objeto que estuviese abierto se debe indicar adems su tipo (acTable, acForm, acReport). Observemos el siguiente

ejemplo:

SubCerrar()

DoCmd.OpenTablePartidos

DoCmd.OpenFormFormVotantes

DoCmd.CloseacForm,FormVotantes

DoCmd.CloseacTable,Partidos,SaveYes

DoCmd

EndSub

13 COMUNICACINENTREAPLICACIONES

Hastaahora,hemostrabajoconExcel,WordyAccess,perosiempredeformaindividual,esdecir,aplicandoelcdigoenVBAaunosolode
talesprogramas.Ahorabien,enmuchasocasiones,resultadeseableonecesariotrabajarconjuntamenteconvariasaplicacionesOfficepor
ejemplo,puedeinteresarnosleerciertosdatosdeunahojadeclculoycrearuninformemedianteWordconlosresultadosobtenidos.

Paraqueunasaplicacionespuedenutilizarohacerreferenciaaotras,esnecesarioutilizarsentenciasdedeclaracin,similaresalasvariables.
Lostiposdedatosuobjetosquepodemosdeclarar,demodoquecadaunodeellosharreferenciaaunaaplicacin,sonlossiguientes:

Word.Application

Excel.Application

Access.Application

Undetalleimportanteesque,sinoseindicalocontrario,unaaplicacinsloreconocesuspropiosobjetos.Paraquereconozcaypuedeutilizar
otraaplicacindistintaysuscorrespondientesobjetos,debemoshacerusodelasreferencias,quesehandeseleccionardesdelaopcin
ReferenciasdelmenHerramientasdelEditordeVBA.Heaqulasreferenciasquepodemosdeseleccionaryeltipodeaplicacinalque
http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 49/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)
correspondecadaunadeellas:

MicroSoftWord8.0ObjectLibraryWord.Application.8

MicroSoftExcel8.0ObjectLibraryExcel.Application.8

MicroSoftAccess8.0ObjectLibraryAccess.Application.8

13.1 AperturaDeAplicaciones

Paracrearoabrirunanuevaaplicacin,podemoshacerusodedospalabrasreservadas:

CreateObject.Se trata de una funcin en la cual indicamos el tipo de aplicacin al que corresponde una variable. Vemoslo en un
ejemplo:

SubDesdeExcel()

DimapliWordAsWord.Application

SetapliWord=CreateObject(Word.Application.8)

ApliWord.Visible=True

EndSub

Hay que resear que la propiedad Visible nos permite hacer visible la aplicacin por defecto, el valor que contiene es False (salvo para
Access,queesTrue),esdecir,laventanadelaaplicacinpermaneceinvisible.

New.Estapalabrareservadaabrevialaformadecreacindeunaaplicacin,puespermitecrearlaalmismotiempoquesedeclarala
variablecorrespondiente.Veamosunejemplo:

SubDesdeWord()

DimapliExcelAsNewExcel.Application

apliExcel.Visible=True

EndSub

13.2 UtilizacindeAplicacionesyaExistentes

LafuncinGetObjectnospermitirseleccionaryutilizaraplicacionesquenonecesitenserabiertasporqueyaexistanenunmomentodado.
Sehadeindicareltipodeaplicacinquesedeseautilizar,comoseobservaenelsiguienteejemplo(lacomaesobligatoria):

http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 50/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

SubDesdeAccess()

DimapliWordAsObject

SetapliWord=GetObject(,Word.Application.8)

EndSub

13.3 FinalizacindeunaAplicacin

Unavezqueunaaplicacinhacereferenciayutilizaotra,normalmentellegarunmomentoenqueyasepuedaprescindirdeesasegunda
aplicacin.DisponemosenVBAdelmtodoQuitparacerrarlaaplicacincorrespondiente.Obsrveseelsiguienteejemplo:

SubDesdeAccess()

DimapliExcelAsNewExcel.Application

apliExcel.Visible=True

apliExcel.Quit

EndSub

13.4 UtilizacindelosObjetosdeunaAplicacin

Lautilizacindelosobjetosdeunaaplicacindesdeotradistintaserealizar,engeneral,deformatransparente,esdecir,elmanejodeobjetos
sersimilaraldelaaplicacinreferenciada.Comonicasalvedad,sedeberindicarelobjetoaplicacinalquesehacereferencia.

Es importante destacar que no es necesario que la aplicacin sea visible para manejar sus objetos. Veamos el siguiente ejemplo, que se
suponehasidocreadoenExcel:

SubDesdeExcel()

DimapliWordAsWord.Application,oDocuAsObject

SetapliWord=CreateObject(Word.Application.8)

SetoDocu=apliWord.Documents.Open(filename:=C:\Mio.doc)

MsgBoxPalabras=&oDocu.Words.Count

oDocu.Close

apliWord.Quit

EndSub

http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 51/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)

13.5 ComunicacinconAccess

LacomunicacinconAccessdesdeWordoExcelpresentaalgunassalvedades.EnAccess,comoyaseindic,nopuedepermanecerabiertams
deunabasededatosalmismotiempo.Estohacequelosmtodosdequesedisponeentalesaplicacionesnocoincidenexactamenteconlosde
Access.

Desde Word y Excel, podemos hacer uso de los mtodos OpenCurrentDatabase, que abre una base de datos indicando su nombre y
ubicacin,yCloseCurrentDatabase,quecierralabasededatosqueestenuso,locualpermitirabrirotras.Vemoslosenunejemplo:

SubDesdeWord()

DimapliAccessAsNewAccess.Application

apliAccess.OpenCurrentDatabaseC:\AIA\encuesta.mdb

apliAccess.DoCmd.OpenTableVotantes

apliAccess.DoCmd.CloseacTable,Votantes

apliAccess.CloseCurrentDatabase

apliAccess.Quit

EndSub

http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 52/52

Você também pode gostar