Escolar Documentos
Profissional Documentos
Cultura Documentos
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
http://hojadecalculo.umh.es/vba/Apuntes.Amp.htm#_Toc106514025 15/52
26/3/2015 ApuntesdeVisualBasicparaOffice(VBA)
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