Está en la página 1de 346

1

VBAExcel2016
ProgramacinenExcel:MacrosylenguajeVBA
Completo y, a la vez, simple y prctico, este libro est dirigido a usuarios de Excely adesarrolladores que deseen
crearaplicacionesamigables,fiablesypotentes.
AdemsdeloselementosbsicosdellenguajeVBA(estructuradellenguajeyconceptosdeprogramacinorientadaa
objetos)quepermitirnautomatizarelmanejodesusdatos,aprenderacreartablasdinmicasygrficos,adisear
formularios, a personalizar la interfaz de Excel, especialmente la cinta de opciones, a comunicarse con las otras
aplicaciones de Office, a importar o publicar pginas web y archivos XML y a aprovechar las funciones API de
Windows.
Cada captulo incluye numerosos ejemplos. El libro concluye con unejerciciointegrador que lo guiar a travs de la
creacincompletadeunaaplicacinExcel.
Losejemplosincluidosenestelibropuedendescargarseenestapgina.
Loscaptulosdellibro:
PrlogoPresentacinEllenguajeVBALaprogramacindeobjetosenExcelObjetosdeExcelTablasdinmicas
y grficos Cuadros de dilogo Formularios Mejoras en la interfaz de usuario Administracin de eventos
Depuracin y administracin de errores Comunicacin con las aplicaciones Office 2016 Internet Programacin
WindowsCdigodeunaminiaplicacinAnexos

MichleAMELOT

Formadoray,alavez,especialistaeneldesarrollodeaplicacionesofimticas,MichleAMELOTayudadesdehacems
dequinceaosalasempresasensusproyectosinformticos.Esesteprofundoconocimientodelasnecesidadesdelos
usuariosydelosdesarrolladores,loquelepermite,atravsdesuslibros(VBAExcelyVBAAccess,todaslas
versiones),facilitarelaprendizajeylaprcticaenlaprogramacinenlenguajeVBA.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

- 1-

Introduccin
EstelibroestdirigidoausuariosdeExceloaprogramadoresquedeseenautomatizarelmanejodedatosbajoExcel
o desarrollaraplicacionesdegestin,reporteoanlisisaprovechandolascapacidadesdelahojaExcel.
El objetivo del libro es presentar, de una manera accesible, todo el abanico de posibilidades del lenguaje VBA. Los
diferentes ejemplos incluidos, que se pueden descargar desde la pgina Informacin, le permitirn llevar a la
prctica, fcilmenteydemaneraprogresiva,losconocimientosadquiridos.
El nico requisito necesario para aprovechar el contenido de este libro es un buen conocimiento de la interfaz de
Excel.Nocionesdeprogramacinoelconocimiento dealgnlenguajeleayudarnamanejarellenguajeaunqueno
esimprescindibleparaaprovecharestelibro.
Enprimerlugar,sefamiliarizarconelcdigoVBAyaprenderausarloparamanejar losobjetosdeExcel(talescomo
libros,hojasdeclculo,rangosdeceldas,tablasdinmicas,grficos...),especialmenteenlaautomatizacindeciertos
procedimientos.
En una segunda etapa, descubrir progresivamente cmo crear aplicaciones profesionales en Excel a travs de los
siguientesconceptos:

Usodeloscuadrosdedilogopredefinidosparainteractuarconelusuario.

Creacin de formularios personalizados para la introduccin y presentacin de datos de Excel o cualquier otro tipo de
datos.

MejoradelainterfazdeExcel,especialmenteenlapersonalizacindelacintadeopcionesdeMicrosoftOffice.

OptimizacindelaconfiabilidaddelcdigoVBAgraciasalaintegracindeopcionesparaeltratamientodeerrores.

ManejodeotrasaplicacionesdeMicrosoftOffice2016:Word,AccessyOutlook.

AccesoalascapacidadesdeInternet:importarypublicarpginaswebyarchivos XML.

ControldelsistemaoperativoatravsdelallamadaafuncionesAPIdeWindows(ApplicationProgrammingInterface).

Finalmente, el ltimo captulo lo guiar a travs de la creacin completa de una aplicacin de Excel. Esta aplicacin
permitemanejarpresupuestosatravsde lassiguientescaractersticas:creacindepresupuestosenformatoExcel
apartirdedatostomadosdeunabasededatosdeAccess,registrodelospresupuestosencarpetasespecificadas
segnelcliente,bsquedadepresupuestossegndiversoscriteriosyotrasopciones.
Alterminarellibro,ustedquedarconvencidodequeellenguajeVBAnoselimitaaautomatizartareasenExcel,sino
quetambinlepermiterealizaraplicacionesprofesionalesdotadasdeunainterfazamigable.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

- 1-

PresentacindellenguajeVBA
Visual Basic para Aplicaciones (VBA) es el lenguaje de programacin comn a todas las aplicaciones del paquete
MicrosoftOffice2016(Word,Access, Excel,OutlookyPowerPoint).

1. ObjetivosdellenguajeVBA
TrabajandoenExcel,ellenguajeVBApermite:

Automatizaraccionesrepetitivas:conVBApuederealizarenunanicaoperacintodoungrupodecomandosde
Excel.

InteractuarsobreloslibrosdeExcel:elcontenidoylapresentacindetodosloselementosincluidosenunlibro
(hojas,celdas,grficos,etc.)sepuedenmodificaratravsdecdigoVBA.

Crear formularios personalizados: los formularios son los cuadros de dilogo compuestos por controles ActiveX
(cuadros de texto, listas desplegables, etc.), a los que se les puede asociar cdigo VBA. Los formularios permiten
crearinterfacesamigablesparalaentradaolasalidadeinformacin.

Generar automticamente tablas dinmicas y grficos: as podr automatizar la creacin de estadsticas a


partirdesusdatosdeExcel(odelosdatosdelaempresaexportadosaExcel).

Personalizar la interfaz de Excel: la cinta de opciones de Office 2016 es totalmente personalizable y se pueden
asociarmacroscreadasenlenguajeVBAaloscomandosdelacintaoalabarradeherramientasdeaccesorpido.

Modificar las opciones de Excel: a cada opcin de Excel le corresponde una propiedad de un objeto VBA. Por
ejemplo, puede modificar el tipo de fuente por defecto a partir de las propiedades StandardFont (fuente) y
StandardFontsize (tamaodefuente)delobjetoApplication.

Ejemplo:
Application.StandardFont=Arial
Application.StandardFontSize=10

Comunicar Excel con otras aplicaciones de Microsoft Office: VBA permite intercambiar informacin entre las
aplicacionesdeOfficeusandoobjetosespecficospropiosdecadauno.Porejemplo,ustedpuedeinsertarunatablao
ungrficodeExcelenunarchivodeWord,crearmensajesdeOutlookconunarchivodeExceladjunto,etc.

2. Algunasdefiniciones
Proyecto
CadalibroabiertoenExceltieneasociadounproyectoquecontienetodoslosmdulosdecdigoVBA
agrupadosencategoras.
Mdulo
LosmduloscontienenlasmacrosgrabadasysuspropiosprocedimientosyfuncionesescritosenVBA.
Losmdulossepuedenexportarcomoarchivosindependientesparaluegoserimportadosenotros
libros.
Procedimiento
LosprocedimientossonsubprogramasescritosenVBA.Cadamacrograbadageneraunprocedimiento
Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

- 1-

conelmismonombredelamacro.Delamismamanera,puedecrearprocedimientosusandola
instruccinSub.
Funcin
Lasfuncionessonprocedimientosquedevuelvenunvalor.Paracrearunafuncin,sedebeutilizarla
instruccinFunction.

3. EscrituradecdigoVBA
HaydosmanerasdecrearunprocedimientoVBA:

Generarautomticamenteelcdigoapartirdelagrabacindemacros.

EscribirdirectamenteelcdigodelprocedimientoenelEditordeVisualBasic(oentornoVBE).

La primera solucin es ms sencilla, pero mucho ms limitada que la segunda. Los procedimientos generados
automticamente solo permiten automatizar acciones repetitivas realizadas con Excel (formato de celdas, ordenar
datos,etc.).
Si desea efectuar operaciones especficas, como algoritmos de clculo, intercambio de mensajes y de informacin
conelusuario,controlarlacoherenciadedatosenunlibroocualquierotraoperacinquehagausodeestructuras
repetitivasocondicionales,debecrearsuspropiosprocedimientoseneleditordeVBA.

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

LasmacrosdeExcel
1. MostrarlapestaaDesarrolladorenlacintadeopciones
Para escribir macros, ejecutar macros grabadas o crear aplicaciones de Excel, debe mostrar la pestaa
Desarrolladordelasiguientemanera:
HagaclicenlapestaaArchivoyluegoenOpciones.
SeleccionelacategoraPersonalizarcintadeopciones.
Dentro de Personalizar cinta de opciones, en la lista Pestaas principales, marque la opcin
Desarrollador.
HagaclicenelbotnAceptar:lapestaaDesarrolladorseaadiralacintadeopcionesdeExcel,ala
derechadelapestaaVista.

2. DescripcindelapestaaDesarrollador

a. GrupoCdigo
Nombredelbotn

Descripcin
Abre el entorno de desarrollo. El mtodo abreviado de teclado es [Alt]
[F11].

Muestralalistademacros.Elmtodoabreviadodetecladoes[Alt][F8].

Comienzalagrabacindeunamacro.

Permiteusarreferenciasrelativasalaprimeraceldaseleccionada.

Personalizalaconfiguracindeseguridaddelasmacros.

b. GrupoComplementos
Nombredelbotn

Descripcin

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

- 1-

PermitedescargarcomplementosdeOffice.

Permiteseleccionarmacrosgrabadascomocomplementos.

PermiteseleccionarcomplementosCOM(librerasdefuncionescomplementarias).

c.GrupoControles
Nombredelbotn

Descripcin
Permiteinsertarcontroles(formulariosoActiveX)enExcel.

ActivaodesactivaelmodoDiseo.EnelmodoDiseosepuedenseleccionary
modificarloscontrolesActiveX,peronosepuedenejecutar.

MuestralaspropiedadesdelobjetodeExcelseleccionado (hojaocontrol).

Permiteaccederdirectamentealcdigoasociadoalcontrolseleccionado.

Ejecutauncuadrodedilogopersonalizado.

3.Grabarunamacro
a.Grabarlaprimeramacro
Veamoscmocrearunamacroqueapliqueunbordeyunrellenoenlasceldasseleccionadas.
Seleccioneunarangodeceldas.
Hagaclicenelbotn

enlapestaaDesarrolladoroenlabarradeestado.

En el cuadro de dilogo que aparece, escriba el nombre de la macro, su descripcin e indique, si lo


desea,elmtodoabreviadodeteclasasociado.

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

HagaclicenelbotnAceptarparainiciarlagrabacin.
RealiceenExcellasoperacionesquedeseegrabar.Porejemplo,apliqueunrellenoyunbordealrango
actualmenteseleccionado.
Haga clic en el botn

de la pestaa Desarrollador para terminar la

grabacin(tambinpuedeusarelmismobotnenlabarradeestado).

b.Ejecutarunamacro
ParaejecutarunamacrodesdeExcel:

Hagaclicenelbotn

delapestaaDesarrolladoropulseelmtodoabreviadodeteclas[Alt]

[F8]yluegohagadobleclicenelnombredelamacroquedeseaejecutar.
Opulselacombinacindeteclasasociadaalamacro.
Para visualizar la informacin relativa a una macro (mtodo abreviado de teclado y descripcin), seleccione la
macroenlalistayhagaclicenelbotnOpciones.

Paradetenerlaejecucindeunamacro,pulse[Escape]o[Ctrl][Pausa].

c.Grabarunamacroconreferenciasrelativas
Sigrabaunamacroenmododereferenciasabsolutas(modopordefecto),losrangosdeceldasreferenciadosen
lasoperacionesdeseleccin,desplazamientos...sernfijos.Porejemplo:Range("A2")designalaceldaA2.
Sigrabaunamacroenmododereferenciasrelativas,losrangosdeceldassernexpresadosenrelacinconla
posicin de la primera celda activa. Por ejemplo: ActiveCell.range("A2") designa la celda ubicada bajo la celda
activa, ActiveCell.range("B1") designalaceldaubicadaaladerechadelacelda activa.

ActiveCell.range("A1") siempre hace referencia a la primera celda activa. A1 se puede considerar la referencia
relativaalaprimeraceldaactiva.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

- 3-

Paragrabarunamacroconreferenciasrelativas:

Hagaclicenelbotn

delapestaaDesarrollador:elbotnquedaractivo

(severdestacado).
Sivuelveahacerclicenelbotn

,estequedardesactivadoylasmacros

segrabarnconreferenciasabsolutas.
Ejemplo
La misma secuencia de operaciones se ha registrado en dos macros: la primera (RefRelativa) se grab con la opcin
referenciasrelativaslasegunda(RefAbsoluta),conlaopcinreferenciasabsolutas.
Lasecuenciadeoperacioneseslasiguiente:

Seleccionarunrangodeceldas.

Desplazarelrangodosfilashaciaabajoyunacolumnaaladerecha.

Sub RefRelativa()

Referencias relativas
ActiveCell.Range(A1:B7").Select
Selection.Cut Destination:=ActiveCell.Offset(2, 1).Range(A1:B7")
ActiveCell.Offset(2, 1).Range(A1:B7").Select

End Sub
___________________________________________________________________
Sub RefAbsoluta()

Referencias absolutas
Range(B2:C8").Select
Selection.Cut Destination:=Range(C4:D10")
Range(C4:D10").Select

End Sub

d.Definirellugardealmacenamientodeunanuevamacro
Paradefinirellugardealmacenamientodeunanuevamacro:

Hagaclicenelbotn

delapestaaDesarrolladoropulseelmtodoabreviado[Alt][F8].

AbralalistaMacrosenyseleccioneellibroenelquedeseacrearlamacro.

- 4-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

Sielige Librodemacrospersonal,lamacrosegrabarenellibropersonal.xlsblamacroseraccesibledesde
todosloslibrosExcel.

e.Eliminarunamacro
Paraeliminarunamacro:

Hagaclicenelbotn

delapestaaDesarrolladoropulseelmtodoabreviado[Alt][F8].

SeleccionelamacroquedeseaeliminaryhagaclicenelbotnEliminar.HagaclicenelbotnSpara
confirmarlaeliminacin.

f.Guardarunlibroconmacros
Sihacreadomacrosenunlibroyloguardaporprimeravez,aparecerelsiguiente mensaje:

HagaclicenNoparanoguardarellibrosinlasmacros.
En el cuadro Guardar como, abra la lista Tipo y seleccione Libro de Excel habilitado para macros

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

10

- 5-

(*.xlsm).
Loslibrosquecontienenmacrostienenlaextensinxlsm(envezdexslx)ysuiconosedistingueporunsignode
exclamacin.

Tambinpuedegrabarunnuevolibroconmacrosmediantelassiguientesoperaciones:
HagaclicenlapestaaArchivoyluegoenGuardarcomo.
En el cuadro Guardar como, abra la lista Tipo y seleccione la opcin Libro de Excel habilitado para
macros(*.xlsm).

4.Lasmacrosylaseguridad
Laconfiguracindeseguridaddelasmacrospermitecontrolarloqueocurrealabrirunlibroquecontienemacros.

LasmodificacionesdelaconfiguracindeseguridaddemacrosrigensolamenteenExcelynoafectanalrestodelas
aplicacionesdeMicrosoftOffice.

a.Modificarlaconfiguracindeseguridad
Hagaclicenelbotn

delapestaaDesarrollador.

Dentro de Configuracin de macros, seleccione la opcin deseada (vea en la siguiente seccin:


Descripcindelasdiferentesopcionesdeseguridad).
HagaclicenAceptarparaconfirmarsueleccin.
Sisecambialaconfiguracindeseguridad,lasnuevasopcionesseaplicarnatodosloslibros,exceptoaloslibros
actualmenteabiertos.Paraaplicarlasaestoslibros,debecerrarlosyabrirlosnuevamente.

b.Descripcindelasdiferentesopcionesdeseguridad
Deshabilitartodaslasmacrossinnotificacin
Todaslasmacrosytodaslasadvertenciasdeseguridadserndeshabilitadas.
Deshabilitartodaslasmacrosconnotificacin
Eslaopcinpordefecto.Lasmacrosserndeshabilitadasperoaparecerunaadvertenciade
seguridadenlabarrademensajes(bajolacintadeopciones)paraloslibrosquecontienenmacros.
Deshabilitartodaslasmacrosexceptolasfirmadasdigitalmente

- 6-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

11

Silasmacrosdeunlibrotienenfirmadigitaldeunorigenaprobado,lasmacrossepodrnejecutar.Si
elorigennoestautorizado,aparecerunanotificacin: enestecasoesposiblehabilitarlasmacros
firmadasoaprobarelorigen.Lasmacrossinfirmadigitalnosepodrnhabilitar.
Habilitartodaslasmacros
Siseleccionaestaopcin,todaslasmacrossernhabilitadas.Serecomiendanousarestaopcinde
formapermanente.
Cualquieraquesealaopcinelegida,siinstalaunprogramaantiviruscompatibleconMicrosoftOfficeSystem2016,
loslibrosquecontenganmacrossernanalizadosantesdeabrirse.

ConfiarenelaccesoalmodelodeobjetosdeproyectosdeVBA
Esteparmetroesparalosdesarrolladoresysirveparacontrolaroautorizarelaccesoporprograma
almodelodeobjetosVBA(formularios,mdulosymdulosdeclase).Lamanipulacindelosobjetos
sehaceatravsdelapropiedadVBComponents,quedevuelvelacoleccindecomponentesdeun
proyecto.

c.Habilitarlasmacroscuandoaparecelaadvertenciadeseguridad
SihaseleccionadolaopcinDeshabilitar todas las macros con notificacin,aparecerlasiguienteadvertencia
bajolacintadeopcionescuandoabraunlibroquecontienemacros:

Parahabilitarlasmacrosdellibro,hagaclicenelbotnHabilitarcontenido.Apartirdeahora,ellibropasaraser
undocumentoconfiableylaadvertenciadeseguridadnoaparecerlaprximavezqueloabra.

Un documento se considera confiable para una determinada ubicacin: si cambia la ubicacin de un documento
aprobado,volveraaparecerlaadvertencia deseguridadlaprximavezqueloabra.

Lasmacrossepuedenhabilitarsoloparaunasesin(esdecir,hastaquecierreellibroquelascontiene):
Al aparecer la advertencia de seguridad, haga clic en la pestaa Archivo y seleccione la seccin
Informacin.
DentrodeAdvertenciadeseguridad,hagaclicenHabilitarcontenidoyluegoenOpcionesavanzadas.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

12

- 7-

EnelcuadroOpcionesdeseguridaddeMicrosoftOffice,seleccionelaopcinHabilitarcontenidopara
estasesin.
Desaparecerlaadvertenciadeseguridad,aunquevolveraaparecerlaprximavezqueabraellibro.

d.Activarlasmacrosenunaubicacindada
Puededefinirunalistadeubicacionesdeconfianzaparaqueloslibrosqueseencuentrenenellaseconsideren
confiables:

Hagaclicenelbotn

delapestaaDesarrollador.

Enelmendelaizquierda,seleccionelacategoraUbicacionesdeconfianza.
HagaclicenelbotnAgregarnuevaubicacin.
HagaclicenelbotnExaminar.LocaliceyseleccionelacarpetadeseadayluegohagaclicenAceptar:la
rutaseleccionadaseagregaralalistadeubicacionesdeconfianza.

e.Firmaselectrnicasdemacros
Parafirmardigitalmenteunproyectomacro,debe:

Obteneruncertificadodigitaldepartedeunaautoridaddecertificacincomercial,comoVerisign(www.verisign.es)o
Thawte(www.thawte.com),einstalarlo.

Firmardigitalmentesuproyecto.Paraello,pasealentornoVBE(accesibledesdeelcomando

de

la pestaaDesarrollador) y seleccione la opcinFirma digital del men Herramientas. Haga clic en el


botnElegirparaseleccionarsucertificado.

Paraprobarsusproyectosmacrosensuordenador,puedecrearsupropiocertificadodeautofirmaconlaayudade
Selfcert.exe(programadistribuidoconMicrosoftOffice2016yconlosejemplosdeestelibro).

5.Modificarelcdigodeunamacro
UnamacroesunprocedimientoescritoenlenguajeVBA.UnprocedimientoVBAesunasecuenciadeinstrucciones
agrupadasenunbloquedecdigoquecomienzaconSubyterminaconEndSub.

Paraaccederalcdigodeunamacro:

Hagaclicenelbotn

delapestaaDesarrolladoropulseelmtodoabreviado[Alt][F8].

SeleccionelamacroquedeseamodificaryhagaclicenelbotnModificar.
ElcdigodelamacroaparecerenunaventanadelentornoMicrosoftVisualBasic(verElentornodedesarrolloVBE,
enestecaptulo).

- 8-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

13

Puedemodificarocompletarelcdigodentrodeesteprocedimiento.
Ejemplo
Inserteelsiguientecdigoalfinaldelprocedimiento:

...
MsgBox "El formato de celdas " & Selection.Address _
& vbCr & "se ha modificado correctamente"
End Sub

Paraprobarsuprocedimiento,hagaclicenelicono

ouselatecla[F5].Aparecerelsiguientemensaje:

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

14

- 9-

Asignarunamacro
Unamacrosepuedeasociaralossiguienteselementos:

Comandospersonalizadosenlacintadeopciones.

Botonesdecomandoenlabarradeherramientasdeaccesorpido.

ControlesuobjetosinsertadosenlashojasdeExcel(botonesdecomando,imgenes,etc.).

1.AccesoaunamacrodesdelacintadeopcionesdeOffice2016
MicrosoftOffice2016ofrecelaposibilidaddepersonalizarlacintadeopciones: puedeagregar,eliminaroreasignar
laspestaas,gruposycomandosdelacintaparadisponerdeaplicacionespersonalizadas.
Parapersonalizarlacintadeopciones:
Haga clic en el botn derecho del ratn sobre la cinta y seleccione la opcin Personalizar la cinta de
opciones.
O
Haga clic en la pestaa Archivo, luego en Opciones y seleccione la categora Personalizar cinta de
opciones.
Aparecerelsiguientecuadro:

Parainsertarmacrosenunanuevapestaa:
Haga clic en el botn Nueva pestaa. Se agregar una pestaa y un grupo a la lista de pestaas
principales.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

15

- 1-

Para cambiar el nombre de la pestaa y del grupo que acaba de crear, haga clic en el botn Cambiar
nombre.Elmencontextualtambinlepermiteagregarpestaasogrupos.
Despliegue las opciones dentro de Comandos disponibles en: (a la izquierda y arriba) y seleccione
Macros.Aparecerlalistademacrosdisponibles.
SeleccionelamacroquedeseaagregaralgrupoyhagaclicenAgregar.
ParamodificarelnombreyeliconodelamacrohagaclicenelbotnCambiar nombre.
Tambinpuedecambiarelordendelaspestaa,gruposycomandosconlasflechassituadasala
derechadelalista.
Ejemplodepersonalizacin:

Para confirmar esta personalizacin, haga clic en Aceptar. La nueva pestaa aparecer en la cinta de
opcionesdeExcel2016:

Ustedpuederestablecerlacintadeopcionesencualquiermomentodesdeelcuadrodedilogoparapersonalizarla
cinta, haciendo clic en el botn Restablecer (puede restablecer toda la cinta o solamente una pestaa).
Tambin puedeimportarunacintapersonalizadahaciendoclicenelbotnImportaroexportar.

2.Asociarunamacroauniconodelabarradeherramientasdeaccesorpido
Tambinpuedeinsertaruncomandoparaejecutarunamacroenlabarradeherramientasdeaccesorpido:

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

16

Haga clic en el botn derecho del ratn sobre la cinta de opciones y seleccione la opcin Personalizar
barradeherramientasdeaccesorpido.
En la lista desplegable Comandos disponibles en situada arriba y a la izquierda, seleccione Macros.
Aparecerlalistademacrosdisponibles.
SeleccionelamacroquedeseeyhagaclicenelbotnAgregar.Lamacropasaralalistadeladerecha.

HagaclicenelbotnModificar...paraseleccionarunnuevoiconoparalamacro.
Puedemodificarelordendeloscomandosconlasflechasubicadasaladerechadelalista.
PuedeseleccionarunlibroenlalistadesplegablePersonalizarbarradeherramientasdeaccesorpido
situadaarribayaladerecha.Enesecasolasmodificacionessolamenteafectarnallibroindicado.
HagaclicenAceptar.
AparecerunnuevocomandoenlabarradeaccesorpidoparaejecutarlamacroBordes.

3.Asociarunamacroaunbotndecomando

Hagaclicenelbotn

delapestaaDesarrollador.

Dibuje el botn con la herramienta

(parte superior izquierda de la barra de Controles de

formulario).
Alsoltarelbotndelratn,aparecerelcuadrodedilogoAsignarmacro.
SeleccioneelNombredelamacroenlalistayhagaclicenAceptar.

4.Asignarunamacroaunaimagen
Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

17

- 3-


Inserteunaimagenhaciendoclicenelbotn

delapestaaInsertar.

HagaclicenelbotnderechodelratnyseleccionelaopcinAsignarmacro.
SeleccioneelNombredelamacroenlalistayhagaclicenelbotnAceptar.

5.Asociarunamacroaunazonadeunobjetogrfico
Inserte un objeto grfico (imagen, imagen prediseada, forma o SmartArt, accesibles desde el grupo
IlustracionesdelapestaaInsertar).

Paradefinirenelobjetounazonaquepermitaejecutarunamacro,hagaclicen

(enlapestaa

Insertar),seleccionelaformadeseadaydibujelaformadentrodelobjetoqueacabadecrear.
HagaclicenelbotnderechodelratnyseleccionelaopcinAsignarmacro.
SeleccioneelNombredelamacroenlalistayconfirmehaciendoclicenelbotnAceptar.
Seleccione la forma insertada. Aparecer la seccin Herramientas de dibujo haga clic en la pestaa
Formato.
EnelgrupoEstilosdeformadelapestaaFormato,hagaclicenlalista

yluegoen

EnelmismogrupoEstilo de formadelapestaa Formato,hagaclicenlalista

luegoen

Ahora,alhacerclicenlaforma,seejecutarlamacroasociada.

6.AsociarunamacroaunaimagenControlActiveX

ActiveelmodoDiseo(sinoestactivo)haciendoclicenelbotn

delapestaaDesarrollador.

Hagaclicenelbotn

delapestaaDesarrollador.

Dibujeunaimagenconlaherramienta

(dentrodeloscontrolesActiveX) ysuelteelbotndelratn.

Ahora puede mostrar y modificar las propiedades de la imagen (en particular, asociar una imagen por

- 4-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

18

medio de la propiedad Picture), haciendo clic en el botn

de la pestaa

Desarrollador.
Hagadobleclicenlaimagen.
DentrodelprocedimientoVBAasociadoalaimagen,escribalainstruccinCallseguidadelnombredela
macroquedeseaejecutar.

DesactiveelmodoDiseohaciendoclicenelbotn

delapestaaDesarrollador.

Hagaclicenlaimagen:seejecutarlamacroBordes.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

19

- 5-

ElentornodedesarrolloVBE
VBE (Visual Basic Editor) es el entorno en el que puede escribir, modificar y probar su cdigo VBA. Este entorno se
llamatambinIDE(IntegratedDevelopmentEnvironment)oeditordeVBA.
ElentornoVBEponeasudisposicinnumerosasherramientasparafacilitarlaprogramacinylapuestaapuntode
sucdigoVBA:herramientasdedepuracin,introduccinasistida,exploradordeobjetos,etc.

1.AccesoalentornoVBE

ParaaccederalentornoVBEdesdeExcel,hagaclicenelbotn

delapestaaDesarrolladoro

pulselacombinacin[Alt][F11].

2.CerrarelentornoVBE
ParacerrarelentornoVBEyvolveraExcel:
HagaclicenelasparojaubicadaarribaaladerechadelaventanaprincipaldelentornoVBE.
o
HagaclicenlaopcinCerraryvolveraMicrosoftExceldelmenArchivo.

3.VolveraExcel
ParavolveraExcelsincerrarelentornoVBE,usecualquieradeestasdosposibilidades:
Hagaclicenelicono

delabarradeherramientasEstndar.

Pulseelmtodoabreviado[Alt][F11].

4.DescripcindelentornoVBE

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

20

- 1-

TodaslasventanasdelentornoVBEsepuedenvisualizardesdeelmenVer.

(1)LabarradeherramientasEstndar

1VeraMicrosoftExcel

10EjecutarSub

2InsertarUserForm

11Interrumpir

3Guardarlibro

12Restablecer

4Cortar

13Mododediseo

5Copiar

14Exploradordeproyectos

6Pegar

15VentanadePropiedades

7Buscar

16Examinadordeobjetos

8Deshacer

17Cuadrodeherramientas

9Rehacer

18AyudadeMicrosoftVisualBasic
19Posicinactualenlaventanadecdigo

(2)Elexploradordeproyectos
CadalibroabiertoenExceltieneasociadounproyecto.Elexploradordeproyectospermitevertodoslosproyectosy
todoslosmdulosdecadaproyectosegnunaestructuraenrbol.Losmdulosseagrupanencuatrocategoras:

- 2-

MdulosasociadosaobjetosdeExcel(libroyhojas).

Mdulosasociadosaformularios.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

21

Mdulosestndares.

Mdulosdeclase.

Cadamdulopuedecontenermuchosprocedimientos.
(3)LaventanaPropiedades
Muestralaspropiedadesrelativasallibro,alashojasdeclculo,alashojasgrficasyalosformularios.
(4)LaventanaCdigo
Enestaventanaaparecendoszonasconlistasdesplegables:

Lazonaobjeto(10)muestralalistadelosobjetosdelmdulo.

Lazonaprocedimiento (11)muestralosprocedimientosoloseventosdelobjetoseleccionadoenlazonaobjeto.Los
eventosyausadosaparecenennegrita.

(5)Instruccionesquesecompletanautomticamente
Cuandoseescribeelnombredeunobjetoseguidodeunpunto,apareceautomticamenteunalistadesplegable
conlosmtodos,propiedadesyconstantesdisponiblesparaeseobjeto.

Si la lista no aparece, seleccione Opciones en el men Herramientas y marque la casilla Lista de miembros
automticadelapestaaEditor.

(6)VentanaInmediato
Contienetodoslosvaloresdelasvariablesquehayansidodefinidaspreviamentecomoexpresionesdeinspeccin.
(7)VentanaLocales
Permitemostrarlosvaloresdelasvariables,modificarlas,yejecutarlasinstrucciones.
(8)VentanaInspecciones
Contienetodoslosvaloresdelasvariablesdelprocedimientoencurso.

Lasventanas Inmediato,LocaleseInspeccionesseusanprincipalmenteparaladepuracindeaplicaciones(ver
captuloDepuracinyadministracindeerrores).

(9)ElExaminadordeobjetos
Permitevisualizar,paracadaobjeto,suspropiedades,mtodosyconstantes.

5.Elegirlasventanasquehayquemostrar
Nombredelaventanaque

Men

hayquemostrar
Propiedades

Barrade

Teclado

herramientas
VerVentanaPropiedades

[F4]

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

22

- 3-

- 4-

Proyectos

VerExploradordeproyectos

[Ctrl]R

Inmediato

VerVentanaInmediato

[Ctrl]G

Inspecciones

Ver VentanaInspeccin

VentanaLocales

VerVentanaLocales

Exploradordeobjetos

VerExaminadordeobjetos

[F2]

Mdulo

VerCdigo

[F7]

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

23

ConfiguracindeleditorVBA
1.Configuracindelatipografa
Laspalabrasclave,lasfuncionesylasinstruccionesVBAaparecenenazullosobjetos,mtodosypropiedades,en
negro,yloscomentarios,enverde.Lasinstrucciones quecontienenerroressedestacanenrojo.
Para modificar el estilo (color, tipo de letra, tamao) de los diferentes tipos de cdigo, seleccione
OpcionesenelmenHerramientasyhagaclicenlapestaaFormatodeleditor.

2.Configuracindelaintroduccindecdigo
Existen diferentes herramientas que facilitan la introduccin y la actualizacin del cdigo VBA: por ejemplo, la
comprobacin automtica de la sintaxis, la declaracin obligatoria de las variables, las instrucciones que se
completanautomticamente,etc.
Para activar estas opciones, seleccione Opciones en el men Herramientas y haga clic en la pestaa
Editor.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

24

- 1-

3.Manejodeerrores
Lasopcionesdeinterceptacindeerrorespermitenestablecersilaejecucindelcdigoseinterrumpiralocurrirun
errordeejecucin.
Para activar esta opcin, seleccione Opciones en el men Herramientas y haga clic en la pestaa
General.

Si su cdigo VBA incluye una gestin de errores, seleccione la opcin Interrumpir en errores no
controladosonosetendrnencuentalasinstruccionesdegestindeerrores.
Ciertos ejemplos de este libro incluyen una gestin de errores es importante que active esta opcin para que
funcionencorrectamente.
- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

25

LagestindeerroresseexplicaenelcaptuloDepuracinyadministracindeerrores.

4.Acoplarunaventana
Una ventana acoplada se coloca automticamente cuando la mueve. Una ventana no est acoplada si puede
ubicarseencualquierlugardelapantallaypermanecerah.
Paradefinirlasventanasquedeseaacoplar,seleccioneOpcionesenelmenHerramientasyhagaclic
enlapestaaAcoplar.
Activelasventanasquedeseaacoplarydesactivelasotras.LuegohagaclicenAceptar.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

26

- 3-

Mdulos
1.Presentacin
ElcdigoVBAasociadoaunlibroestagrupadoenunproyectoquecontienevariascarpetas:

LacarpetaMicrosoftExcel

Contiene un mdulo de clase asociado al libro del proyecto (llamado por

Objetos

defecto ThisWorkbook) y un mdulo de clase por cada una de las hojas de


clculouhojasdegrficodellibro.Enparticular,enestosmdulosdeclasese
encuentranlosprocedimientosdeeventosasociadosallibroyalashojas.

LacarpetaFormularios

Contienelosformularios(UserForm)delproyectoyelcdigoVBAasociado.

LacarpetaMdulos

Agrupa los diferentes mdulos estndares (compuestos por uno o ms


procedimientos) que pueden ser llamados desde cualquier procedimiento del
proyecto.

LacarpetaMdulosdeclase

Contiene los mdulos de clase usados para la creacin de nuevas clases de


objetos. Los mdulos de clase se utilizan especialmente para la escritura
de los procedimientos de eventos asociados a los objetosApplication y Chart
(vercaptuloAdministracindeeventos).

LalistadetodoslosmdulosapareceenformajerrquicaenelExploradordeproyectosdelentornoVBE.

Si el explorador de proyectos no est visible, elija la opcin Explorador de proyectos del men Ver o pulse el
mtodoabreviado[Ctrl]R.

Paraverelcdigoasociadoaunmdulo,hagadobleclicenelnombredelmdulo.

LoselementosdellenguajeVBAdescritosenestecaptulosepuedenusarenlosdiferentesmdulos.

2.Accesoalosmdulos
ParainsertarunnuevomduloenelentornoVBE,uselaopcinMdulodelmenInsertar,ohagaclicenelicono

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

27

- 1-

delabarradeherramientasEstndaryseleccionelaopcin

SilaventanaMduloestmaximizada,elnombredelmduloaparecesobrelabarradettulodeMicrosoftVisual
Basic.

Parapasardeunmduloaotro,enlaventana Proyecto,hagadobleclicenelnombredelmduloque
deseaactivar.
Paraeliminarunmdulo,enlaventanaProyecto,hagaclicderechoenelnombredelmduloquedesea
eliminar,elijalaopcinQuitarMduloeindiquesideseaexportarelmduloono(verImportaryexportar
cdigoVBA).
Para dar nombre a un mdulo, active el mdulo y cambie la propiedad Nombre en la ventana de
Propiedades.

3.ImportaryexportarcdigoVBA
LosmdulosyformulariospuedenexportarseaunarchivoparaluegoimportarloaotroproyectodeExcel.
Para exportar un archivo, haga clic en el nombre del archivo en el explorador de proyectos, luego
seleccionelaopcinExportar archivodelmenArchivo(odelmencontextual)opulselacombinacin
deteclas[Ctrl] E.
Para importar un archivo, haga clic en el nombre del archivo en el explorador de proyectos, luego
seleccionelaopcinImportararchivodelmenArchivo(odelmencontextual)opulselacombinacin
deteclas[Ctrl]M.
Laextensindelarchivocreadodependedeltipodearchivoexportado:

- 2-

Los mdulos de clase (mdulos asociados al libro y a las hojas y mdulos de clase independientes) tienen la
extensin.cls.

Losformulariostienenlaextensin.frm.

Losmdulosestndartienenlaextensin.bas.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

28

Procedimientos
1.Definiciones
Los procedimientos son subprogramas que permiten descomponer una tarea de programacin compleja en un
conjuntodetareasmsbrevesysimples.Permitenorganizarelcdigodentrodemdulosparaobteneruncdigo
demantenimientomssimpleyfcilmentereutilizable.
EnVBAExcel,sedistinguentrestiposdeprocedimientos:

LosprocedimientosSub(porsubrutina)sellamansubprogramasoprocedimientosSub.

LosprocedimientosFunctionsellamanfunciones.

LosprocedimientosPropertysellamanprocedimientosdepropiedad.

Enestecaptulo,solamentenosinteresanlosdosprimeros,quesonlosmsutilizados.

PuntoscomunesentreprocedimientosSubyfunciones:
n

AmboscontieneninstruccionesomtodosVBA.

Ambosaceptanargumentos.

AmbossepuedenllamardesdeotrasfuncionesoprocedimientosSub.

Caractersticasespecficasdelasfunciones:
n

Devuelvenunvalor.

SepuedenutilizardesdeExcelcomocualquierfuncin.

2.Accesoalosprocedimientos
Paraaccederaunprocedimientodesdelaventanadecdigodeunmdulo,abralasegundalistadela
ventana del mdulo, haga clic en el nombre del procedimiento al que desea acceder o recorra los
procedimientoscon[Ctrl][Flechaarriba]y[Ctrl][Flechaabajo].
Paraseleccionarunapalabra,hagadobleclicenlapalabra.
Para seleccionar una lnea, site el puntero del ratn a la izquierda de la lnea y haga clic cuando el
punteroseconviertaenunaflecha.
Paraseleccionarungrupodecaracteres,uselatcnicadearrastrarysoltarohaga[Mays]clic.
Para seleccionar un procedimiento completo, site el puntero del ratn a la izquierda de cualquier lnea
delprocedimiento.Cuandoelpunterosetransformeenunaflecha,hagadobleclic.
Paraejecutarunprocedimiento,hagaclicenelprocedimientoquedeseaejecutarypulse[F5]o

Paraeliminarunprocedimiento,seleccionetodoelprocedimientoypulse[Supr].

3.ProcedimientosSub
HaydostiposdeprocedimientosSub:

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

29

- 1-

LosprocedimientosSubgenerales,

LosprocedimientosSubasociadosaeventos.

Un procedimientogeneral es un procedimiento declarado en un mdulo (generalmente un mdulo estndar). La


llamadaaestetipodeprocedimientosedefineexplcitamenteenelcdigo.
Unprocedimientoasociadoauneventoesunprocedimientoqueseejecutaautomticamenteanteciertoseventos
deunobjeto.Sunombreseformaconelnombredelobjeto,seguidodelguinbajo"_"ydelnombredelevento
(ej.: Workbook_Open). La llamada a estos procedimientos es implcita, es decir, el procedimiento se ejecuta
automticamentecuandoseproduceeleventoasociado.
Ejemplo
El siguiente procedimiento general pide al usuario que confirme su deseo de abandonar la aplicacin, y sale de Excel si el
usuario responde que S. Este cdigo se puede ejecutar con un botn de comando o una opcin de men que permita
abandonarlaaplicacin.

Private Sub Terminar()


If MsgBox("Desea salir del programa?", _
vbQuestion + vbYesNo) = vbYes Then
Application.Quit
End If
End Sub

El siguiente procedimiento asociado a un evento abre automticamente el libro Ventas.xlsx cuando se abre el libro
Resumen.xlsx. Este procedimiento est asociado al evento Open del objeto Workbook y se encuentra en el mdulo
ThisWorkbookdellibroResumen.xlsx.

Private Sub Workbook_Open()

Abre el libro Ventas.xlsx


Workbooks.Open Filename:="C:\VENTAS\VENTAS.xlsx"

Activa el libro Resumen


Windows("RESUMEN.xlsx").Activate

End Sub

4.ProcedimientosFunction
LosprocedimientosFunction,llamadoscomnmentefunciones,devuelvenunvalorresultadodeunclculo.Elvalor
sedevuelveatravsdelnombredelafuncin.
EllenguajeVisualBasicincluyenumerosasfuncionesintegradas,talescomolasusadasenclculosconfechas(day,
week,year,format,etc.).
Ademsdeestasfuncionesintegradas,puedecrearsuspropiasfuncionespersonalizadas.
Ejemplo
LasiguientefuncinpidealusuarioqueconfirmesudeseodeabandonarlaaplicacinydevuelveTruesielusuarioresponde
queS,yFalseencasocontrario.

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

30

Function Terminar() As Boolean


If MsgBox("Desea salir del programa?", _
vbQuestion + vbYesNo) = vbYes Then
Terminar = True
Else
Terminar = False
End If
End Function

5.Declaracindeprocedimientos
SintaxisdeunprocedimientoSub

[Private | Public | Friend] [Static] Sub NomProc


([lista de argumentos])
<secuencia de instrucciones>
End Sub

SintaxisdeunprocedimientoFunction

[Private | Public | Friend] [Static] Function


NomProc ([lista de argumentos]) [As <Type>]
<secuencia de instrucciones>
End Function

ParacrearunprocedimientoSuboFunction,sedebenrespetarlossiguientespasos:

Determineelalcancedelprocedimiento.

DeclareelprocedimientosegnsutipoconlapalabraclaveSuboFunction,seguidadelnombredelprocedimiento.

Definalosargumentosquesedebanpasarcomoparmetrosalprocedimientoeindquelosentreparntesisdespus
delnombredelprocedimiento.

Enelcasodeunafuncin,siesnecesario,indiqueeltipodelvalordevueltodespusdelapalabraclaveAs.

Escriba el cdigo que permita efectuar la operacin deseada. Si es necesario, use Exit Sub o Exit Function para
salirdelprocedimiento.Enelcasodeunafuncin,asigneelresultadoalnombredelafuncin.

FinaliceelprocedimientoconEndSuboEndFunction.

6.Alcancedelosprocedimientos
Elalcancedeunprocedimientodeterminalaextensindesuuso.
UnprocedimientoPublicsepuedellamardesdetodoslosmdulosdetodoslosproyectosdeExcel.
UnprocedimientoPrivatesolamentesepuedellamardesdeunprocedimientodentrodelmismomdulo.
LapalabraclaveStaticindicaquelasvariableslocalesdelprocedimientosemantienenentreunallamadayotra.
SinoseindicaPublicoPrivateoFriend,losprocedimientossonpblicospordefecto.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

31

- 3-

7.Argumentosdelosprocedimientos
Los argumentos se usan para transferir a los procedimientos parmetros en forma de datos. La cantidad de
argumentospuedevariarde0avarios.
Paradeclararunargumento,bastaconespecificarsunombre.Sinembargo,lasintaxiscompletaparadeclararun
argumentoeslasiguiente:

[Optional] [ByVal | Byref] [ParamArray]


<variable> [As type]
LaopcinOptional

indica que el argumento es opcional y puede omitirse. Los argumentos opcionales


sedebenubicaralfinaldelalistadeargumentosyserdetipoVariant.

LaopcinByval

indicaqueelargumentosepasaporvalor.Elprocedimientoaccedeaunacopiade
lavariablesuvalorinicialnosemodificaporelprocedimientoalquesepasa.

LaopcinByref(opcinpor

indica que el argumento se pasa por referencia. En este caso, el procedimiento

defecto)

puede acceder a la variable propiamente dicha de esta manera, su valor real se


puedemodificarporelprocedimientoalquesepasa.

LapalabraclaveParamArray

se usa nicamente como ltimo argumento de la lista para indicar que se trata de
una matriz opcional de elementos de tipo Variant. No se puede usar con las
palabrasclaveByVal,ByRefuOptional.
especificaelnombredelargumento.Paralasvariablesdematriz,noespecificarsu

Variable

dimensin.
especifica el tipo de datos del argumento que se pasa al procedimiento (Byte,

Type

Boolean,Integer,Long,etc.).

8.Argumentosconnombre
La transferencia de argumentos a un procedimiento segn su orden de aparicin es a veces difcil de realizar,
especialmente cuando hay parmetros opcionales. De la misma manera, la legibilidad de las llamadas a
procedimientosconmuchosparmetrosnosiempreesfcil.
Losargumentosconnombrefacilitanlatransferenciadeargumentosgraciasalassiguientesventajas:

Elordendelosargumentosconnombrenoesimportante.

Losargumentosopcionalespuedenomitirse.

Lasintaxisdelosargumentosconnombreses:

NomArg := valor
Ejemplo
ElsiguientecdigoVBA:

If MsgBox("Desea salir de la aplicacin?", _


vbYesNo + vbQuestion, "Gestin de ventas") = vbYes Then
Application.Quit
End If

- 4-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

32

puedetransformarseen:

If MsgBox(Prompt:= "Desea salir de la aplicacin?", _


Buttons:=vbYesNo + vbQuestion, _
Title:="Gestin de ventas") = vbYes Then
Application.Quit
End If

Tambinsepuedemodificarelordendelosparmetros:

If MsgBox(Prompt:= "Desea salir de la aplicacin?", _


Title:="Gestin de ventas", _
Buttons:=vbYesNo + vbQuestion) = vbYes Then
Application.Quit
End If

El nombre de los argumentos aparece automticamente en el entorno VBE a medida que se escribe la instruccin.
Losargumentosopcionalesaparecenentrecorchetes.

9.Llamaraunprocedimiento
Sintaxis

[Call] NomProc [lista de argumentos]


SiseindicalapalabraclaveCall,debecolocarlalistadeargumentosentreparntesis.
Paraalmacenarelresultadodeunafuncinenunavariable,uselasiguientesintaxis:
<variable> = NomProc ( [lista de argumentos] )
Parallamaraunprocedimientodeotromdulo,uselasiguientesintaxis:
NomMdulo.NomProcedimiento

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

33

- 5-

Ejemplo

ThisWorkbook.Salir_Apli

Parallamaraunprocedimientodeotrolibro,uselasiguientesintaxis:
Application.Run "NomLibro!NomMdulo.NomProcedimiento"
Ejemplo

Application.Run "Ventas.xlsm!ThisWorkbook.Salir_Apli"

Paraejecutarestecomando,ellibroVentas.xlsmdebeestarabierto.

10.LlamaraunafuncinVBAenunafrmuladeExcel
Las funciones VBA se pueden usar en las frmulas de Excel. Todas las funciones declaradas en Public estn
disponiblesenelasistenteparafuncionesdeExcel(categoraFuncionesDefinidasporelusuario).
Ejemplo
EsteejemplousaunafuncinVBAquecalculalaedaddeunapersonaapartirdesufechadenacimiento.

Function CalcEdad(fechaNac As Date)


Dim zFecha As Date
Calcula la edad en funcin de la fecha de nacimiento
CalcEdad = Abs(DateDiff("YYYY", fechaNac, Date))
zFecha = DateAdd("YYYY", CalcEdad,

fechaNac)

If zFecha > Date Then CalcEdad = CalcEdad - 1


End Function

ParausarestafuncinenExcel:
SeleccionelaopcinInsertarfuncindelapestaaFrmulas.
Enelcuadrodedilogo Insertarfuncin,enlalistaO seleccionar una categora,elijaDefinida por el
usuariolafuncinCalcEdadestarahoraaccesible:

- 6-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

34

SeleccionelafuncinyhagaclicenAceptarelcuadrodedilogolepedirlosargumentosdelafuncin,
comoseveaqu:

Este ejemplo muestra la importancia del nombre de los argumentos de las funciones: cuanto ms explcitos sean
estos,msfcilresultarusarlafuncinenExcel.

Ahorapuedemodificarlafrmulaparaincluireltexto"aos"yextenderlafrmulaatodalalista.
ElresultadoenExceleselsiguiente:

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

35

- 7-

11.Ejemplosdeprocedimientosyfunciones
CopiarelcontenidodeunatabladevaloresenlahojadeExcelactiva.

Sub Mostrar_Tabla()
Dim vTabVal As Variant
Dim oCelda As Range
Dim i As Integer
Muestra el contenido de la tabla en la hoja de clculo activa
vTabVal = Array("Buenos Das", 1.244, "=A1+12", "=A2+12")
For i = 0 To 3
Set oCelda = Range("A" & i + 1)
If MCell(oCelda, vTabVal(i)) Then
MsgBox "La celda se actualiz con xito"
Else
MsgBox "La celda no se pudo actualizar"
End If
Next i
End Sub

ElcdigodeestosejemplossedebeescribirenunmduloestndaroenelmduloThisWorkbook.

LafuncinMCellinformasobreelvalorasignadoaunacelda.DevuelveTruesilaceldaseactualizcorrectamente,y
Falseencasocontrario.

Private Function MCell(oCelda As Range, _


Valor As Variant) As Boolean
Actualizacin de una celda a partir de un valor
MCell = False
If Not IsEmpty(oCelda) Then Exit Function
oCelda.Value = Valor
If oCelda.Text <> "#VALOR!" Then
MCell = True
End If
- 8-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

36

End Function

Sipruebaesteejemplo,obtendrelsiguienteresultado:

Laterceraceldanosepudoactualizar.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

37

- 9-

Variables
Las variables permiten almacenar valores intermedios durante la ejecucin del cdigo VBA para usarlos luego en
clculos,comparaciones,pruebas
Las variables se identifican por un nombre que permite hacer referencia al valor que contienen y un tipo que
determinalanaturalezadelosdatosquepuedenalmacenar.

1.Tiposdevariables
Numricas

Tipo

Rango

Tamaoen
bytes

Byte

0a255

Integer(entero)

32768a32767

Long(enterolargo)

2147483648a2147483647

Single(realsimpledecoma

3,402823E38a1,401298E45

flotante)

(valoresnegativos)
1,401298E45a3,402823E38
(valorespositivos)

Double(realdobledecoma

1,79769313486231E308a4,94065645841247E324

flotante)

(valoresnegativos)

4,94065645841247E324 a1,79769313486231E308
(valorespositivos)
Currency(monetariode

922337203685477,5808a922337203685477,5807

puntofijo)
Decimal

+/79228162514264337593543950335sinseparador

12

decimal
+/7,9228162514264337593543950335con28cifrasala
derechadelseparadordecimal
elmenornmerodistintodeceroes+/
0.0000000000000000000000000001

Cadenasdecaracteres
EltipoesString.Existendostiposdecadenas:

Lascadenasdelongitudvariablepuedenconteneraproximadamentedosmilmillonesdecaracteres.

Lascadenasdelongitudfijapuedencontenerde1aaproximadamente64 KBdecaracteres.

Ejemplo

Cadena de longitud variable


Dim sDomicilio As String
Cadena de longitud fija (20 caracteres)
Dim sNombre As String * 20

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

38

- 1-

Booleanolgica
El tipo esBoolean(obooleano).LavariablepuedetomarlosvaloresTrue(Verdadero)oFalse(Falso),queessu
valorpordefecto.Ocupadosbytes.

Fecha
El tipo es Date. La variable puede tomar los valores de fecha y de hora del 1 de enero del ao 100 al 31 de
diciembrede9999.Ocupaochobytes.

Variant
LasvariablesdetipoVariantpuedencontenerdatosdetodotipo,ademsdelosvaloresespecialesEmpty,Errory
Null.
UsareltipodedatoVariantofrecemsflexibilidadeneltratamientodedatos.Porejemplo,siunavariabledetipo
Variantcontienecifras,sepuedeusarsuvalorrealosurepresentacinenformadecadena,segnelcontexto.
De todas formas, las variables de tipo Variant requieren 16 bytes de memoria para nmeros y 22 bytes ms la
longitud de la cadena para los caracteres esto puede ser perjudicial en el caso de procedimientos largos o en
mduloscomplejos.
Ejemplo

Sub Variable_Variant()

Declaracin de la variable "Valx" como Variant


Dim Valx As Variant

Asignacin de una sucesin de valores a la variable

y mostrar el tipo del resultado

10 retorna un valor de tipo Integer


Valx = 10
MsgBox Valx & " es de tipo " & TypeName(Valx)

Ejemplo que retorna un valor de tipo String


Valx = "Ejemplo"
MsgBox Valx & " es de tipo " & TypeName(Valx)

Esta multiplicacin retorna un valor de tipo Double


Valx = 12500.32 * 1E+21
MsgBox Valx & " es de tipo " & TypeName(Valx)

#1/1/99# retorna un valor de tipo Date


Valx = #1/1/99#
MsgBox Valx & " es de tipo " & TypeName(Valx)

True retorna un valor de tipo Boolean


Valx = True
MsgBox Valx & " es de tipo " & TypeName(Valx)

End Sub

Objeto
El tipo es Object. Para crear una variable que contenga un objeto, comience por declarar la variable como tipo

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

39

Objetoyluegoasgneleunobjeto.
ParadeclararunavariableObjeto:
Sieltipodeobjetonoseconoce,uselasintaxis:
InstruccinDeDeclaracin NomVariable As Object
Siseconoceeltipodeobjeto,uselasintaxis:
InstruccinDeDeclaracin NomVariable As TipoObjeto
Ejemplo

Sub Variables_Objeto()

oTest se declara como objeto

ShtNomCli se declara como hoja de clculo

oGrafico se declara como grfico


Dim oTest As Object
Dim ShtNomCli As Worksheet
Dim oGrafico As Chart

End Sub

ParaasignarleunobjetoaunavariableObjeto,uselainstruccinSet:
Set NomVariable = ObjetoaAsignar
Ejemplo
Declaracin de una variable ZonaTest destinada a contener un objeto Range y asignacin de las celdas A6 a B15 a esta
variable:

Dim oZonaTest As Range


Set oZonaTest = Range("A6:B15")

Parafinalizarlaasociacinentreunavariableyunobjetodeterminado,uselasiguientesintaxis:
Set NomVariable = Nothing

Definidoporelusuario(opersonalizado)
LostiposdedatospersonalizadossecreanconlainstruccinTypeusadaaniveldemdulo.
Sintaxis

Type NomTipoPerso
NomElemento1 As TipoDatos
NomElemento2 As TipoDatos
...
End Type

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

40

- 3-

Ladefinicindeltiposolamentesepuedehacerenlaseccindedeclaracindeunmdulo.
Ejemplo
DeclaracindeuntipopersonalizadoconstituidoporunaletrayunnmeroenteroenelmdulodecdigoProGene.

UsodeltipopersonalizadoparacontrolarloscdigosdeartculosintroducidosdelaceldaB6alaceldaB11delahojadeclculo
activa.Encasodeerror,semuestraunmensaje.

2.Declaracindevariables
Paracrearunavariable,debedeclararla,esdecir,darleunnombre.Luegopuedeusaresenombreparamodificarel
valordelavariable,usaresevalor,etc.
LadeclaracindevariablesenVBApuedeserimplcitaoexplcita.

a.Declaracionesimplcitas
- 4-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

41

Se hacen directamente al asignar un valor a un nombre de variable. El tipo de datos ser entonces el tipo por
defecto,osea,Variant.
Ejemplo

i = 12
dImporte = 12000
sNombre = "Juan Carlos"

b.Declaracionesexplcitas
Requieren el uso de una instruccin de declaracin (Dim, Public, Private, etc.). Si el tipo de la variable no se
indica,lavariableresultardeltipopordefecto,osea,Variant.
Se puede imponer la declaracin implcita de variables usando la instruccin Option Explicit en la seccin de
declaracin de cada mdulo. Para insertar esta instruccin automticamente en cada nuevo mdulo, active la
opcinRequerirdeclaracindevariablesdelmenHerramientasOpcionespestaaEditor.
Ejemplo

Dim I
Private dImporte As Double
Public sNombre as String

ParaoptimizarlavelocidaddeejecucindelcdigoVBA,serecomiendadeclararlasvariablesenformaexplcita.

c.Sintaxisdelasinstruccionesdedeclaracin
<InstruccindeDeclaracin> NomVariable [As <TipodeDatos>]
DondeInstruccindeDeclaracincorrespondeaunadelassiguientescuatroinstrucciones:Dim,Public,Privateo
Static.

Dim

LasvariablesdeclaradasconlainstruccinDimaniveldemduloestndisponiblesparatodos
los procedimientos del mdulo. No son accesibles desde ningn otro mdulo. Las variables
declaradas con la instruccin Dim a nivel de procedimiento solamente estn disponibles
dentrodelprocedimiento.

Private

Solamente a nivel de mdulo. Las variables Private solamente estn disponibles para el
mduloenelquesondeclaradas.

Public

Solamente a nivel de mdulo. Las variables declaradas con la instruccin Public son
accesibles desde el conjunto de mdulos de todos los proyectos de Excel abiertos. Si la
instruccin Option Private Module se especifica en la seccin de declaracin del mdulo, las
variablessolamentesonpblicasdentrodelproyectoquelasrecibe.

Static

Solamente a nivel de procedimiento. Las variables declaradas con la instruccin Static


conservansuvalormientrasdurelaejecucindelcdigo.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

42

- 5-

3.Declaracindelostiposdevariables
a.Declaracionesexplcitasdeltipo
Eltipodelavariableseespecificaenladeclaracin,traslapalabraclaveAs.
Ejemplo

Sub TotalAcum()
Dim iTotal As Integer
Static iAcum As Integer
iTotal = iTotal + 10
iAcum = iAcum + 10

Devuelve 10 en cada ejecucin del procedimiento


MsgBox iTotal

Devuelve 10 en la primera ejecucin, luego 20 la segunda vez,

30 la tercera, etc.
MsgBox iAcum

End Sub

Puede declarar ms de una variable en una misma instruccin, pero atencin, el tipo de datos solo se tendr en
cuentaparalaltimavariable,eltipoVariantseasignaralasotras.

b.Declaracionesimplcitasdeltipo
EltipodevariablesedeclarausandounsufijoenelmomentodesuutilizacinoporlainstruccinDefType.

Empleodeunsufijo
Debeagregarunodelossiguientescaracteresalnombredelavariable:

Sufijo

Tipodedatos

Integer

&

Long

Single

Double

Currency

String

Ejemplo
DeclaralavariablecomotipoCadena(String).

Dim Nombre$

DeclaralavariablecomotipoMonetario(Currency).

- 6-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

43

Dim Deuda@

DefType
Estasinstruccionesseempleanenlazonadedeclaracindelmdulo,paradefinirlostiposdedatospordefecto
delasvariablescuyosnombrescomienzanporloscaracteresespecificados.
ListadeinstruccionesDefType:

Instruccin

Tipodedatos

DefBool

Boolean

DefDbl

Double

DefInt

Integer

DefDate

Date

DefLng

Long

DefStr

String

DefCur

Currency

DefObj

Object

DefSng

Single

DefVar

Variant

DefByte

Byte

Ejemplo
Todas las variables cuyos nombres comienzan por una letra comprendida entre I y K y por la letra N son variables de tipo
entero(Integer).

DefInt I-K,N

LasvariablesquecomienzanporunaletracomprendidaentreAyHserndetipocadena(String).

DefStr A-H

La instruccin siguiente declara la variable Identificador como tipo Variant y las variables Superficie y Latitud como tipo
Entero.

Dim Identificador, Superficie As Integer


Dim Latitud As Integer

c.Convencindenombresdevariables
Se recomienda utilizar una convencin de nombres para las variables. Permiten estandarizar el cdigo y hacerlo
mslegibleymsfcildemantenerpordiferentesdesarrolladores.
Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

44

- 7-

Laconvencinconsisteenutilizardosprefijosenelnombredelasvariables:

Elprimeroparaindicarelmbitodelavariable:popbopb_parapblica,momoparamdulo,yningnprefijo
paralaslocales.

Lasegundaparaindicarsutipo.
Tipo

Prefijo

Ejemplo

Boolean

bobln

bVisibleoblnVisible

Double

dodbl

dTotalodblTotal

Integer

ioint

iEdadointEdad

Long

lolng

lCanTotolngtCanTot

Object

ouobj

oCeldauobjCelda

String

sostr

sNombreostrNombre

Variant

vovar

vParamovarParam

4.Matrices
Puedecrearunavariablematrizcuandonecesitetrabajarconungrupodevaloresrelacionados.
Paracrearunavariablematriz,uselasiguientesintaxis:
<InstruccinDeDeclaracin> NomMatriz(ndices) [As<TipodeDatos>]
Dondepara(ndices):

Siseomiteesteargumento:lamatriztendrdimensinlibre.

Siseindicaunvalor:lamatriztendrunnmerodeterminadodeelementos.

Si se indica LimiteInf To LimiteSup:lamatriztendrunnmerodeelementosdeterminadoynmerosdendice


especficos.

Pordefecto,elvalormenordelndicedeunamatrizes0.
Paramodificarelvalormenordelndice,uselainstruccinOption Base MenorValorndiceenlaseccinde
declaracindelmduloouselasintaxisLimiteInf To LimiteSupenelargumento(ndices).
Paradefinirelcontenidodeunamatriz,uselafuncinArray(lavariabledebeserunatabladedimensin
libre) o despliegue los datos en una hoja o asigne una por una cada variable de la matriz usando los
ndices.
Ejemplo
Elsiguienteejemplomuestra,enlahojaactivadeExcel,lalistadelosfactoresdeconversinaeurosparacincopases.

Const FacFRF = 6.55957


Const FacBEF = 40.3399
Const FacDEM = 1.95583
Const FacESP = 166.386

- 8-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

45

Const FacITL = 1936.27


---------------------------------------------------------------Sub Muestra_Factor()
Dim Pais As Variant
Dim Factor(5) As Double
Dim i As Integer
Lista de pases
Pais = Array("Francia", "Blgica", "Alemania", _
"Espaa", "Italia")
Lista de los factores por pas
Factor(0) = FacFRF
Factor(1) = FacBEF
Factor(2) = FacDEM
Factor(3) = FacESP
Factor(4) = FacITL
Muestra los pases y sus factores en la hoja de clculo Euro
For i = 0 To 4
With Sheets ("Euro")
.Cells(i + 1, 1) = Pais(i)
.Cells(i + 1, 2) = Factor(i)
End With
Next i
End Sub

Enesteejemplo,tambinesposibleusarunamatrizdedosndices.ElcdigoVBAdelprocedimientoquedacomosigue:

Sub Muestra_Factor2
Matriz de dos ndices
Dim TabFactor(5, 1)
Dim i As Integer
Lista de pases y sus factores
TabFactor(0, 0) = "Francia"
TabFactor(0, 1) = FacFRF
TabFactor(1, 0) = "Blgica"
TabFactor(1, 1) = FacBEF
TabFactor(2, 0) = "Alemania"
TabFactor(2, 1) = FacDEM
TabFactor(3, 0) = "Espaa"
TabFactor(3, 1) = FacESP
TabFactor(4, 0) = "Italia"
TabFactor(4, 1) = FacITL
Muestra los pases y sus factores en la hoja de clculo Euro
For i = 0 To 4
With Sheets ("Euro")
.Cells(i + 1, 1) = TabFactor(i, 0)
.Cells(i + 1, 2) = TabFactor(i, 1)
End With
Next i

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

46

- 9-

End Sub

5.Constantes
Unaconstantepermiteasignarunnombreexplcitoaunvalor.

a.Constantespersonalizadas
LadeclaracindeunaconstantesehaceconlainstruccinConstenlaseccindedeclaracindeunmdulooen
unprocedimiento.

Const NomConstante [As <TipoDato>] = <expresin>


El tipo de dato no puede ser un objeto (Object) ni un tipo personalizado

As TipoDato

(Type).
No puede ser una funcin definida por el usuario, ni una funcin intrnseca de

expresin

VisualBasic.

Ejemplo
Declaracindealgunasconstantes.

Sub Constantes()

Ejemplos de constantes autorizadas:

Const Val1 = "Mega+"


Const Val2 = 148
Const Val3 = 125.45

El tipo de datos es Double

Const Val4 As Single = 125.45

Permite ahorrar memoria


Const Val5 = Val2 * Val3
Const Val6 = Val1 & " cuesta " & Val2

Ejemplo de constante no autorizada:

Por el uso de una funcin VB

Const Val6 = Fix(Val4)


End Sub

Paracrearunaconstanteaccesibleatodosloslibrosabiertos,sedebedeclararenlaseccindedeclaracindeun
mduloysituarlainstruccinPublicantesdelainstruccinConst.

b.Constantesintegradas
LasconstantesusadasporlosobjetosdeMicrosoftExcelvanprecedidasporlasletras"xl"lasconstantesusadas
conotrasinstruccionesyfuncionesdeVisual Basicvanprecedidasporlasletras"vb",ylasconstantesdeMicrosoft
Office vanprecedidasporlasletras"mso".
Paramostrarlalistadeconstantesintegradas,abraelexaminadordeobjetoshaciendoclicenelicono
opulsandolatecladefuncin[F2].EscribalapalabraconstantsenlalistadesplegableTextode

- 10 -

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

47

bsqueda(lasegundasituadaalaizquierda)yluegohagaclicenelicono

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

48

- 11 -

Estructurasdedecisin
Esconvenientetestearlascondicionesespecficasantesdeejecutarlasinstrucciones.
Las estructuras de decisin, llamadas tambin alternativas o bifurcaciones condicionales, permiten, tras una
evaluacin,optarporunouotrobloquedecdigo.
Sedistinguendosinstruccionesdebifurcacincondicional:

If...Then...Else

Select...Case

LafuncinIIftambinsepuedeusarparadefinirunvalorenfuncindeunacondicin.Ejemplo:Port=IIf(Cantidad<
100,100,0).

1.InstruccinIf
Permiteejecutarciertasinstruccionesenfuncindelresultadodeunacondicin.

If...Then

If <condicin> Then <instruccin> [:<instruccin>]

Sihayvariasinstrucciones,seprelasporelsignodepuntuacin:(dospuntos).Estasintaxisseusaespecialmente
parapruebascortasysimples.
Ejemplo
SilaceldaA1estvaca,emiteunbipymuestraunmensaje.

Sub Test_Celda_A1()
If IsEmpty(Range("A1")) Then Beep: MsgBox "Olvid el ttulo"
End Sub

If...Then...EndIf

If <condicin> Then
<instruccin1>
<instruccin2>
...
End If
Ejemplo

Sub Test_Titulo()

Si la celda A1 no est vaca

entonces ponerla en negrita y pintarla de rojo

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

49

- 1-

If Not IsEmpty(Range("A1")) Then


With Range("A1")
.Font.Bold = True
.Interior.ColorIndex = 3
End With
End If
End Sub

If...Then...Else...End If

If <condicin> Then
<instrucciones>
Else
<instrucciones>
End If
Ejemplo
Alcambiarlamoneda(oUS$)delaceldaC3,modificarelformatodelrangoD6:F11.

Private Sub Workbook_SheetChange(ByVal Sh As Object, _


ByVal Target As Range)

Modifica la celda C3 de la hoja Artculos

If Sh.Name = "Artculos" And Target.Address = "$C$3" Then


Aplicar_Formato
End If
End Sub

Esteprocedimientomodificaelformatodelasceldasenfuncindelamonedaelegida.

Sub Aplicar_Formato()

Formato o $

Range("D6:F11").NumberFormat = "0.00"
If UCase(Range("C3")) = "EURO" Then
Range("D6:F11").NumberFormat = "0.00 "
Else
Range("D6:F11").NumberFormat = "0.00"" $"""
End If
End Sub

If...Then...ElseIf...Else...EndIf

If <condicin> Then
<instrucciones>
ElseIf <condicin> Then
<instrucciones>
ElseIf <condicin> Then
<instrucciones>
...

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

50

...
Else
<instrucciones>
End If
Ejemplo
Esteprocedimientomodificalostextosdelasceldasseleccionadas:silaltima letraesminscula,pasatodoamaysculassi
no,pasatodoaminsculasconlaprimeraletraenmayscula.

Sub Mayus_Minus()
Dim oCelda As Range
Dim iCodAscii As Integer

Recorre las celdas de la seleccin

For Each oCelda In Selection


If IsEmpty(oCelda) Then
Beep
MsgBox "La celda " & oCelda.Address & " est vaca"
Else

Cdigo Ascii de la ltima letra

iCodAscii = Asc(Right(oCelda, 1))

Si est en maysculas

If iCodAscii >= 65 And iCodAscii <= 90 Then


oCelda.Value = UCase(Left(oCelda, 1)) _
& LCase(Right(oCelda, Len(oCelda) - 1))

Si est en minsculas

ElseIf iCodAscii >= 97 And iCodAscii <= 122 Then


oCelda.Value = UCase(oCelda)
Else
MsgBox "El ltimo carcter de la celda: " _
& oCelda.Address & " no es una letra"
End If
End If
Next
End Sub

2.InstruccinSelectCase
SelectCase
Ejecutaunasecuenciadeinstruccionesespecficasenfuncindelvalordeunaexpresin.

Select Case <ExpresinTest>


Case <ListaExpresiones>
<instrucciones>
Case <ListaExpresiones>
<instrucciones>
...
...
Case Else

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

51

- 3-

<instrucciones>
End Select

<listaExpresiones>puedetomarunadelassiguientesformas:

valor(ejemplo:Case 10)

listadevalores(ejemplo:Case 1, 5, 10)

rangodevalores(ejemplo:Case 1 To 5)

expresincondicional(ejemplo:Case Is >= 5)

Ejemplo
Llamadaaunprocedimientoquedeterminalafrmuladeclculodeltotalenfuncindelacantidad,delprecioydelflete.

Private Sub Calc_Total()

Llama a la funcin Total usando como parmetros

las celdas Cant, Precio y Flete

Range("D2") = Total(Range("A2"), Range("B2"), Range("C2"))


End Sub

La funcin Total devuelve una frmula de Excel. El flete es gratuito a partir de dos unidades pedidas el porcentaje de
descuentotambindependedelacantidadpedida.

Function Total(oCant As Range, oPrecio As Range, oFlete As Range) _


As String

Determinacin de la frmula de clculo del total

en funcin de la cantidad ordenada

Select Case oCant


Case 1
Total = "=" & oPrecio.Address & "+" & oFlete.Address
Case 2 To 10
Total = "=" & oCant.Address & "*" & oPrecio.Address
Case 11 To 100
Total = "=" & oCant.Address & "*" & oPrecio.Address & "* 0.95"
Case 101 To 1000
Total = "=" & oCant.Address & "*" & oPrecio.Address & "* 0.9"
Case Else
Total = "Error en la cantidad"
End Select
End Function

- 4-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

52

Estructurasenciclo
Lasestructurasenciclo(orepetitivas)permitenrepetirlaejecucindeunconjuntodeinstrucciones.
Sedistinguenvariostiposdeestructurasenciclo:

Do...Loop

While...Wend

For...Next

ForEach...Next

Do...LoopyWhile...Wendrepitenlasoperacionesenfuncindeunaciertacondicin,mientrasqueFor...Nextrepite
lasoperacionesunacantidaddevecesdeterminadaporuncontador.
ForEach...Nextpermiterecorrerloselementosdeunacoleccin.

1.InstruccinDo...Loop
Ejecutaunbloquedeinstruccionesunnmeroindeterminadodeveces.
Sintaxis1
Lasinstruccionesseejecutan,mientrasquelacondicindevuelveelvalorTrue.

Do While <Condicin>
<Instrucciones>
Loop

Sintaxis2
Lasinstruccionesseejecutanunaprimeravezsincondiciny,luego,mientraslacondicindevuelvaTrue.

Do
<Instrucciones>
Loop While <Condicin>
Ejemplo
El siguiente cdigo solicita al usuario que escriba un nmero mientras que el valor introducido no sea numrico o superior a
100.

Sub Introducir_Numero ()
Dim vRespuesta as Variant
Do
vRespuesta = InputBox("Introduzca un nmero > 100")
Loop While (Not IsNumeric(vRespuesta) Or vRespuesta <= 100)
End Sub

Sintaxis3

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

53

- 1-

LasinstruccionesseejecutanhastaquelacondicintomaelvalorTrue(mientrasquelacondicindevuelvaelvalor
False).

Do Until <Condicin>
<Instrucciones>
Loop

Sintaxis4
LasinstruccionesseejecutanunaprimeravezsincondicinyluegohastaquelacondicindevuelvaelvalorTrue.

Do
<Instrucciones>
Loop Until <Condicin>
Ejemplo
Elsiguientecdigosolicitaalusuarioqueescribaunnmerohastaqueelvalorintroducidoseanumricoymayorque100.

Sub Introducir_Numero()
Dim vResponse as Variant
Do
vResponse = InputBox("Introduzca un nmero > 100")
Loop Until (IsNumeric(vResponse) And vResponse > 100)
End Sub

2.InstruccinWhile...Wend
Ejecutaunaseriedeinstruccionesenunciclomientrassecumplelacondicinespecificada.
Sintaxis

While <condicin>
<instrucciones>
Wend
Ejemplo

Sub Introducir_Precio()

Pide la introduccin de un precio mientras que

sea vaco o incorrecto

While IsEmpty(Range("C9")) Or Not IsNumeric(Range("C9"))


Range("C9") = InputBox("Introduzca el precio del producto")
Wend
End Sub

3.InstruccinFor...Next
- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

54

Ejecutaunbloquedeinstruccionessegnelvalordeuncontador.

For <contador>=<inicio> To <fin> [Step <incremento>]


<instrucciones>
Next
Ejemplo
El siguiente cdigo muestra un procedimiento que inserta los totales trimestrales en una matriz de resultados mensuales
adems,elprocedimientoeliminalostotalessiyaloshaba.

Sub Totales_Trimestrales()
Dim iTrim As Integer
Dim i As Integer
Dim oCelda as Range

Inserta los totales trimestrales cada 3 meses,

los pone en negrita con un borde

iTrim = 1
For i = 5 To 17 Step 4
If Left(Cells(2, i), 4) <> "Trim" Then
Cells(2, i).EntireColumn.Insert
Cells(2, i) = "Trim. " & iTrim
iTrim = iTrim + 1
Range(Cells(3, i), Cells(11, i)).Select
Selection.FormulaR1C1 = "=SUM(RC[-3]:RC[-1])"
Range(Cells(2, i), Cells(11, i)).Font.Bold = True
For Each oCelda In Range(Cells(2, i), Cells(11, i))
oCelda.BorderAround ColorIndex:=1, Weight:=xlThin
Next oCelda
End If
Range("A1").Activate
Next
End Sub
________________________________________________________________
Sub Suprime_Totales_Trimestrales()
Dim i As Integer

Suprime los totales trimestrales si ya los haba

For i = 5 To 17
If Left(Cells(2, i), 4) = "Trim" Then
Cells(2, i).EntireColumn.Delete
End If
Next i
End Sub

Este procedimiento muestra en la hoja de clculo "Colores" los diferentes colores de relleno y el valor de la propiedad
ColorIndexcorrespondiente.

Sub Muestra_Colores()
Dim i As Integer
With Sheets("Colores")
For i = 1 To 56
Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

55

- 3-

Cells(i, 1).Interior.ColorIndex = i
Cells(i, 2) = i
Next i
End With
End Sub

4.InstruccinForEach...Next
Ejecutaunbloquedeinstruccionesparacadaelementodeunacoleccindeobjetos odeunamatriz.

For Each <elemento> In <Grupo>


<Instrucciones>
Next <elemento>
Ejemplo
Esteprocedimientoaplicauncolordeletraalasceldasenfuncindesucontenido.

Sub Colores_Celda()
Dim oZonaaModificar As Range
Dim oCelda As Range
Aplica un color en funcin del valor de la celda
Set oZonaaModificar = Range("B3:Q11")
For Each Celda In oZonaaModificar
Select Case oCelda
Case Is < 1000
oCelda.Font.Color = RGB(150, 150, 250)
Case Is < 5000
oCelda.Font.Color = RGB(90, 100, 250)
Case Is < 10000
oCelda.Font.Color = RGB(10, 20, 250)
Case Is < 20000
oCelda.Font.Color = RGB(5, 10, 175)
Case Else
oCelda.Font.Color = RGB(5, 5, 100)
End Select
Next
End Sub

Ejecucindevariasaccionessobreunobjeto

With objeto
<Instrucciones>
End With
Ejemplo

Sub Paginacion()
- 4-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

56

Define la paginacin de la hoja activa


Redimensiona las columnas y procede con la impresin
With ActiveSheet
With .PageSetup
.Orientation = xlLandscape
.LeftMargin = Application.InchesToPoints(0.5)
.RightMargin = Application.InchesToPoints(0.5)
.TopMargin = Application.InchesToPoints(0.5)
.BottomMargin = Application.InchesToPoints(0.5)
.LeftHeader = ""
.CenterHeader = "&A"
.RightHeader = ""
.LeftFooter = ""
.CenterFooter = "Page &P"
.RightFooter = ""
End With
.Columns("A:Q").EntireColumn.AutoFit
.PrintOut
End With

End Sub

5.Salirdelasestructurasdecontrol
La instruccin Exit For permite salir directamente de un ciclo For o For Each, mientras que Exit Do sale
directamentedeuncicloDo.
Ejemplo

Sub Introducir_Fecha()
Dim vValor as Variant

Fuerza la introduccin de una fecha en la celda A1

Si no se introduce ningn valor: se sale del ciclo

Range("A1") = ""
Do While Not IsDate(Range("A1"))
strVal = InputBox("Escriba una fecha")
If vVal <> "" Then
If IsDate(vVal) Then Range("A1") = vVal
Else
Exit Do
End If
Loop
End Sub

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

57

- 5-

Reglasdeescrituradelcdigo
1.Comentarios
LoscomentariospermitendocumentarelcdigoVBAparahacerlomslegible.

REM comentario

comentario

Alvalidarlalneadecomentario,estasemuestra,pordefecto,enverde.

2.Carcterdecontinuacin
UnainstruccinVBApuedeescribirseenmuchaslneasusandounguinbajo"_"precedidodeunespacio.
Ejemplo

Pide la introduccin de un precio en tanto que

est vaco o sea incorrecto

Dim vPrecio as Variant


Do While IsEmpty(vPrecio) Or Not IsNumeric(vPrecio) _
Or vPrecio < 50 Or vPrecio > 500
vPrecio = InputBox("Escribir un importe comprendido entre " _
& "50 y 500 ")
Loop

3.Sangras
Lassangras(otabulaciones)permitenunamayorlegibilidaddelcdigo.Esespecialmenteimportanteusarlasenlas
estructurasdecontrol(sobretodosihayvariasinstruccionesIfanidadas)ylasestructurasdedecisin.
Paragenerarlassangras,uselatecla[Tab].
Pararetrocederalatabulacinprecedente,uselasteclas[Mays][Tab].
Paramodificareltamaodelatabulacin(cuatroespaciospordefecto),seleccioneOpcionesenelmen
Herramientas,hagaclicenlapestaaEditorymodifiqueelvalorAnchodetabulacin.

4.Nombresdelosprocedimientos,variablesyconstantes
Losnombresdelosprocedimientos,constantes,variablesyargumentosdebenrespetarlassiguientesreglas:

Elprimercarcterdebeserunaletra.

Nosediferencianminsculasdemaysculas(seaceptanletrasacentuadas),aunqueserespetanunasyotras.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

58

- 1-

- 2-

NoseusannombresreservadosenVisualBasicopalabrasclaveconrestricciones.

Noseusanelpunto,elespacionilossignos!,$,#y@.

Unnombrenopuedetenermsde255caracteres.

ParalosprocedimientosFunction,noseusaunnombreigualaunareferenciadecelda.

Noseindicanvariasveceslosmismosnombresdevariablesydeconstantesenunmismoniveldealcance.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

59

Operadores
Losoperadorespermitenrealizaroperacionesaritmticasconvariablesoconstantes,compararvariablesentreellas,
evaluarvariascondiciones,etc.
Sedistinguenvariostiposdeoperadores:

Operadoresaritmticos.

Operadoresdecomparacin.

Operadoreslgicos.

Operadordeconcatenacin.

El operador de asignacin es el signo = . El valor de la expresin situada a la derecha del signo igual se asigna a la
variablesituadaalaizquierdadelsigno(ejemplo:IntA=12,IntA=Intb*12).

1.Operadoresaritmticos
Permitenefectuarclculosaritmticosconvariablesoconstantes.

Operador

Clculorealizado

Adicin

Sustraccin

Divisinconresultadodeunnmeroconcomaflotante

Mod

Restodeladivisinentredosnmeros

Divisinconresultadoentero

Multiplicacin

Potenciacin

2.Operadoresdecomparacin
Comparandosvaloresodoscadenasdecaracteres.

Operador

Clculorealizado

<

Menorque

<=

Menoroigualque

>

Mayorque

>=

Mayoroigualque

Iguala

<>

Distintode

LainstruccinOptionCompareutilizadaaniveldemdulopermitedeclararelmtododecomparacinpordefecto
queconvieneusarenlacomparacindecadenas.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

60

- 1-

Puedetomarunodeestostresvaloresposibles:

La opcinCompare Binary(opcinpordefecto)realizalacomparacindecadenasbasadaenelordenderivadode
larepresentacinbinariainternadeloscaracteres:A<B<E<Z<a<b<e<z<<<<<...

Laopcin CompareTextrealizalacomparacindecadenassindistinguirmaysculasdeminsculas:(A=a)<(=)
<(B=b)<(E=e)<(=)<(Z=z)<(=)...

La opcin Compare Database realiza la comparacin de cadenas basada en el orden determinado por el
identificadordeparmetrosregionalesdelabasededatosenlaqueserealizalacomparacindecadenas.

3.Operadoreslgicos
Permitenevaluarsimultneamentedos(oms)valoresbooleanosoexpresionesquedevuelvenestetipodevalor.
GeneralmenteseusanconlainstruccinIf.

Operador
AND

Clculorealizado
SitodaslasexpresionestienenelvalorTrue,elresultadoesTrue.Siunadelasexpresiones
tieneelvalorFalse,elresultadoesFalse.

OR

SiporlomenosunadelasexpresionestieneelvalorTrue,elresultadoesTrue(o
inclusivo).

XOR

SiunaysolounadelasexpresionestieneelvalorTrue,elresultadoesTrue(oexclusivo).

NOT

Devuelveelcontrariodelaexpresin.

Eqv

DevuelveTruesilasdosexpresionessonidnticas.

Ejemplo

(A>=1) AND (A=<9) devuelve True si A est comprendido entre 1 y 9,


NOT (A >= 10) devuelve True si A es estrictamente menor que 10,
(A>0) OR (B>0) OR (C>0) devuelve True si al menos uno de los
valores es positivo.

4.Operadordeconcatenacin
Eloperadordeconcatenacineselsigno&.Enganchacadenasdecaracteres,valoresyexpresiones.
Ejemplo
Concatenacindelapellidoyelnombre.

SApeNom = sApellido & " " & sNombre

5.Prioridaddelosoperadores
Cuandohayvariosoperadoresenunamismaexpresin,cadaunodeellosseevalaenunordenpredeterminado,
llamadoprioridaddelosoperadores.

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

61

Losoperadoresseevalanenelsiguienteorden:operadoresaritmticos,operadoresdecomparacin,operadores
lgicos.
Los operadores de comparacin tienen la misma prioridad es decir, son evaluados por orden de aparicin, de
izquierdaaderecha.
Losoperadoresaritmticosylgicosseevalanenelsiguienteordendeprioridad:

Aritmtico

Lgico

Not

*,/,\

And

Mod

O r

+,

Xor
Eqv

Elusodeparntesispermitemodificarlaprioridadparaqueunelementodeunaexpresinseaevaluadoantesque
losotros.Lasoperacionesencerradasentreparntesissiempreseevalanantesquelasotras.
Ejemplo

La expresin "3 + 4 * 5" da como resultado 23.


La multiplicacin (4 * 5) se efecta antes que la adicin ( + 3)
La expresin "(3 + 4) * 5" devuelve 35. La adicin se efecta con
prioridad.

Seaconsejausarparntesisparamejorarlalegibilidaddelcdigo.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

62

- 3-

Presentacin
VBAExcelesunlenguajedeprogramacinorientadoaobjetos,sibiennodisponedetodaslasfuncionalidadesde
loslenguajesdeestetipo.
LamayoradeloselementosquemanejaExcelsonobjetos:loslibros,lashojasdeclculo,losrangosdeceldas,las
celdas,etc.
Los objetos se organizan segn un modelo jerrquico: ciertos objetos contienen otros objetos que pueden, a su
vez,contenerotros.Estosobjetossellamancontenedoruobjetosparent.Porejemplo,elobjetoApplicationesun
contenedor de objetos Workbook (libros abiertos en Excel), que a su vez contiene objetos Worksheet (hojas de
clculodeunlibro).ElcontenedorprincipaleselobjetoApplication.
Unconjuntodeobjetosdelmismotipoconstituyeunacoleccin(coleccinWorkbooks:conjuntodelibrosabiertosen
ExcelcoleccinWorksheets:conjuntodehojasdeclculodeunlibro).
Unobjetodisponedeunconjuntodecaractersticasllamadaspropiedades(porejemplo,paraelobjetoApplication:
lapropiedad UserNamerepresentaelnombredelusuario,lapropiedadVersiondevuelveelnmerodeversinde
Microsoft Excel) y de comportamientos o acciones llamados mtodos (por ejemplo, para el objeto Application, el
mtodoFindFilemuestraelcuadrodedilogoAbrirelmtodoQuitsaledeExcel,etc.).
Aunobjetolesucedeneventosprovocadosporelusuario(porejemplo:laaperturadeunlibro,unclicenunbotn
decomando,elcambiodelaceldaactiva,etc.)oporelsistema.
Las clases son modelos que permiten crear objetos de un mismo tipo. Los objetos de una misma clase heredan
sistemticamentetodoslosmtodos,propiedadesyeventosdesuclase.EsposiblecrearclasesdeobjetosconVBA
Excelusandomdulosdeclase.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

63

- 1-

ElmodelodeobjetodeExcel
1.Presentacin

2.Principalesobjetosycolecciones
Objetos
Application
ObjetoquehacereferenciaalaaplicacindeMicrosoftExcelactiva.
AutoCorrect

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

64

- 1-

ObjetoquerepresentalosatributosdeautocorreccindeMicrosoftExcel.
AutoRecover
Objetoquerepresentalasopcionesderecuperacinautomticadeunlibro.Estasmacrosson
accesiblesdesdeExcelapartirdelapestaaGuardardelmenHerramientasOpciones.
DefaultWebOptions
ObjetoquedevuelvelosatributosusadosporExcelparalaaperturaograbacindeunapginaweb.
ErrorCheckingOptions
ObjetoquerepresentalasopcionesdecomprobacindeerroresdelaaplicacindeExcel.
LanguageSettings
ObjetoquecontieneinformacinsobrelaconfiguracindeidiomadeExcel.
Speech
Objetoquecontienelosmtodosypropiedadesqueserelacionanconlasfuncionesdesntesisde
voz.
SpellingOptions
Objetoquerepresentalasopcionesdeortografadelaaplicacin.
VBE
ObjetoquerepresentaalEditordeVisualBasic.
WorkSheetFunction
ObjetoquecontienetodaslasfuncionesdisponiblesenExcel.Esteobjetopermiteobtenerelresultado
deunafuncinaplicadaaunrangodeceldas.Ejemplo:Prom=Application.WorksheetFunction.Average
(Selection)

Colecciones
AddIns
Coleccinquecontienetodosloscomplementos(objetosAddIn).
COMAddIns
RepresentaloscomplementosCOMactualmenteinstaladosenMicrosoftExcel.
CommandBars
Coleccindebarrasdeherramientasdelaaplicacinactiva(objetosCommandBar).

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

65

Dialogs
ColeccindeloscuadrosdedilogointegradosdeExcel.
FileExportConverters
ColeccindelosconvertidoresdearchivosparaguardarlibrosdeExcel.
Names
Coleccindetodoslosnombres(celdasyrangosconnombre)dellibroactivo.
ODBCErrors
ColeccindetodosloserroresODBCgeneradosporlaltimaoperacinefectuadaenuninformede
tabladinmicaoenunatabladeconsulta.
OLEDBErrors
ColeccinquerepresentalainformacinrelacionadaconelerrordevueltoporlaconsultaOLE DBms
reciente.
RecentFiles
Coleccindelosltimosarchivosusados.
SmartArtColors
ColeccindelosestilosdecoloresSmartArtcargadosactualmenteenlaaplicacin.
SmartArtLayouts
Coleccindelosdiagramasdediseocargadosactualmenteenlaaplicacin.
SmartArtQuickStyles
ColeccindelosestilosrpidosdeSmartArtcargadosactualmenteenlaaplicacin.
Watches
Coleccindeobjetosquerepresentalosrangosdeinspeccincuandolahojadeclculoserecalcula.
Windows
ColeccindetodaslasventanasdelaaplicacindeExcelodeunlibro.
Workbooks
Coleccindeloslibros(objetoWorkbook)abiertos.
Worksheets
Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

66

- 3-

Coleccindelashojasdeclculo(objetoWorksheet)deunlibro.

- 4-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

67

Principiosdeusodelosobjetosylascolecciones
1.Propiedades
Las propiedades sirven para describir un objeto. Ciertas propiedades son de solo lectura y no se pueden, por lo
tanto,modificarconelcdigoVBA.
Sintaxis

{<objeto> | <variable objeto>}.<propiedad>


Ejemplo

Modificacin del puntero del ratn

Application.Cursor = xlWait

Muestra la versin de la aplicacin de Excel activa

Esta propiedad es de solo lectura

MsgBox Application.Version
Application.Cursor = xlDefault

2.Propiedadesquerepresentanobjetos
Los objetos globales y los objetos definidos en el cdigo a travs de clases manejadas por VBA tienen ciertas
propiedadescuyovalorseactualizaautomticamenteporelsistema.
Estaspropiedadesespecficaspermitenaccederdirectamenteaciertosobjetos:ventanaactiva,libroactivo,celdas
delahojaactiva,etc.Lasiguientetablamuestralaspropiedadesespecficasmsusadas.

Propiedad
ActiveCell

ObjetoParent
ApplicationWindow

Objetodevuelto
ObjetoRangequerepresentalaprimeracelda
activadelaventanaactivaoespecificada.

ActiveChart

ApplicationWindowWorkbook

ObjetoChartquerepresentaelgrficoactivo.

ActiveControl

FramePageUserForm

ObjetoControlquerepresentaelcontrol
(ActiveX)activo.

ActivePane

Window

ObjetoPanequerepresentaelpanelactivode
laventanaactiva.

ActiveSheet

ApplicationWindowWorkbook

ObjetoWorksheetquerepresentalahojaactiva
dellibroactivoodellibroespecificado.

ActiveWindow

Application

ObjetoWindowquerepresentalaventana
activa.

ActiveWorkBook

Application

ObjetoWorkbookquerepresentaellibrodela
ventanaactiva.

Parent

Objetosmltiples

Devuelveelobjetocontenedor.

Selection

ApplicationWindows

ObjetoRangequerepresentalaceldaolas
celdasseleccionadas.

ThisCell

Application

Devuelvelaceldaporlaquelafuncindefinida

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

68

- 1-

porelusuarioesllamadacomoobjetoRange.
ThisWorkbook

Application

ObjetoWorkbookquerepresentaellibrosobre
elqueseejecutaelcdigodelamacroactual.

Las propiedades especficas que devuelven un objeto Range (Cells, Offset, Columns, Rows, etc.) se explican en
detalleenelcaptuloObjetosdeExcel.

3.Mtodos
Losmtodospermitenrealizaraccionessobrelosobjetos.
Sonsimilaresalosprocedimientos:

Puedenusaronoargumentos.

Ciertosmtodospuedendevolverunvalor,comolosprocedimientos Function,yotrosno,comolosprocedimientos
Sub.

Sintaxisdemtodoquenodevuelveunvalor

{<objeto> | <variable objeto>}.<mtodo> [<Lista de argumentos>]


Ejemplo

Activa la segunda hoja de clculo del libro activo

Application.Goto ActiveWorkbook.Worksheets(2).Range("A1")

Selecciona un rango de celdas

Range("A1:C12").Select

Borra las celdas seleccionadas

Selection.Clear

Guarda el libro activo con un nuevo nombre

ActiveWorkbook.SaveAs "C:\presupuesto\presupuesto2.xlsm"

Como en el caso de los procedimientos, los distintos argumentos de un mtodo se separan por comas. Si un
argumentoopcionalnosedefineexplcitamente,elmtodousarunvalorpordefecto.

Sintaxisdemtodoquedevuelveunvalor

<variable> = {<objeto> | <variable objeto>}.<mtodo>


[<Lista de argumentos>]
Ejemplo

Muestra el cuadro de dilogo Abrir

Dim strFileName as String


strFileName = Application.GetOpenFilename _
(FileFilter:="Libros Excel (*.xlsm), *.xlsm", _

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

69

Title:="Seleccione el archivo que desea abrir")

Si selecciona un archivo, lo abre

If strFileName <> False Then


Workbooks.Open strFileName
End If

4.Eventos
Uneventoesuna accinespecficaqueserealizasobreunciertoobjeto.Microsoft Excelrespondeavariostipos
de eventos: apertura o cierre de un libro, seleccin de celdas, agregar una hoja de clculo, etc. Los eventos
resultangeneralmentedeunaaccindelusuario.
Elusodeunprocedimientoasociadoaeventoslepermitedefinirsupropiocdigocomorespuestaauneventoque
seproduceenunlibro,unahojaounformulario.
Ejemplo
Cuandoseagregaunanuevahojadeclculoallibro,apareceunmensajeparaelusuario.

Private Sub Workbook_NewSheet(ByVal Sh As Object)


MsgBox "La hoja " & Sh.Name & Chr(13) & _
"se agreg al libro " & _
ActiveWorkbook.Name & Chr(13) & _
"La cantidad de hojas del libro ahora es " & _
ActiveWorkbook.Worksheets.Count
End Sub

La administracin de eventos es uno de los aspectos ms importantes en el desarrollo de aplicaciones de Excel el


captuloAdministracindeeventosestntegramentededicadoaestetema.

5.Colecciones
Parahacerreferenciaaunobjetodeunacoleccin,puedeusarsecualquieradelassiguientessintaxis:

NomColeccin!NomObjeto
NomColeccin![NomObjeto]
NomColeccin("NomObjeto")

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

70

- 3-

NomColeccin(var)
dondevarrepresentaunavariabledetipoStringquecontieneelnombredelobjeto.

NomColeccin(index)
dondeindexrepresentaelnmerodelndicedelobjetoenlacoleccin.
Paraasegurarunamejorlegibilidaddelcdigo,seaconsejausarsiemprelamismasintaxis.Lassintaxisterceray
quintaserecomiendanporquepermitenactivar elasistentedeleditordecdigo.Adems,laquintasintaxisesms
tilpararecorrerlosobjetosdeunacoleccin.

Atencin: el primer elemento de la mayora de las colecciones lleva el ndice 1. Use los ndices solamente para
recorrerunacoleccin.Evite,porejemplo,usarActiveWorkbook.ActiveSheet(3)parahacerreferenciaaunahojade
clculodellibroactivo,yaqueelndicedelahojapuedecambiar(simuevelashojasosieliminaalguna).

Ejemplo
El siguiente cdigo activa la hoja de clculo Hoja1 del libro Presupuesto.xlsx. El cdigo usa las colecciones Workbooks y
Worksheets.

Workbooks("Presupuesto.xlsm").Worksheets("Hoja1").Activate

Workbooks![Presupuesto.xlsm].Worksheets!Hoja1.Activate

Workbooks![Presupuesto.xlsm].Worksheets![Hoja1].Activate

Recorrerunacoleccin:estecdigocambiaelnombredelashojasdeclculodellibroactivo.

Dim i As Integer
For i = 1 To ActiveWorkbook.Worksheets.Count
ActiveWorkbook.Worksheets(i).Name = "Presupuesto N " & i
Next i

UnacoleccintambinsepuederecorrerconlainstruccinForEachNext.

Dim oHoja As Worksheet


For Each oHoja In ActiveWorkbook.Worksheets
oHoja.Name = "Presupuesto N " & oHoja.Index
Next oHoja

- 4-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

71

6.Redaccinautomticadeinstrucciones
EleditorVBAincluyeunatecnologaqueloayudaenelempleodeobjetos.Cuandoustedescribeelnombredeun
objeto o de una coleccin reconocida por VBA seguido de un punto, se despliega una lista con los mtodos y las
propiedades del objeto. Si selecciona un mtodo, el asistente lo ayuda a indicar los argumentos que le
corresponden.
Ejemplo

EscribaelnombredelacoleccinWorkbooksseguidodeunpuntoaparecelasiguientelistadesplegable.

Elicono

representalosmtodos,elicono

representalaspropiedadesylascolecciones.

Puede hacer que la lista avance escribiendo las primeras letras del mtodo, propiedad o coleccin
buscadaousandolabarradedesplazamiento.Paraseleccionarunelementodelalista,hagadobleclic
enl.
Escriba un punto si acaba de seleccionar un objeto para ver la lista de sus propiedades y mtodos. Si
seleccionaunmtodo,escribaunespacioparaobtener lalistadeconfiguracindelmtodo.
Paraseguiresteejemplo,seleccioneelmtodoOpenyluegoescribaunespacio.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

72

- 5-

Aparecer una lista con los argumentos del mtodo. Los argumentos opcionales aparecen entre corchetes. El
argumentoactualseverennegrita.Siparaunargumentodadoexisteunalistadevalorespredefinidos,aparecer
unalistadesplegableconlasconstantescorrespondientes.
Tambinpuedeactivarlalistadepropiedadesymtodosdelasiguientemanera:
Ubiqueelcursordetrsdelpuntosituadodespusdelmtodo.
Hagaclicenelbotnderechodelratnparahaceraparecerelmencontextual.
SeleccionelaopcinListadepropiedadesymtodos.

- 6-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

73

Instruccionesusadasconlosobjetos
1.LainstruccinWith
LainstruccinWithpermiteaccedervariasvecesalmismoobjeto,indicndolounasolavez.
Ofrecevariasventajas:

Optimizacindeltiempodeejecucindelcdigo.

Ganartiempoenlaescrituradelcdigo.

Mejorlegibilidaddelcdigo.

Sintaxis

With <Objeto>
<cdigo que usa los mtodos y propiedades>
<que se relacionan con el objeto>
End With
Ejemplo
Agregarymodificarunahojadeclculo.

With ActiveWorkbook

Crea una hoja despus de la ltima hoja del libro activo

.Worksheets.Add , .Worksheets(.Worksheets.Count)

Modifica el nombre de la nueva hoja y el valor de la celda A1

With .ActiveSheet
.Name = "Sntesis"
.Range("A1") = "Revisin del Presupuesto"
End With
End With

2.LainstruccinForEach...Next
LainstruccinForEach...Nextpermiterecorrerlosobjetosdeunacoleccinodeunatabla.
Sintaxis

For Each <elemento > In <grupo>


<secuencia de instrucciones>
[Exit For]
<secuencia de instrucciones>
Next <elemento>
Ejemplo
ModificacindelcontenidodelaceldaA1ydelacantidaddehojasdellibroactivo.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

74

- 1-


Sub NumPresupuesto()
Dim Hoja As Worksheet
For Each Hoja In ActiveWorkbook.Worksheets
Hoja.Cells(1, 1) = "PRESUPUESTO N " & Hoja.Index
Hoja.Name = "Presupuesto " & Hoja.Index
Next Hoja
End Sub

3.LainstruccinIfTypeOf
LainstruccinIfTypeOfpermitecomprobareltipodeunobjeto.
Sintaxis

If TypeOf <Objeto> Is <TipoObjeto> Then


<cdigo que usa los mtodos y propiedades>
<relacionados con el objeto>
End If
Ejemplo

If TypeOf obj.Parent Is Worksheet Then_...

4.LainstruccinSet
LainstruccinSetpermiteatribuirlareferenciadeunobjetoaunavariable,llamadavariableobjeto.
Esta instruccin puede usarse paracrear un nuevo objeto(usandoenesecasounmtodoquepermitacrearel
objeto)oparahacerreferenciaaunobjetoyaexistente.
Sintaxis

Set <Objeto> = [New] <expresin objeto>


O Set <Objeto> = Nothing

objeto

Es una variable de tipo String, que contiene el nombre del objeto que es
necesariocrear.

LapalabraclaveNew

Permitecrearunanuevainstanciadelaclase.Silavariable<Objeto>contiene
unareferenciaaunobjeto,estaltimaseabandona.

<expresin objeto>

Puedeserelnombredeunobjetoodeunavariableobjetodelmismotipo.Es
decir,unafuncinomtodoquedevuelvaunobjetodelmismotipo.

Nothing

Reinicializa la variable objeto y libera el conjunto de recursos del sistema y la


memoriaasociadasalobjeto.

Ejemplo

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

75

Crearunlibrocondoshojasyasignarleunnombreacadaunadeellas.

Sub Crear_Libro()
Dim oLibro As Workbook
Dim i As Integer

Crear un nuevo libro

Set oLibro = Application.Workbooks.Add

Eliminar las hojas de la tercera hasta la ltima

With oLibro
Application.DisplayAlerts = False
For i = .Worksheets.Count To 3 Step -1
.Worksheets(i).Delete
Next i
Application.DisplayAlerts = True

Asignar los nombres a las hojas 1 y 2

.Worksheets(1).Name = "Ventas Ao 2013"


.Worksheets(2).Name = "Ventas Ao 2014"
.SaveAs ThisWorkbook.Path & "\Histrico"
End With
End Sub

Modificarunahojaenunlibroabierto.

Dim oLibro As Workbook


Dim oHoja As Worksheet
Set oLibro = Application.Workbooks![Histrico.xlsx]
Set oHoja = oLibro.Worksheets![Ventas Ao 2014]
With oHoja
.Name = "Ventas 2014"
.Range("A2") = "Ventas del ao 2014"
End With
Set oHoja = Nothing

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

76

- 3-

ElExaminadordeobjetos
1.Presentacin
DadalacantidadydiversidaddeobjetosdeExcel,estilpoderencontrarlainformacinqueserelacionaconlos
distintosobjetos.
El Examinador de objetos muestra la informacin relativa a los objetos, mtodos, propiedades, eventos y
constantes.
PuedeaccederalExaminadordeobjetosdedistintasmaneras:

VerExaminadordeobjetoso

(barradeherramientasEstndar)o[F2].

1.Listadebibliotecasactualmentecargada.
2.Textobuscado:objeto,propiedad,coleccin,evento,mtodo,etc.
3. Resultados de la bsqueda: lista de las clases de objetos (objetos y colecciones) y de sus miembros (objeto,
coleccin, propiedad, evento o mtodo). La palabra buscada puede estar en la lista de clases o en la de sus
miembros.
4. Clases de objetos de la biblioteca: la clase de objeto seleccionada en la lista Resultados de la bsqueda
apareceremarcada.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

77

- 1-

5.Propiedades(icono

),mtodos(icono

),eventos(icono

)yconstantes(icono

)serelacionanconla

clasedeobjetoseleccionadaoremarcadaenlalistadelaizquierda.
6.Detalledelelementoseleccionado.

2.BsquedaenelExaminadordeobjetos
ParahacerunabsquedaenelExaminadordeobjetos,procedadelasiguientemanera:
Indiquelapalabrabuscadaenlasegundalistadesplegable.
Hagaclicenelicono

.SilalistaResultadosdelabsquedamuestramuchosrenglones,desplcese

hastaelqueleintereselaparteinferiordelaventanaseactualizar.

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

78

ElobjetoApplication
El objeto Application representa la aplicacin de Microsoft Excel activa. Es el objeto por defecto y, por lo tanto,
normalmenteesopcional(ejemplo:VersionequivaleaApplication.Version).
Esteobjetocontiene:

Las propiedades relativas al entorno de Excel (por ejemplo, las opciones de Excel) y a la presentacin de la
interfaz(punterodelratn,textodelabarradeestado,tamaoyestadodelaventanadelaaplicacin,etc.).

HaydistintosmtodospararealizaraccionesenelentornodeExcel.

Propiedades que devuelven objetos y colecciones de primer nivel (objetos y colecciones del modelo de objetos de
Excel,comoWorkbooksoCharts).

Propiedadesespecficasquehacenreferenciadirectaaobjetos(comoActiveCell, ActiveSheetoActiveWindow).

LaspropiedadesquehacenreferenciaaobjetosseexplicanenelcaptuloLaprogramacindeobjetosenExcel.

1.PropiedadesquerepresentanlasopcionesdeExcel
LasprincipalesopcionesdeExcelsepuedendefinirodevolverapartirdepropiedadesdelobjeto Application.La
mayoradeestaspropiedadessondelecturayescritura.

ParaaccederalasopcionesdeExcelenlaversin2013,hagaclicenlapestaaArchivo yluegoenOpciones.

a.OpcionesdelacategoraGeneral

N.

Propiedades

Valoresdevueltos

ShowSelectionFloaties

Booleano

ShowQuickAnalysis

Booleano

EnableLivePreview

Booleano

StandardFont

Enterolargo

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

79

- 1-

StandardFontSize

Enterolargo

SheetsInNewWorkbook

Enterolargo

UserName

Cadenadecaracteres

b.OpcionesdelacategoraFrmulas

Opcionesrelacionadasconelmododereclculo

N.
1

Propiedades
Calculation

Valoresdevueltos
Constantes:
xlCalculationAutomatic
xlCalculationManual
xlCalculationSemiautomatic

CalculateBeforeSave

Booleano

Iteration

Booleano

MaxIterations

Enterolargo

MaxChange

Doble

Opcionesrelativasalasfrmulas

N.

- 2-

Propiedades

Valoresdevueltos

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

80

ReferenceStyle

Constantes:
xlA1
xlR1C1

DisplayFormulaAutoComplete

Booleano

GenerateTableRefs

Constantes:
xlGenerateTableRefStruct
xlGenerateTableRefA1

GenerateGetPivotData

Booleano

Opcionesdecomprobacindeerrores
Las siguientes propiedades dependen de la propiedad ErrorCheckingOptions del objeto Application. Esta
propiedad devuelve un objeto ErrorCheckingOptions, que representa las opciones de comprobacin de
errores paraunaaplicacin.

N.

Propiedades

Valoresdevueltos

10

BackgroundChecking

Booleano

11

IndicatorColorIndex

ConstantexlColorIndex

12

EvaluateToError

Booleano

13

InconsistentTableFormula

Booleano

14

TextDate

Booleano

15

NumberAsText

Booleano

16

InconsistentFormula

Booleano

17

GenerateTableRefs

Booleano

18

UnlockedFormulaCells

Booleano

19

EmptyCellReferences

Booleano

20

ListDataValidation

Booleano

c.OpcionesdelacategoraRevisin

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

81

- 3-

Opcionesderevisinortogrfica
Las siguientes propiedades dependen de la propiedad SpellingOptions del objeto Application. Esta propiedad
devuelveunobjetoSpellingOptions,querepresentalasopcionesderevisinortogrficaparaunaaplicacin.

N.

Propiedades

Valoresdevueltos

IgnoreCaps

Booleano

IgnoreMixedDigits

Booleano

IgnoreFileNames

Booleano

SuggestMainOnly

Booleano

UserDict

String

SpanishModes

ConstantexlSpanishModes

DictLang

Enterolargo

d.OpcionesdelacategoraGuardar

- 4-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

82

N.

Propiedades

Valoresdevueltos

DefaultSaveFormat

ConstantexlFileFormat

AutoRecover.Time

Enterolargo

AutoRecover.Path

Cadenadecaracteres

DefaultFilePath

Cadenadecaracteres

EnableAutoRecover

Booleano

Laopcin5seaplicaalibros(porejemplo,Application.ActiveWorkbook).

e.OpcionesdelacategoraAvanzadas

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

83

- 5-

N.

Propiedades

Valoresdevueltos

MoveAfterReturn

Booleano

MoveAfterReturnDirection

Constantes:
xlDown
xlUp
xltoRight
xltoLeft

- 6-

FixedDecimal

Booleano

FixedDecimalPlaces

Enterolargo

CellDragAndDrop

Booleano

AlertBeforeOverwriting

Booleano

EditDirectlyInCell

Booleano

ExtendList

Booleano

AutoPercentEntry

Booleano

10

EnableAutoComplete

Booleano

11

FlashFill

Booleano

12

RollZoom

Booleano

13

EnableLargeOperationAlert

Booleano

14

LargeOperationCellThousandCount

Enterolargo

15

UseSystemSeparators

Booleano

16

DecimalSeparator

Cadenadecaracteres

17

ThousandsSeparator

Cadenadecaracteres

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

84

18

CursorMovement

Constantes:
xlVisualCursor
xlLocgicalCursor

OpcionesdeCortar,CopiaryPegar

N.

Propiedades

Valoresdevueltos

19

DisplayPasteOptions

Booleano

20

DisplayInsertOptions

Booleano

21

CopyObjectsWithCells

Booleano

Opcionesparagrficos

N.

Propiedades

Valoresdevueltos

HighQualityModeForGraphics

Booleano

ShowChartTipNames

Booleano

ShowChartTipValues

Booleano

ChartDataPointTrack(objectApplication)

Booleano

ChartDataPointTrack(objectWorkbook)

Booleano

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

85

- 7-

Opcionesdevisualizacin

N.

Propiedades

Valoresdevueltos

RecentFiles.Maximum

Enterolargo

DisplayFormulaBar

Booleano

DisplayFunctionToolTips

Booleano

DisplayCommentIndicator

Constantes:
xlNoIndicator
xlIndicatorOnly
xlCommentAndIndicator

10

DefaultSheetDirection

Constantes:
xlRTL(dederechaaizquierda)
xlLTR(deizquierdaaderecha)

Opcionesdevisualizacinparalibros
Las siguientes propiedades dependen de la propiedad ActiveWindow del objeto Application. Esta propiedad
devuelveunobjetoWindowquerepresentalaventanaactiva.

N.

- 8-

Propiedades

Valoresdevueltos

DisplayHorizontalScrollBar

Booleano

DisplayVerticalScrollBar

Booleano

DisplayWorkbookTabs

Booleano

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

86

AutoFilterDateGrouping

Booleano

DisplayDrawingObjects

Constantes:
xlDisplayShapes(todos)
xlHide(ninguno)
Estaopcinseaplicaalibros(objeto
Workbook).

Opcionesdevisualizacinparalashojasdeclculo
LassiguientespropiedadesdependendelapropiedadActiveWindowdelobjeto Application.

N.

Propiedades

Valoresdevueltos

DisplayHeadings

Booleano

DisplayFormulas

Booleano

DisplayPageBreaks

Booleano

DisplayZeros

Booleano

10

DisplayOutline

Booleano

11

DisplayGridlines

Booleano

12

GridlineColorIndex

ConstantexlColorIndex

Opcionesrelacionadasconlasfrmulas

N.

Propiedades

Valoresdevueltos

13

MultiThreadedCalculation.Enabled

Booleano

14

MultiThreadedCalculation.ThreadMode

Constantes:
xlThreadModeAutomatic
xlThreadModeManual

15

MultiThreadedCalculation.ThreadCount

Entero

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

87

- 9-

Opcionesrelacionadasconelclculoenloslibros
Lassiguientespropiedadesseaplicanaunlibro(objetoWorkbook).

N.

Propiedades

Valoresdevueltos

SaveLinkValues

Booleano

PrecisionAsDisplayed

Booleano

Date1904

Booleano

UpdateRemoteReferences

Booleano

Opcionesgenerales

N.

Propiedades

Valoresdevueltos

EnableSound

Booleano

IgnoreRemoteRequests

Booleano

AskToUpdateLinks

Booleano

WarnOnFunctionNameConflict

Booleano

MapPaperSize

Booleano

10

AltStartupPath

Cadenadecaracteres

11

AsignalaspropiedadesdelosobjetosWebOptionsy
DefaultWebOptions

2.Propiedadesrelativasalapresentacindelaaplicacin
DisplayAlerts
Booleano.Muestra(True)uocultalosmensajes,sobretododealerta,cuandoseejecutaunamacro.
Height
Realdoble.Alturadelaventana.
Left
Realdoble.Distanciaentreelbordeizquierdodelapantallayelbordeizquierdodelaventanaprincipal
deMicrosoftExcel.
Top
Realdoble.Distanciaentreelbordesuperiordelapantallayelbordesuperiordelaventanaprincipal
deMicrosoftExcel.
Width
Realdoble.Distanciaentrelosbordesizquierdoyderechodelaventanadelaaplicacin.

- 10 -

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

88

Caption
Cadenadecaracteres.NombrequesemuestraenlabarradettulosdelaventanadeMicrosoftExcel.
Cursor
Constante.AspectodelpunterodelratnenExcel.
Constantes

xlDefault

Punteropordefecto.

xlIBeam

PunteroenI.

xlNorthwestArrow

FlechaNoroeste.

xlWait

Relojdearena.

DisplayFullScreen
Booleano.IndicasiExcelfuncionaenmododepantallacompleta.
FormulaBarHeight
Enterolargo.Altura,ennmerodelneas,delabarradefrmulas.
ScreenUpdating
Booleano.Permitedesactivar(False)laactualizacindelapantalladurantelaejecucindelcdigoVBA.
ShowMenuFloaties
Booleano.Indicasilasminibarrasdeherramientasdebenaparecercuandoelusuariohaceclicenel
botnderechodelratnsobrelaventanadellibro.
StatusBar
Cadenadecaracteres.Textodelabarradeestado.
Visible
Booleano.Indicasilaventanaprincipaldelaaplicacinestvisible.
Ejemplo
El siguiente cdigo permite optimizar el tiempo de ejecucin de una macro (ej.: macro que modifica el contenido de un gran
nmerodeceldasdeExcel oquerealizaclculosenlasceldas).

Sub Macro_Optimizada()

Desactiva la actualizacin de la pantalla

Application.ScreenUpdating = False

Oculta los mensajes de alerta

Application.DisplayAlerts = False

Desactiva el clculo manual

Application.Calculation = xlCalculationManual

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

89

- 11 -

Escribir aqu el cdigo de la macro

...
...

Actualizacin de la pantalla

Application.ScreenUpdating = True

Muestra mensajes de alerta

Application.DisplayAlerts = True

Activa el clculo automtico

Application.Calculation = xlCalculationAutomatic
End Sub

3.Propiedadesvarias
AutoFormatAsYouTypeReplaceHyperlinks
Booleano.IndicasiExcelconvierteenhipervnculoslasrutasdeInternetdeformaautomticaa
medidaqueselasescribe.
AutomationSecurity
Constante.MododeseguridadqueempleaMicrosoftExcelalabrirarchivosconmacros.
Constantes:

msoAutomationSecurityByUI
msoAutomationSecurityForceDisable
msoAutomationSecurityLow

ActivePrinter
Cadenadecaracteres.Nombredelaimpresoraactiva.
CalculationInterruptKey
Constante.IndicalateclaquepuedeinterrumpirelreclculoenMicrosoftExcel.
Constantes:

xlAnyKey
ptxlEscKey
xlNoKey

CalculationState
Constante.Indicaelestadodeclculodelaaplicacin,paraelreclculoencursoenMicrosoftExcel.
Constantes:

xlCalculating
xlDone
xlPending

ClipboardFormats

- 12 -

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

90

Variant.Devuelveunamatrizquecontienelosformatosqueseencuentranactualmenteenel
Portapapeles.
CutCopyMode
Constante.DevuelveodefineelestadodelmodoCortaroCopiar.
Constantes:

False:

NoestenmodoCortarniCopiar.

xlCopy:

EstenmodoCopiar.

xlCut:

EstenmodoPegar.

DataEntryMode
Constante.Devuelveodefineelmododeentradadedatos.
Constantes:

xlOn:

Mododeentradadedatosactivado.

xlOff:

Mododeentradadedatosdesactivado.

xlStrict:

Mododeentradadedatosactivadoytecla[Escape]
desactivada.

EnableCancelKey
Constante.ControlalaformaenqueMicrosoftExceltratalamaneraenqueelusuariointerrumpeel
procedimientoencursopulsandolacombinacindeteclas[Ctrl][Pausa].
Constantes

xlDisabled:

Noseinterrumpe.

xlInterrupt:

Interrumpeelprocedimientoencursoypasaal
modoDepurar.

xlErrorHandler:

Encasodeinterrupcin,elprocedimientogeneraun
error(cdigodeerror18).

EnableEvents
Booleano.Permitedesactivar(False)loseventosdelobjetoApplication.
EnableMacroAnimations
Booleano.Indicasilasanimacionesdemacroestnactivadas.
FileValidation
Constante.DevuelveodefinelaformaenqueExcelvalidalosarchivosantesdeabrirlos.
Constantes:

msoFileValidationDefault
msoFileValidationSkip

FileValidationPivot
Constante.DevuelveodefinelaformaenqueExcelvalidaelcontenidodelamemoriacachenun
informedetabladinmica.
Constantes:

xlFileValidationPivotDefault:

Validaelcontenidode

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

91

- 13 -

la memoriacachsegnla
configuracinpredeterminaday
delRegistro.
xlFileValidationPivotRun:

Validaelcontenidodetodaslas
memoriascachs.

xlFileValidationPivotSkip:

Novalidaelcontenidodelas
memoriacach

FindFormat
Devuelveodefineloscriteriosdebsquedaparaeltipodeformatodeceldaquehayqueencontrar.
GenerateGetPivotData
Booleano.IndicasiExcelpuedeobtenerdatosdeuninformedetabladinmica.
Hinstance
Enterolargo.DevuelveelcontroladordeinstanciadelainstanciaquellamaaMicrosoftExcel.
HinstancePtr
Variant.DevuelveuncontroladoralainstanciadeMicrosoftExcel2016representadaporelobjeto
Application.
Hwnd
Enterolargo.Devuelveunobjetoquedesignaelidentificadordeventanasuperiordelaventanade
MicrosoftExcel.
MapPaperSize
Booleano.Indicasilosdocumentosseajustanautomticamentecuandocambiaeltamaodepapel.
MouseAvailable
Booleano.Indicasihayunratndisponible.
OrganizationName
Cadenadecaracteres.Nombredelaempresa.
PreviousSelections
Variant.DevuelveunamatrizdeobjetosRangequecontienelosltimoscuatrorangosseleccionados.
PrintCommunication
Booleano.Indicasiestactivalacomunicacinconlaimpresora.
RecordRelative

- 14 -

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

92

Booleano.Truesilasmacrossegrabanusandoreferenciasrelativas.
ReplaceFormat
Booleano.Estableceloscriteriosdesustitucinqueseempleanparasustituirformatosdecelda(se
usaconlapropiedadFindFormat).
SaveISO8601Dates
Booleano.IndicasiExcelguardalosvaloresdefechasyhorasenformatoISO8601.
TemplatesPath
Cadenadecaracteres.Rutadeaccesolocaldelacarpetadondeseguardanlasplantillas.
Version
Cadenadecaracteres.NmerodeversindelaaplicacindeExcelactiva.

4.MtodosdelobjetoApplication
a.Mtodosqueactansobrelasfrmulasylosclculos
Calculate
Fuerzaunclculodelosdatosparatodosloslibrosabiertos.
CalculateFull
Fuerzaunreclculocompletodelosdatosentodosloslibrosabiertos.
CalculateFullRebuild
Paratodosloslibrosabiertos,fuerzaunreclculocompletodelosdatosyvuelveaestablecerlas
dependencias.
CheckAbort
Detieneelreclculo.
ConvertFormula
Conviertelasreferenciasdeceldaenunafrmula,pasandodelestilodereferenciaA1alestiloR1C1.
Evaluate
Calculalaexpresinpasadacomoargumentoydevuelveelresultado.Laexpresin debe
corresponderaunafrmulaeningls.

b.Mtodosqueactansobrelasceldas

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

93

- 15 -

DoubleClick
Equivaleahacerdobleclicsobrelaceldaactiva.
GoTo
SeleccionaunrangoounprocedimientoVisualBasicencualquierlibroyactiva esemismolibrosino
loest.
Intersect
DevuelveunobjetoRangequerepresentalainterseccindedosomsrangos.
Union
Devuelvelauninde,almenos,dosrangos.

c.Mtodosqueactansobrelaslistaspersonalizadas
AddCustomList
Agregaunalistapersonalizada.
DeleteCustomList
Eliminaunalistapersonalizada.
GetCustomListContents
Devuelveunalistapersonalizada(matrizdecadenadecaracteres).
GetCustomListNum
Devuelveelnmerodelalistapersonalizadacorrespondienteaunamatrizdecadenadecaracteres.

d.Mtodosquemuestranloscuadrosdedilogo
LosmtodosGetOpenFileName,GetSaveAsFileNameeInputBoxseexplican enelcaptuloCuadrosdedilogo.

e.MtodosrelacionadosconlasaccionesenExcel
ExecuteExcel4Macro
EjecutaunafuncinmacroMicrosoftExcel4.0ydevuelvesuresultado.
OnKey
Ejecutaunprocedimientoespecificadocuandoelusuariopulsaunateclaounacombinacindeteclas.
OnRepeat

- 16 -

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

94

DefineelcomandodelmenRepetiryelnombredelprocedimientoejecutadoalseleccionarlaopcin
Repetir(menEdicin),despusdelaejecucindelprocedimientoquedefineestapropiedad.
OnTime
Programalaejecucindeunprocedimientoenunmomentodeterminado.
OnUndo
DefineeltextodelaopcindemenDeshaceryelnombredelprocedimientoejecutadocuandose
seleccionalaopcinDeshacer(menEdicin),despusdelaejecucindelprocedimientoquedefine
estapropiedad.
Quit
SaledeMicrosoftExcel.
Repeat
Repitelaltimaoperacinejecutadadesdelainterfazdeusuario.
SaveWorkspace
Guardaelreadetrabajoencurso.
SendKeys
Simulalapulsacindeteclasenlaaplicacinactiva.
Undo
Deshacelaltimaoperacinrealizadadesdelainterfazdeusuario.
RecordMacro
Grabaelcdigosiseactivaelgrabadordemacros.
Run
Ejecutaunprocedimientoollamaaunafuncin.
Wait
Haceunapausaenlaejecucindelamacrohastaunmomentoespecificado.DevuelveelvalorTrue
cuandollegalahoraespecificada.

f.Mtodosrelativosalcorreo
MailLogon
SeconectayabreunasesindecorreoMAPIodeMicrosoftExchange.SiMicrosoftMailnoseest

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

95

- 17 -

ejecutandoan,sedebeusarestemtodoparaestablecer unasesindecorreoquepermitaeluso
defuncionesdedistribucindedocumentosodemensajes.
MailLogoff
CierraunasesindecorreoMAPIabiertaporMicrosoftExcel.

g.Otrosmtodos
ActivateMicrosoftApp
ActivaunaaplicacindeMicrosoft.Siestayaestenejecucin,elmtodolaactiva.Sinoloest,el
mtodoabreunanuevainstanciadelaaplicacin(ejemplo:Application.ActivateMicrosoftAPP
xlMicrosoftWord).
CentimetersToPoints
Conviertecentmetrosenpuntos(unpuntoequivalea0,035 centmetros).
CheckingSpelling
CompruebalaortografadeunapalabraydevuelveTruesilapalabraseencontrenunodelos
diccionarios.
DisplayXMLSourcePane
AbreelpaneldetareasOfficeXMLSourceymuestralaasignacinXMLespecificada porelargumento
XmlMap.
Help
Muestrauntemadeayuda.
InchesToPoints
Conviertepulgadasenpuntos.
MacroOptions
OpcionesdelcuadrodedilogoOpcionesdemacro.
RegisterXLL
CargaunrecursodecdigoXLLyregistraautomticamentelasfuncionesycomandosquecontiene.
Volatile
Defineunafuncinpersonalizadacomovoltil.Unafuncinvoltilserecalculacadavezqueserealiza
unclculoencualquierceldadelahojadeclculo.

5.EjemplosdecdigosqueusanelobjetoApplication
- 18 -

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

96

a.ModificacindelainterfazdeExcel

Sub Interfaz()
With Application

Ttulo de la ventana de la aplicacin

.Caption = "Aplicacin " & .Name _


& " Versin " & .Version

Texto de la barra de estado

.StatusBar = "Ejemplos VBA Excel 2016"

Estilo de referencia L1C1

.ReferenceStyle = xlR1C1

Maximiza la ventana de la aplicacin

.WindowState = xlMaximized

Modifica la fuente por defecto

.StandardFont = "Verdana"
.StandardFontSize = 11

Oculta la barra de herramientas formato

Empleo de la coleccin CommandBars

.CommandBars(_Formatting").Visible = False

Muestra la barra de herramientas Visual Basic

.CommandBars("Visual Basic").Visible = True


End With
End Sub

b.Creacindeunalistapersonalizada

Dim i As Integer
Dim iNumList As Integer
Dim TabList As Variant
With Application

Selecciona las columnas 1, 3 y 5

.AddCustomList Array("Este", "Norte", "Oeste", "Sur", "Centro")

Copia el contenido de la lista en una matriz

NumList = .GetCustomListNum(Array("Este", "Norte", _


"Oeste",

"Sur", "Centro"))

TabList = .GetCustomListContents(NumList)

Muestra el contenido de la lista en columnas

For i = LBound(TabList, 1) To UBound(TabList, 1)


Cells(i, 1) = TabList(i)
Next i
End With

c.Seleccindecolumnasnoconsecutivas

Dim oMultipleRange As Range

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

97

- 19 -

Crea un objeto Range formado por las columnas 1,3 y 5

Set oMultipleRange = Application.Union(Cells(1, 1), _


Cells(1, 3), Cells(1, 5)).EntireColumn

Pone en negrita las celdas y las selecciona

oMultipleRange.Font.Bold = True
oMultipleRange.Select

d.Evaluacindelresultadodeunafrmula
Esteejemplo calcula el promedio y el valor mximo de un rango de celdas que contiene notas. Las notas se
comparan,acontinuacin,conestosvalores yseagregauncomentarioparacadauna.

Sub Evaluacion()
Dim dProm As Double
Dim dMax As Double
Dim oNotas As Name
Dim oCelda As Range

Selecciona del rango de celdas llamado Notas

Sheets("Evaluacion formula").Activate
Set oNotas = ThisWorkbook.Names("Notas")
oNotas.RefersToRange.Select

Elimina los comentarios

Selection.ClearComments

Calcula el promedio y el mximo

dProm = Evaluate("Average(notas)")
dMax = Evaluate("Max(notas)")

Muestra un comentario para cada nota

For Each oCelda In Selection


With oCelda
Select Case .Value
Case Is = dMax
.AddComment "El mejor"
Case Is < dProm
.AddComment "Por debajo del promedio"
Case Else
.AddComment "Igual o por encima del promedio"
End Select
End With
Next oCelda
End Sub

- 20 -

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

98

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

99

- 21 -

ObjetoWorkbook
EsteobjetorepresentaunlibrodeMicrosoftExcel.ElobjetoWorkbookesunmiembrodelacoleccinWorkbooks.
LassiguientespropiedadesdelobjetoApplicationdevuelvenunobjetoWorkbook:

Workbooks

ActiveWorkbook

ThisWorkbook

1.Objetosycolecciones
Objetos
Theme
Objetoquerepresentaeltemaaplicadoallibro.
VBProject
ObjetoquerepresentaelproyectodeVisualBasicasociadoaunlibro.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

100

- 1-

WebOptions
Opcionesrelativasalagrabacinyaperturadeunapginaweb.

Colecciones
BuiltinDocumentProperties
Coleccindelaspropiedades(autor,ttulo,objeto,palabrasclave,etc.)dellibro.
Charts
Coleccindelosgrficosdeunlibro.
CommandBars
ColeccindelasbarrasdecomandosdeExcel.
Connections
Coleccindelasconexionesaorgenesdedatosparaellibro.
CustomDocumentProperties
Coleccindelaspropiedadesdeunlibro(ttulo,autor,comentarios,etc.).
CustomViews
Coleccindelasvistaspersonalizadasdeunlibro.
Names
Coleccindelosrangosconnombredeunlibro.
PivotTables
Coleccindetablasdinmicascontenidasenunlibro.
PublishObjects
Coleccindeloselementosdeunlibrograbadocomopginawebyquesepuedenactualizar.
SlicerCaches
ColeccindelosobjetosSlicerCachesasociadosaunlibro.
Styles
Coleccindelosestilosdeunlibro.

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

101

TableStyles
Coleccindelosdistintosestilosaplicablesaunatabla.
Windows
ColeccindelasventanasdelaaplicacindeExcel.
Worksheets
Coleccindelashojasdeclculodeunlibro.
XmlMaps
ColeccindelosobjetosXmlMapquesehanagregadoaunlibro.Estosobjetos seusanpara
administrarlarelacinentrelosrangosdelistayloselementosdeunesquemaXML.
XmlNamespaces
ColeccindelosespaciosdenombresXMLcontenidosenellibroespecificado.

2.Propiedades
a.Propiedadesrelativasalaactualizacinyregistrodelibros
CreateBackup
Booleano.Indicasisecreaunacopiadeseguridadcuandosegrabaelarchivo.
EnableAutoRecover
Booleano.ActivaodesactivalaopcinAutorrecuperacin.
Saved
Booleano.Indicasiellibroespecificadonohasidomodificadodespusdelaltimagrabacin.
SaveLinkValues
Booleano.IndicasiMicrosoftExcelguardalosvaloresdelosvnculosexternosconellibro.
UpdateLinks
Constante.ParmetrodellibroparalaactualizacindelosvnculosOLEincorporados.
UpdateRemoteReferences
Booleano.IndicasiMicrosoftExcelactualizalasreferenciasremotasdellibro.

b.Propiedadesrelativasalibroscompartidos
Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

102

- 3-

AutoUpDateFrequency
Enterolargo.Devuelveodefineeltiempo,enminutos,entredosactualizacionesautomticasenel
librocompartido.Siestapropiedadrecibeelvalor 0,laactualizacinsolamentesehacealguardarel
libro.
AutoUpDateSaveChanges
Booleano.Indicasilasmodificacionesrealizadasenellibrocompartidosetransmitenalosotros
usuarioscuandoellibroseactualizaautomticamente.
ChangeHistoryDuration
Enterolargo.Devuelveoestableceelnmerodedasquesemuestraenelhistorialdecambiosdel
librocompartido.
ConflictResolution
Constante.Devuelveodefinelaformaenqueseresuelvenlosconflictoscuandoseactualizaunlibro
compartido.
HighlightChangesOnScreen
Booleano.Indicasilasmodificacionesenellibrocompartidoseresaltanenlapantalla.
KeepChangeHistory
Booleano.Indicasiesthabilitadoelseguimientodecambiosenellibrocompartido.
ListChangesOnNewsheet
Booleano.Indicasilasmodificacionesdellibrocompartidosemuestranenunanuevahojadeclculo.
MultiUserEditing
Booleano.Indicasiellibroestabiertocomounalistacompartida.
RevisionNumber
Enterolargo.Devuelvelacantidaddevecesqueellibrofuegrabadomientrasestabaabiertocomo
listacompartida.
ShowConflictHistory
Booleano.IndicasilahojadeclculoHistorialdeconflictosestvisibleenellibroabiertocomolista
compartida.
UserStatus
Variant.Devuelveunamatrizdedosdimensionesindexadaapartirde1,conlainformacindecada
usuarioquetengaabiertoellibrocomolistacompartida.

- 4-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

103

HasPassword
Booleano.Indicasiellibroestprotegidoconcontrasea.
Password
Cadenadecaracteres.Devuelveodefinelacontraseanecesariaparaabrirellibro.
PasswordEncryptionAlgorithm
Cadenadecaracteres.DevuelveelalgoritmoqueusaMicrosoftExcelparaencriptarlascontraseas
dellibro.
PasswordEncryptionProvider
Cadenadecaracteres.Devuelveelnombredelproveedordelalgoritmodecifrado queutiliza
MicrosoftExcelparaencriptarlascontraseasdellibroespecificado.
PasswordEncryptionKeyLength
Enterolargo.IndicalalongituddelaclavedelalgoritmoqueutilizaMicrosoftExcelparaencriptarlas
contraseasdellibroespecificado.
PasswordEncryptionFileProperties
Booleano.IndicasiMicrosoftExcelencriptalaspropiedadesdearchivodellibro.
ProtectStructure
Booleano.Indicasielordendelashojasdeclculodellibroestprotegido.
ProtectWindows
Booleano.Indicasilasventanasdellibroestnprotegidas.
ReadOnly
Booleano.Indicasiellibrofueabiertoenmododesololectura.
ReadOnlyRecommanded
Booleano.Indicasiellibrofuegrabadocomorecomendadoparasololectura.
RemovePersonalInformation
Booleano.Indicasilainformacinpersonaldellibrosepuedeeliminar.
VBASigned
Booleano.IndicasielproyectoVBAdellibrotienefirmadigital.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

104

- 5-

WritePassword
Cadenadecaracteres.Devuelveodefinelacontraseadeescrituraparaellibro.
WriteReserved
Booleano.Indicasiellibroestprotegidocontraescritura.
WriteReservedBy
Cadenadecaracteres.Indicaelnombredelusuarioqueestautorizadoasobreescribirellibro.

c.Otraspropiedades
AccuracyVersion
Entero.Devuelveodefinesiciertasfuncionesdelahojadeclculousanlosltimosalgoritmosde
precisinparacalcularsusresultados.
Valores
0:Usarlosalgoritmosmsprecisosymsrecientes(opcinpordefecto)
1:UsarlosalgoritmosdeExcel2007odeversionesanteriores
2:UsarlosalgoritmosdeExcel2010
CaseSensitive
Booleano.IndicasiExceldistinguelasmaysculasylasminsculasenlacomparacindecontenidos.
Colors
Variant.Devuelveodefineloscoloresdelapaletadellibro.Lapaletatiene56 entradas,cadauna
representaunvalorRGB.
Date1904
Booleano.Indicasiellibrousaelsistemadefechas1904.
DefaultPivotTableStyle
Variant.EspecificaelestilodetabladelacoleccinTableStylesqueseusacomoestilopordefecto
paralastablasdinmicas.
DefaultSlicerStyle
Variant.EspecificaelestilodelobjetoTableStyle,utilizadocomoestilopordefectoparalos
segmentos(oslicers).
DefaultTableStyle
Variant.EspecificaelestilodetabladelacoleccinTableStylesqueseusapordefecto.
- 6-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

105

DisplayDrawingObjects
Constante.Devuelveodefinelamaneraenquesemuestranlasformas.
EnvelopeVisible
Booleano.Indicasisonvisibleselencabezadodecomposicindelosmensajesdecorreoylabarra
deherramientasdesobre.
FullNameURLEncoded
Cadenadecaracteres.Nombredellibroincluyesurutaeneldisco.
HasVBProject
Booleano.IndicasiunlibrocontienecdigoVBA.Estapropiedadesespecialmentetilpara
determinarsiunlibrosedebegrabarenunformatoqueaceptelasmacros.
IsAddin
Booleano.Indicasiellibroseejecutacomocomplemento.
PrecisionAsDisplayed
Booleano.Indicasilosclculosenellibroserealizanusandosolamentelosdecimalesvisiblesenlas
celdas.
ShowPivotChartActiveFields
Booleano.Indicaodefinesielpaneldetareasdefiltrodegrficodinmicoesvisible.
ShowPivotTableFieldList
Booleano.Indicasisepuedemostrarlalistadecamposdeunatabladinmica.
TemplateRemoveExtData
Booleano.Indicasilasreferenciasdedatosexternosseeliminancuandoellibrosegrabacomo
plantilla.

3.Listademtodos
a.Mtodosqueactandirectamentesobreloslibros
AddToFavorites
Agregaellibroespecificadoalalistadefavoritosdelabarradeherramientasweb.
ApplyTheme

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

106

- 7-

Aplicaeltemaespecificadoallibro.
CheckInWithVersion
Guardaunlibroenunservidor,apartirdeunordenadorlocal,ydefineellibrocomodesololectura
paraevitarqueseamodificadolocalmente.
Close
Cierraellibroespecificado.
DeleteNumberFormat
Eliminadellibrounformatonmericopersonalizado.
ExportAsFixedFormat
PublicaunlibroenformatoPDFoXPS.
MergeWorkbook
Fusiona,enunlibroabierto,loscambiosrealizadosenotrolibro.
NewWindows
Creaunacopiadelaventanaespecificada.
OpenDatabase
Abreunabasededatosymuestralainformacinenunnuevolibro.Devuelve unobjetoWorkbook.
Post
Envaellibroespecificadoaunacarpetapblica.Estemtodosolamentefuncionaconuncliente
MicrosoftExchangeconectadoaunservidorMicrosoftExchange.
PrintOut
Imprimeellibroespecificado.
PrintPreview
Muestralavistapreliminardellibroespecificado.
PurgeChangeHistoryNow
Eliminalasentradasdelregistrodecambiosdellibroespecificado.
RefreshAll
Actualizalosrangosdedatosexternosylosinformesdetablasdinmicasdellibroespecificado.

- 8-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

107

Route
Distribuyeellibrousandolalistadedistribucinactiva.
Save
Guardalasmodificacionesdellibroespecificado.
SaveAs
Guardaellibroespecificadoenotroarchivo(equivalealaopcinGuardarcomodelmenArchivo).
SaveAsCopy
Guardaunacopiadellibroactivoenunnuevoarchivosinmodificarellibroabiertoenlamemoria.
UpdateFromFile
Actualizaunlibrodesololecturaapartirdelaversindellibroguardadaeneldiscosiestaversin
esmsrecientequelacopiadellibrocargadoenmemoria.Silacopiadeldisconofuemodificada
despusdecargarellibroenmemoria,lacopiadellibroresidenteenmemorianoserecarga.

b.Mtodosrelativosalaseguridad
ChangeFileAccess
Modificalospermisosdeaccesoallibro,loquepuedeimplicarlanecesidaddecargar,desdeeldisco,
unaversinactualizada.
LockServerFile
Bloqueaellibroenelservidorparaevitarsumodificacin.
Protect
Protegeellibroespecificadoparaquenosepuedamodificar.
ProtectSharing
Guardaellibroeimpidequeseacompartido.
UnProtect
Quitalaproteccindellibroespecificado.
UnprotectSharing
Desactivalaproteccinqueimpidecompartirellibroylograba.

c.Mtodosrelativosalibroscompartidos
Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

108

- 9-

AcceptAllChanges
Aceptatodaslasmodificacioneshechasallibrocompartidoespecificado.
CanCheckIn
DevuelveunavariableBooleanoqueindicasiExcelpuedeextraerunlibroespecificadodesdeun
servidor.
ExclusiveAccess
Atribuyealusuarioactualunaccesoexclusivoallibroabiertocomolistacompartida.
HighlightChangesOptions
Controlacmosemuestranloscambiosenunlibrocompartido.
RejectAllChanges
Impideloscambiossobreellibrocompartidoespecificado.
RemoveUser
Desconectaelusuarioespecificadodellibrocompartido.

d.Mtodosrelacionadoscondatosvinculados
BreakLink
ConviertelasfrmulasvinculadasaotrosorgenesdeMicrosoftExceluorgenesOLEenvalores.
ChangeLink
Modificaunvnculoentredosdocumentos.
EnableConnections
Activalasconexionesdedatosenunlibro.
FollowHyperlink
Muestraundocumentodelacachsiyahasidotransferidoalamquinalocal.Delocontrario,este
mtodoresuelveelhipervnculo,transfiereeldocumentodedestinoalamquinalocalymuestrael
documentoenlaaplicacinapropiada.
LinkInfo
Devuelveinformacinacercadelafechayelestadodeactualizacindelvnculo.
LinkSources

- 10 -

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

109

Devuelveunamatrizdevnculosallibro.Losnombresdelamatrizsonlosnombresdelos
documentosvinculados,edicionesoservidoresDDEuOLE.EstemtododevuelveEmptysinohay
vnculosenellibro.
OpenLinks
Abrelosdocumentosdeorigendeunoomsvnculos.
OpenXml
AbreunarchivoXMLenunnuevolibro.DevuelveunobjetoWorkbook.
ReloadAs
VuelveacargarunlibrobasadoenundocumentoHTMLusandolacodificacindedocumentos
especificada.
SetLinkOnDate
DefineelnombredeunprocedimientoejecutadoacadaactualizacindeunvnculoDDE.
UpdateLink
ActualizaunoomsvnculosdeMicrosoftExcel,DDEoOLE.
WebPagePreview
Muestralavistapreviadellibroespecificado,talcomoseveraalserguardadocomopginaweb.

e.Mtodosrelativosalenvodelibros
SendFaxOverInternet
Envaunahojadeclculocomofaxalosdestinatariosespecificados.
SendMail
Envaunmensajedecorreoelectrnicoconellibroespecificado.
SendForReview
Envaunmensajedecorreoelectrnicoconellibroquehayquerevisaralosdestinatarios
especificados.
EndReview
TerminalarevisindeunarchivoenviadoparaestefinconelmtodoSendForReview.
ReplyWithChanges
Envaunmensajedecorreoelectrnicoalautordeunlibroenviadopararevisinyleinformadeque

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

110

- 11 -

larevisinhasidorealizada.

f.Otrosmtodos
LosmtodosrelativosalaimportacinyexportacindearchivosalformatoXML(SaveAsXMLData,XmlImport,etc.)
seexplicanenelcaptuloInternet.

4.EjemplosdecdigosqueusanelobjetoWorkbook
Paraprobarestosejemplos,debecrearunacarpetaC:\VentasconlabasedeejemplodeAccessContador.mdb.

a.CreacindeunlibrodeExcel
Elsiguienteejemplopermite:

Cerrartodosloslibrosabiertos,exceptoellibroactivo.

Crearunnuevolibro.

Protegerellibroconcontrasea.

AgregarellibroalalistadeFavoritos.

Guardarycerrarellibro.

Private Sub NuevoLibro()


Dim oLibro As Workbook
Dim i As Integer
Dim j As Integer

Cierra los libros (excepto el libro activo)

y guarda los cambios

For Each oLibro In Workbooks


If oLibro.Name <> ThisWorkbook.Name Then
oLibro.Close True
End If
Next oLibro

Crea un nuevo libro

Set oLibro = Application.Workbooks.Add


With oLibro

Protege el libro con contrasea


.Password = "Ventas"
.WritePassword = "W_Ventas"

Guarda el libro
.SaveAs "C:\Ventas\Ventas por regin"

Agrega el libro a los favoritos de la barra de men Web


.AddToFavorites

Cierra el libro
.Close

End With
End Sub

- 12 -

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

111

b.ImportarunabasededatosyexportarlaalformatoHTML
Elsiguienteejemplomuestracmo:

AbrirlatablaClientesdelarchivo"Northwind2016.accdb"enunnuevolibro.

ExportarestainformacinenunarchivoHTML.

AbrirelarchivoHTML.

Sub CreaHTMLFile()
Dim oLibro As Workbook

Importa la tabla Clientes de la base Access Northwind 2016

en un nuevo libro

Set oLibro = Workbooks.OpenDatabase _


(Filename:=ThisWorkbook.Path & "\Northwind 2016.accdb", _
CommandText:="SELECT * FROM CLIENTS")

Exporta los clientes a un archivo Html

ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\Clientes.htm", _


FileFormat :=xlHtml, ReadOnlyRecommended:=False, CreateBackup:=False

Abre el archivo Html

Workbooks.Open Filename:=ThisWorkbook.Path & "\Clientes.htm"


End Sub

c.Mostrarlaspropiedadesdeunlibro
Este ejemplo muestra los nombres y los valores de las diferentes propiedades del libro. Algunas de estas
propiedadessonaccesiblesalhacerclicenlapestaaArchivo yluegoenlaseccinInformacin.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

112

- 13 -

Sub Propiedades()
Dim i As Integer
Dim ObjProp As Object

Muestra la lista de propiedades del libro

i = 1
For Each ObjProp In ThisWorkbook.BuiltinDocumentProperties
On Error Resume Next
ActiveSheet.Cells(i, 2) = ObjProp.Value
ActiveSheet.Cells(i, 1) = ObjProp.Name
i = i + 1
Next
End Sub

d.ExportarunlibroalformatoPDF
Para ejecutar este cdigo, debe previamente ejecutar el programa de instalacin del complemento Excel
SaveAsPDFandXPS.exe(esteprogramaseentregaconlosejemplos).

Sub Export_Pdf()

Exporta el archivo al formato PDF y lo abre en Acrobat Reader

ThisWorkbook.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:="Captulo4", _
IncludeDocProperties:=True, _
OpenAfterPublish:=True

- 14 -

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

113

End Sub

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

114

- 15 -

ElobjetoWorksheet
EsteobjetorepresentaunahojadeclculoExcel.ElobjetoWorksheetesunmiembrodelacoleccinWorkSheets
delobjetoWorkbook.
LassiguientespropiedadesdelobjetoApplicationdevuelvenunobjetoWorksheet:

Worksheets

ActiveSheet

1.Listadeobjetosycolecciones

2.Objetosycolecciones
Objetos
AutoFilter
Objetoquerepresentaelautofiltrodelahojadeclculoespecificada.
OutLine
Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

115

- 1-

Objetoquerepresentaelesquemadelahojadeclculoespecificada.
PageSetup
Objetoquerepresentalasopcionesdeconfiguracindepginadelahojadeclculoespecificada.
Protection
Objetoquerepresentalasopcionesdeproteccinparalahojadeclculoespecificada. Estasopciones
sonaccesiblesenExcelatravsdelmenHerramientas ProteccinProtegerhoja.
Range
Objetoquerepresentaunaceldaounrangodeceldas(unafila,unacolumna,etc.).
Tab
Objetoquerepresentalapestaadelahojadeclculoespecificada.

Colecciones
ChartObjects
Coleccindelosgrficosincrustadosenlahojadeclculoespecificada.
Comments
Coleccindetodosloscomentariosdeceldadelahojadeclculoespecificada.
CustomProperties
ColeccindeobjetosCustomPropertyquerepresentalainformacincomplementaria(metadatospara
XMLoetiquetasinteligentes).
HPageBreaks
Coleccindelossaltosdepginahorizontalesenlazonadeimpresindelahojaespecificada.
Hyperlinks
Coleccindeloshipervnculosdelahojadeclculoespecificada.
ListObjects
Coleccindelaslistasdelahojadeclculoespecificada.
Names
Coleccindelosrangosdeceldasconnombredelahojadeclculoespecificada.

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

116

OLEObjects
ColeccindelosobjetosActiveXyobjetosOLEvinculadosoincrustadosenlahojadeclculo
especificada.
PivotTables
Coleccindelosinformesdetabladinmicadelahojadeclculoespecificada.
QueryTables
Coleccindelastablasdehojadeclculocreadasapartirdedatosenviadosdesdeunorigende
datosexterno.
Scenarios
Coleccindelosescenariosdelahojadeclculoespecificada.
Shapes
Coleccindetodaslasformas(autoformas,formaslibres,objetosOLEoimgenes)presentesenla
hojadeclculoespecificada.
VPageBreaks
Coleccindelossaltosdepginaverticalesenlazonadeimpresindelahojaespecificada.

3.Propiedades
AutoFilterMode
Booleano.Indicasilasflechasdelmendesplegabledelosautofiltrosaparecenenlahojadeclculo
especificada.
ConsolidationFunction
Constante(xlMax,xlMin,xlSum,etc.).Devuelvelafuncinusadaparalaconsolidacinactual.
ConsolidationOptions
Matrizdebooleanosquerepresentalasopcionesrelativasalaconsolidacin(rtulosenlafila
superior,rtulosenlacolumnaizquierda,vnculosconlosdatosdeorigen).
ConsolidationSources
Matrizdecadenasdecaracteresquecontienelosnombresdelashojasdeorigenparalaconsolidacin
actualdelahojadeclculoespecificada.
DisplayPageBreaks
Booleano.Indicasisemuestranlossaltosdepgina(automticosymanuales)delahojaespecificada.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

117

- 3-

DisplayRightToLeft
Booleano.CorrespondealaopcinVerlahojaactualdederechaaizquierdadelcuadrodedilogo
HerramientasOpcionespestaaInternacional.
EnabledAutofilter
Booleano.IndicasilasflechasdelAutofiltroestnactivassolamentecuandoestactivalaproteccin
desolointerfazdeusuario.
EnableCalculation
Booleano.IndicasiExcelrecalculaautomticamentelahojadeclculocuandoesnecesario.
EnableFormatConditionsCalculation
Booleano.Devuelveodefinesilosformatoscondicionalesseaplicanautomticamentesiesnecesario.
EnableOutLining
Booleano.Indicasilossmbolosdelesquemaestnactivoscuandoestactivalaproteccindesolo
interfazdeusuario.
EnablePivotTable
Booleano.Indicasiloscontrolesylasaccionesdelatabladinmicaestnactivos cuandoestactivala
proteccindesolointerfazdeusuario.
EnableSelection
Constante.Devuelveodefineloselementosquesepuedenseleccionarenlahoja(xlNoRestrictions,
xlNoSelection,xlUnlockedCells).
FilterMode
Booleano.Indicasihayaplicadounfiltroalahojaespecificada.
MailEnvelope
Representaelencabezadodelosmensajesdecorreoelectrnicoparalahojaespecificada.
Name
Cadenadecaracteresquecontieneelnombredelahojadeclculo.
PrintedCommentPages
Enterolargo.Devuelvelacantidaddepginasdecomentariosqueseimprimenparalahojadeclculo
especificada.
ProtectContents
- 4-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

118

Booleano.Indicasielcontenidodelahojaespecificadaestprotegido.
ProtectDrawingObjects
Booleano.Indicasilasformasgrficasestnprotegidas.
ProtectionMode
Booleano.Indicasiestactivalaproteccindesolointerfazdeusuario.
ProtectScenarios
Booleano.Indicasiestnprotegidoslosescenariosdehojadeclculo.
ScrollArea
Cadenadecaracteres.Devuelveoestableceelrangoenelqueestpermitidoeldesplazamientodela
hojadeclculoespecificada.
StandardHeight
Realdoble.Devuelveelaltoestndar(valorpordefecto)delasfilasdelahojadeclculoespecificada.
StandardWidth
Realdoble.Devuelveelanchoestndar(valorpordefecto)delascolumnasdelahojadeclculo
especificada.
Type
Constante.Devuelveodefineeltipodelahojadeclculoespecificada(xlChart, xlDialogSheet,etc.).
Visible
Booleano.Indicasilahojadeclculoespecificadaestvisible.

4.Mtodos
Activate
Activalahojadeclculoespecificada.Equivaleahacerclicsobrelapestaadelahoja.
Calculate
Recalculalasceldasdelahojadeclculoespecificada.
CheckSpelling
Efectalaverificacinortogrficadelahojadeclculoespecificada(equivalealaopcinOrtografadel
menHerramientas).
Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

119

- 5-

CircleInvalid
Rodeaconuncrculolasentradasincorrectasenlahojadeclculoespecificada.
ClearArrows
Borralasflechasdeauditoradelahojadeclculoespecificada.
ClearCircles
Borraloscrculosquerodeanlasentradasincorrectasdelahojadeclculo.
Copy
Haceunacopiadelahojadeclculoespecificada(antesodespusdeunadelashojasdellibro).
Delete
Eliminalahojadeclculoespecificada.
Evaluate
Calculalaexpresinpasadacomoargumentoydevuelveelresultado.Laexpresin debecorresponder
aunafrmuladeclculoeningls.
ExportAsFixedFormat
PublicaunahojadeclculoenformatoPDFoXPS.
Move
Muevelahojadeclculoespecificadaaunaposicindada(antesodespusdeunadelashojasdel
libro).
Paste
Pegaelcontenidodelportapapelesenlahojadeclculoespecificada.
PasteSpecial
Pegaelcontenidodelportapapelesenlahojadeclculoespecificadarespetandoelformato
especificado(pegadoespecial).
PrintOut
Imprimelahojadeclculoespecificada.
PrintPreview
Muestralavistapreliminardelahojadeclculoespecificada.

- 6-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

120

Protect
Protegelahojadeclculoespecificada.
ResetAllPageBreaks
Redefinelossaltosdepginadelahojadeclculoespecificada.
SaveAs
Guardalahojadeclculoenunnuevolibro.
Select
Seleccionalahojadeclculo.
SetBackgroundPicture
Defineelgrficodefondodelahojadeclculoespecificada.
ShowAllData
Muestratodaslasfilasdelalistaactualmentefiltrada.
ShowDataForm
Muestralosdatosdelahojadeclculoespecificadacomoformulario(corresponde alaopcin
FormulariodelmenDatos).
UnProtect
Desactivalaproteccindelahojadeclculoespecificada.
Los mtodos relativos a mapas de datos XML (XmlDataQuery, XmlMapQuery, etc.) se explican en el captulo
Internet.

5.EjemplosdecdigosqueusanelobjetoWorksheet
a.Ordenarlashojasdeclculodeunlibro
Elsiguienteejemplopermite:

Ordenarlashojasdeunlibro.

Modificarelcolordelaspestaasdecadahoja.

Sub OrganizarHojas()
Dim oHoja As Worksheet
Dim i As Integer

Ordena las hojas del libro activo


Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

121

- 7-

OrdenaHojas ActiveWorkbook

Recorre las hojas de clculo

For i = 1 To ActiveWorkbook.Worksheets.Count
Set oHoja = ActiveWorkbook.Worksheets(i)
With oHoja

Modifica el color de la pestaa

.Tab.Color = vbRed
End With
Next i
End Sub
Private Sub OrdenaHojas(oLibro1 As Workbook)
Dim i As Integer
Dim j As Integer

Procedimiento para ordenar alfabticamente las hojas de clculo

de un libro

With oLibro1
For i = 1 To .Worksheets.Count
For j = 1 To i - 1
If .Worksheets(i).Name < .Worksheets(j).Name Then
.Worksheets(i).Move before:=.Worksheets(j)
End If
Next j
Next i
End With
End Sub

b.Proteccindelashojasdeclculodeunlibro
Esteejemploprotegelashojasdeclculodeunlibropermitiendolassiguientesautorizaciones:formatodeceldas,
agregarcolumnasyfilas,ordenamientoyautofiltros.Lasotrasoperaciones(eliminarfilasocolumnas,modificacin
deescenarios,etc.)quedanprohibidas.

Sub ProtegeHojas()
Dim oShtCurrent As Worksheet
For Each oShtCurrent In ActiveWorkbook.Worksheets
oShtCurrent.Protect Password:="Contrasea", _
contents:=True, AllowFormattingCells:=True, _
AllowInsertingColumns:=True, AllowInsertingRows:=True, _
AllowSorting:=True, AllowFiltering:=True
Next oShtCurrent
End Sub

c.Ordenarunatabla
Esteejemploordenaunatablasegntrescolumnas:ciudad,apellidoynombre.

- 8-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

122

Sub Ordena_Clientes()

Ordena la tabla de clientes por ciudad, apellido y nombre

Application.Goto Reference:="Clientes"
With ActiveWorkbook.Worksheets("Clientes").Sort
.SortFields.Clear
.SortFields.Add Key:=Range("C2:C30"), SortOn:=xlSortOnValues, _
Order:=xlAscending, DataOption:=xlSortNormal
.SortFields.Add Key:=Range("B2:B30"), SortOn:=xlSortOnValues, _
Order:=xlAscending, DataOption:=xlSortNormal
.SortFields.Add Key:=Range("D2:D30"), SortOn:=xlSortOnValues, _
Order:=xlAscending, DataOption:=xlSortNormal
.SetRange Range("A1:G30")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.Apply
End With
End Sub

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

123

- 9-

ElobjetoRange
ElobjetoRangerepresentaunrangodeceldasypuedeestarconstituidopor:

Unacelda.

Unafila.

Unacolumna.

Unrangodeceldascontiguas.

Unrangodeceldasnocontiguas.

Unrango3D.

1.PropiedadesymtodosquedevuelvenunobjetoRange
PropiedadesquedevuelvenunobjetoRange

Propiedad

Objeto

Objetodevuelto

contenedor
ActiveCell

Application

ObjetoRangequerepresentalaprimeraceldaactivadelaventana

Window

activaoespecificada.

Areas

Range

Coleccinqueagrupatodoslosrangosdeunaseleccinmltiple.

Cells

Application

ObjetoRangequerepresentaunaceldaounacoleccindeceldas:

Range
Worksheet

CircularReference

Worksheet

DelahojaactivasielobjetocontenedoresApplication.

DelrangoespecificadosielobjetocontenedoresRange.

Delahojadeclculoespecificadasielobjetocontenedores
Worksheet.

ObjetoRangequerepresentaelrangoquecontienelaprimera
referenciacirculardelahoja.

Columns

Application
Range
Worksheet

CurrentRegion

Range

ObjetoRangequerepresentalascolumnas:
l

DelahojaactivasielobjetocontenedoresApplication.

DelrangoespecificadosielobjetocontenedoresRange.

Delahojaespecificadasielobjetocontenedores
Worksheet.

ObjetoRangequerepresentaelobjetoRangeespecificado,
limitadoportodacombinacindefilasycolumnasvacas.

Dependents

Range

ObjetoRangequerepresentaelrangoquecontienetodaslas
celdasdependientesdeunaceldadada.Puedeserunaseleccin
mltiple(unindeobjetosRange)sihubieramuchasceldas
dependientes.

DirectDependents

Range

ObjetoRangequerepresentaelrangoquecontienetodaslas
celdasdirectamentedependientesdeunaceldadada.

DirectPrecedents

Range

ObjetoRangequerepresentaelrangoquecontienetodaslas
celdasdirectamenteantecedentesdeunaceldadada.

EntireColumn

Range

ObjetoRangequerepresentaunaomscolumnasenterasdel
rangoespecificado.

EntireRow

Range

ObjetoRangequerepresentaunaomsfilasenterasdelrango

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

124

- 1-

especificado.
End

Range

ObjetoRangequerepresentalaceldasituadaalfinaldelazonade
rangoespecificado.Correspondealacombinacindeteclas[Fin]
[Flechaarriba],[Fin][Flechaabajo],[Fin][Flechaizquierda]o[Fin]
[Flechaderecha].

Next

Range

ObjetoRangequerepresentalasiguienteceldadelrango
especificado.

Offset

Range

ObjetoRangeespecificadodesplazadounaomsfilasocolumnas.

Precedents

Range

ObjetoRangequerepresentaelrangoquecontienetodaslas
celdasantecedentesdeunaceldadada.

Previous

Range

ObjetoRangequerepresentalaceldaprecedentedeunacelda
dada.

Range

Application

ObjetoRangequerepresentaunrangodeceldas:

Range
Worksheet

Rows

Application

DelahojaactivasielobjetocontenedoresApplication.

DelrangoespecificadosielobjetocontenedoresRange.

Delahojaespecificadasielobjetocontenedores
Worksheet.

ObjetoRangequerepresentatodaslasfilas:

Range
Worksheet

UsedRange

Worksheet

DelahojaactivasielobjetocontenedoresApplication.

DelrangoespecificadosielobjetocontenedoresRange.

Delahojaespecificadasielobjetocontenedores
Worksheet.

ObjetoRangequerepresentaelrangousadoensutotalidadporla
hojadeclculoespecificada.

Las propiedades Next y Previous, aplicadas a los objetos Worksheet y Chart, devuelven un objeto tipo
Worksheetquerepresentalashojassiguienteyanterior,respectivamente.

MtodosquedevuelvenunobjetoRange

Mtodo
Intersect

Objetocontenedor
Application

Objetodevuelto
ObjetoRangequerepresentalainterseccinrectangulardevarios
rangos.

Union

Application

ObjetoRangequerepresentalaunindevariosrangoscontiguoso
discontiguos.

2.SintaxisdelaspropiedadesquedevuelvenunobjetoRange
Cells

Objeto.Cells ([RowIndex],[ColumnIndex])

- 2-

RowIndex

Nmerodefiladelacelda.

ColumnIndex

Nmerodecolumnadelacelda.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

125

Sinoseindicaningnargumento,Cellsdevuelvelacoleccindeceldasdelrangoespecificado.

Ejemplo
Elsiguienteejemplomodificaelcontenidoyelcolordeceldas.

Sub LlenaHoja()
Dim oCelda As Range

Modifica el contenido de la celda B1 de la hoja activa

Application.Cells(1, 2) = "Enero"

Modifica el contenido de la celda B2 de la hoja activa

ActiveSheet.Range("A1:G10").Cells(2, 2) = "Febrero"

Modifica el contenido de la celda B3 de la hoja activa

ActiveSheet.Cells(3, 2) = "Marzo"

Modifica el color de las celdas C1, C2, D1, D2

For Each oCelda In Range("C1:D2")


oCelda.Interior.Color = vbRed
Next oCelda
End Sub

Range

Objeto.Range (Cell1,[Cell2])
DondeCell1yCell2puedenser:

Unacelda(porejemplo:"A1").

Unrangodeceldas(porejemplo:"A1:B7").

Unnombredecelda(porejemplo:"Totales").

SiCell2estespecificado,Rangedevuelveunrangodeceldascontiguasqueincluyelosdosrangosespecificados.
Ejemplo
Esteejemplocrealasiguientetablaenunahojadeclculo.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

126

- 3-

Sub HojaResultado()
Dim i As Integer
With Application.ActiveSheet
.Range("B1").Value = "Resultados trimestrales"

Meses en columna

For i = 1 To 3
.Range("A" & i + 3).Value = _
Format((DateValue("01/" & i & "/01")), "MMMM")
Next i

Regiones en fila

Range("B3:E3").Value = Array("Este", "Oeste", "Sur", "Norte")

Formato de celdas

Range("B4:E7").NumberFormat = "# ##0.00 "


Range("A7").Value = "Totales"

Nombra las celdas que contienen los totales

Asigna una frmula a las celdas con nombre

Range("B7").Name = "Total1"
Range("Total1").Formula = "=SUM(B4:B6)"
Range("C7").Name = "Total2"
Range("Total2").Formula = "=SUM(C4:C6)"
Range("D7").Name = "Total3"
Range("Total3").Formula = "=SUM(D4:D6)"
Range("E7").Name = "Total4"
Range("Total4").Formula = "=SUM(E4:E6)"
End With
End Sub

OffSet

Objeto.OffSet ([rowOffset],[columnOffset])

rowOffset

Cantidaddefilasdedesplazamiento.

colOffset

Cantidaddecolumnasdedesplazamiento.

colOffsetyrowOffsetpuedencontenervaloresnegativos.

Ejemplo
Elsiguienteejemplodevuelveladireccindelrangoqueresultadeundesplazamiento defilasycolumnas.

Sub DevuelveOffset()
With Range("B5:C7")

- 4-

Desplazamiento de una fila hacia arriba

Devuelve $A$5:$B$7

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

127

MsgBox .Offset(0, -1).Address

Desplazamiento de dos columnas hacia la derecha

Devuelve $B$7:$C$9

MsgBox .Offset(2, 0).Address


End With
End Sub

Areas

Objeto.Areas ([Index])

Index

Nmerodelrangoendistintosrangosdelobjeto.

Sinoseindicaningnargumento,Areasdevuelvelacoleccinderangosespecificada.

Ejemplo

Esteejemplopermite:

Crearunazonaformadaporvariosrangosdeceldasdiscontinuos.

Llenarelprimerrangoapartirdeunamatriz.

Ponerennegritalafuenteparatodoslosrangos.

Sub MuchosRangos()
Dim oZonaTot As Range
Dim i As Integer

Unin de muchos rangos discontinuos

Set oZonaTot = Union(Range("B3:E3"), Range("B1:B5"),

Range("J2:F6"))
With ZonaTot

Primer rango completado a partir de una matriz


.Areas(1).Value = Array("Este", "Oeste", "Sur", "Norte")

Pone en negrita los caracteres de todos los rangos


For i = 1 To 3
.Areas(i).Font.Bold = True
Next i
.Select

End With
End Sub

3.Listadeobjetosycolecciones

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

128

- 5-

Objetos
Characters
Objetoquerepresentaloscaracteresdeltextodelaceldaespecificada.
Comment
Objetoquerepresentaelcomentarioasociadoalacelda.
DisplayFormat
Objetoquerepresentalasopcionesdevisualizacinparaelrangoespecificado.
Errors
Objetoquerepresentaloserroresenelrangoespecificado.
Font
Objetoquecontienelosatributosdefuente(nombre,tamao,color,etc.)delrangoespecificado.
Interior

- 6-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

129

Objetoquerepresentaelrellenodelasceldasdelrangoespecificado.
Name
Objetoquerepresentaunnombreparaunrangodeceldas(celdasconnombre).
PivotCell
Objetoquerepresentaunaceldaenuninformedetabladinmica.
Style
Objetoquerepresentaelestiloaplicadoalrangoespecificado.
Validation
Objetoquerepresentalavalidacindedatosaplicadaalrangoespecificado.
XPath
ObjetoquerepresentaunXPath(rutaXML)mapeadoenelrangodeceldasespecificado.

Colecciones
Areas
Coleccindetodoslosrangosenunaseleccindemuchaszonas.
Borders
Coleccindetodoslosbordesdelrangodeceldasespecificado.
FormatConditions
Coleccindelosformatoscondicionalesdelrangoespecificado.
HyperLinks
Coleccindeloshipervnculosdelrangoespecificado.
Phonetics
Coleccindeobjetosquecontienenlainformacindeunacadenadetextofonticaespecficaenuna
celda.
QueryTables
Coleccindeobjetosquerepresentalastablasdehojadeclculocreadasapartirdedatosdevueltos
porunorigendedatosexternos.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

130

- 7-

SparklineGroups
Coleccindelosobjetosquerepresentanelconjuntodeminigrficosparaelrangoespecificado.

4.Propiedades
a.Propiedadesrelacionadasconlaposicinyelformatodelasceldas
AllowEdit
Truesielrangopuedesermodificadoenunahojadeclculoprotegida.
AddressLocal
Devuelvelareferenciadelrangoespecificadoenelidiomadelusuario.
Address
Devuelvelareferenciadelrangoenellenguajedelamacro.
Column
Devuelveelnmerodelaprimeracolumnadelaprimerazonadelrangoespecificado.
ColumnWidth
Devuelveodefineelanchodetodaslascolumnasdelrangoespecificado.
HorizontalAlignment
Constante.Defineodevuelveeltipodealineacinhorizontal.
IndentLevel
Devuelveodefineelniveldesangraefectivo.
Row
Devuelveelnmerodelaprimerafiladelaprimerazonadelrango.
RowHeight
Devuelveelalto,medidoenpuntos,delasfilasdelrangoespecificado.
UseStandardHeight
TruesielaltodefiladelobjetoRangeesigualalaltoestndardelahoja.
UseStandardWidth

- 8-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

131

TruesielanchodecolumnadelobjetoRangeesigualalanchoestndardelahoja.
VerticalAlignment
Constante.Defineodevuelveeltipodealineacinvertical.

b.Propiedadesqueserelacionanconelcontenidodeceldasyconlasfrmulas
CountLarge
Determinaelvalormximoenelrango.
Formula
DevuelveodefinelafrmulaenelestilodereferenciaA1.
FormulaLocal
Devuelveodefinelafrmuladelobjeto,usandolasreferenciasdeestiloA1enelidiomadelusuario.
FormulaR1C1
Devuelveodefinelafrmuladelobjeto,usandolasnotacionesdeestiloR1C1.
FormulaR1C1Local
Devuelveodefinelafrmula,usandolasnotacionesdeestiloR1C1enelidiomadelusuario.
PrefixCharacter
Devuelveelprefijodealineacindelacelda.
Text
Valordelaceldaespecificadaconelformatoespecificado(contenidovisibledelacelda).
Value
Valordelaceldaespecificada.Silaceldaestvaca,lapropiedadValuedevuelveelvalorEmpty(use
lafuncinIsEmptyparatestearestecaso).SielobjetoRangecontienevariasceldas,devuelveuna
matrizdevalores(uselafuncinIsArrayparatestearestecaso).
WrapText
Booleano.TruesiMicrosoftExcelinsertaautomticamenteretornosdecarroeneltextodelobjeto.

c.Otraspropiedades
MergeCells
Truesielrangooelestilocontieneceldascombinadas.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

132

- 9-

ListHeaderRows
Devuelvelacantidaddefilasdeencabezadoenelrangoespecificado.

5.Mtodos
a.Mtodosquedevuelvenunobjeto
ColumnDifferences
DevuelveunobjetoRangequerepresentalasceldasdondeelcontenidoesdiferentealdelacelda
decomparacindecadacolumna.
Find
BuscaunainformacinespecficaenunrangoydevuelveunobjetoRangequerepresentalaprimera
celdadondeapareceesainformacin.
FindNext
Continaunabsqueda(siguientecelda)iniciadaconelmtodoFind.
FindPrevious
Continaunabsqueda(celdaanterior)iniciadaconelmtodoFind.
RowDifferences
DevuelveunobjetoRangequerepresentalasceldasenlasqueelcontenidoesdiferenteal
contenidodelaceldadecomparacindecadafila.
SpecialCells
DevuelveunobjetoRangequerepresentalasceldasquecorrespondenaltipoyalvalor
especificados.

b.Mtodosqueserelacionanconlapresentacindelasceldas
AddComment
Agregauncomentarioalrango.
AutoFit
Modificaelanchodelascolumnasdelrangooelaltodelasfilasparaajustarsusdatos.
BorderAround
AgregaunbordeaunrangoydefinelaspropiedadesColor,LineStyleyWeightdelnuevoborde.

- 10 -

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

133

ClearComments
Quitatodosloscomentariosdeceldadelrangoespecificado.
ClearFormats
Eliminalosformatosdelasceldas.
ClearNotes
Borralasnotasescritasysonorasdetodaslasceldasdelrangoespecificado.
InsertIndent
Insertaunasangraenlasceldasdelrangoespecificado.
Justify
Reorganizaeltextoenunrangodeformaquelollenedemanerauniforme.
Merge
Combinalasceldas.
NoteText
Devuelveodefinelasnotasdeceldasasociadasalaceldaubicadaenlaesquina superiorizquierda
delrango.
Sort
Ordenaunrangodevalores.
TextToColumns
Redistribuyeenvariascolumnasunacolumnadeceldasquecontienetexto.
UnMerge
Separaunaceldacombinadaenceldasindividuales.

c.Mtodosrelacionadosconelcontenidodelasceldas
AllocateChanges
Efectalareescrituraparaparatodaslasceldasmodificadasenunrangobasadoenunafuentede
datosOLAP.
AutoFill
Ejecutaunllenadoincrementalenlasceldasdelrangoespecificado.
Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

134

- 11 -

AutoComplete
DevuelveunacoincidenciadelafuncionalidadAutocompletardelalista.
ClearContents
Borraelcontenidodelasceldas.
ClearHyperlinks
Eliminatodosloshipervnculosdelrangoespecificado.
Consolidate
Consolidadatosqueprovienendevariosrangossituadosendiferenteshojasdeclculoenunnico
rangosituadoenunanicahojadeclculo.
Copy
CopiaalportapapeleselobjetoRangedelrangoespecificado.
CopyFromRecordSet
CopiaelcontenidodeunobjetoRecordsetADOoDAOenunahojadeclculo,comenzandoenla
esquinasuperiorizquierdadelrangoespecificado.
CopyPicture
Copiaelobjetoseleccionadoenelportapapelesenformadeimagen.
Cut
Cortaelobjetoyloguardaenelportapapelesolopegaenundestinoespecificado.
Delete
Eliminalasceldaseindicacmoreemplazarlasceldaseliminadas.
DiscardChanges
Descartatodosloscambiosdelasceldasrevisadasdelrango.
FillDown
Rellenaunrangohaciaabajo.
FillLeft
Rellenaunrangohacialaizquierda.

- 12 -

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

135

FillRight
Rellenaunrangohacialaderecha.
FillUp
Rellenaunrangohaciaarriba.
FunctionWizard
IniciaelAsistenteparafuncionesenlaceldasituadaenlaesquinasuperiorizquierdadelrango.
Insert
Insertaceldaseindicacmodesplazarlasceldas.
Parse
Redistribuyeunrangodedatosylodivideenvariasceldas.Distribuyeelcontenidodelrangode
maneraquellenevariascolumnasadyacenteselrangonopuedetenermsdeunacolumnade
ancho.
PasteSpecial
EfectaelpegadoespecialdeunobjetoRangequeprovienedelportapapeles,enelrango
especificado.
RemoveDuplicates
Eliminalosdatosrepetidosenunrangodevalores.
Replace
Buscayreemplazacaracteresenlasceldasdelrangoespecificado.Elusodeestemtodonocambia
laseleccinnilaceldaactiva.

d.Mtodosrelacionadosconlosnombresdeceldas
ApplyNames
Definenombresparalasceldasdelrangoespecificado.
CreateNames
Creanombresenelrangoespecificadoenfuncindelosrtulosdetextodelahoja.
ListNames
Pegaunalistaconlosnombresdelahojadeclculoquenoestnocultos,comenzandoporla
primeraceldadelrango.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

136

- 13 -

e.Mtodosrelacionadosconlosfiltros
AdvancedFilter
Filtraocopialosdatosdeunalistaenfuncindeunazonadecriterios.
AutoFilter
Filtraunalista.

f.Mtodosrelacionadosconelmodoesquema
ApplyOutlineStyles
Aplicalosestilosdelesquemaalrangoespecificado.
AutoOutline
Creaautomticamenteunesquemaparaelrangoespecificado.Sielrangotieneunanicacelda,
MicrosoftExcelcreaunesquemaparatodalahoja.
Group
Enunesquema,aumentaelniveldelrangoenelesquema.Elrangodebeserunafilaounacolumna
enteraounrangodefilasodecolumnas.Paraunrangodiscontinuodeuninformedetabladinmica,
reagrupaelrango.Paraunanicaceldadelrangodedatosdeuncampodetabladinmica,realiza
unreagrupamientonumricoocronolgicoenelcampo.
Ungroup
Promueveunrangoenunesquema(esdecir,reducesuniveldeesquema).Elrangoespecificado
debeserunafilaounacolumnaobienunrangodefilasocolumnas.Sielrangoseencuentraenun
informedetabladinmica,elmtododesagruparloselementosincluidosenelrango.

g.MtodosqueserelacionanconlaherramientadeAuditora
NavigateArrow
Desplazaunaflechaderastreodelrangoespecificadohacialaceldaolasceldasprecedentes,
dependientesoqueprovocanunerror.
ShowDependents
Muestralasflechasderastreoquesealanlasceldasdependientesdirectasdelrango.
ShowPrecedents
Muestralasflechasderastreoquesealanlasceldasprecedentesdirectasdelrango.
ShowErrors
Muestralasflechasderastreoatravsdelaestructuraenrboldelasceldasprecedentesalacelda
- 14 -

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

137

queoriginaelerrorydevuelveelrangoquelacontiene.

h.Otrosmtodos
Calculate
Calculalasfrmulasdetodosloslibrosabiertos.
CalculateRowMajorOrder
Calculaelrangodeceldasindicadoapartirdesuesquinasuperiorizquierdayhastalaesquina
inferiorderechaenelordenfilacampo.
Dirty
Indicaqueelrangoespecificadoserecalcularenlaprximaactualizacindelahoja.
ExportAsFixedFormat
PublicalosdatosdeunrangodevaloresenformatoPDFoXPS.
PrintOut
Imprimeelrangodeceldas.
Run
Ejecutaunamacro.
Table
Creaunatabladedatosapartirdelosvaloresdeentradaydelasfrmulasdefinidasenunahojade
clculo.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

138

- 15 -

Ejemplosdeusodelosobjetos
1.Clculodelimportedeunaprima

Elrangodeceldas"D6:D14"deberecibirelnombreVF.

CuandoelusuariohaceclicenelbotndecomandoClculodeprimas,seejecutarelprocedimientoCalc_Prima.
Este procedimiento selecciona el rango de celdas llamado VF (celdas "D6:D14") y llama a la funcin Prima para
calcularlaprimayasignarlaalaceldadeladerecha.

Sub Calc_Prima()
Dim dblVFProm As Double
Dim ocelda As Range

Seleccin del rango llamado VF

ThisWorkbook.Names("VF").RefersToRange.Select

Clculo del promedio de la seleccin

dblVFProm = Evaluate("AVERAGE(VF)")

Recorre las celdas de la seleccin

La prima calculada se asigna a la celda de la derecha

For Each ocelda In Selection


Cells(ocelda.Row, ocelda.Column + 1) = _
Prima(ocelda.Value, dblVFProm)
Next ocelda
End Sub

LafuncinPrimacalculalaprimaenfuncindelVF(volmendefacturacin)ydelpromediodelosotrosVF.

Function Prima(dblVF As Double, dblVFProm As Double) As Double

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

139

- 1-

Prima en funcin del importe VF

Select Case dblVF


Case Is < 100000
Prima = 0
Case Is < 125000
Prima = 500
Case Is < 150000
Prima = 1000
Case Else
Prima = 2000
End Select

Si el VF es superior al promedio

prima extra de 1000

If dblVF > dblVFProm Then


Prima = Prima + 1000
End If
End Function

2.Asignarcomentariosalasceldas

Cuando el usuario hace clic en el botn Comentarios, se ejecuta el procedimiento Mostrar_Comentarios. Este
procedimientollamaalprocedimientoCompara_Valorparacompararcadaunadelasceldasseleccionadasconla
celdasituadaasuizquierda.

Sub Mostrar_Comentarios()
Dim oRng1 As Range
Dim oRng2 As Range
Dim oRngCurrent As Range
Dim oCol As Object

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

140

Dim i As Integer
Dim j As Integer

Borra los comentarios y los estilos de la seleccin actual

Set oRngCurrent = ThisWorkbook.Worksheets("Ventas").Range("C5:D16")


With oRngCurrent
.ClearComments
.Font.Bold = False
.Font.Italic = False
.Borders.LineStyle = xlLineStyleNone

Recorre las columnas seleccionadas

Compara el valor de cada celda de la columna

con el de la celda situada a su izquierda


For i = 1 To .Columns.Count
Set oCol = .Columns(i)
For j = 1 To oCol.Cells.Count
Set oRng1 = oCol.Cells(j)
Set oRng2 = Cells(oRng1.Row, oRng1.Column - 1)
Compara_Valor oRng1, oRng2
Next j
Next i

End With
End Sub

Al llamar a la funcin Compara_Valor, recibe como argumentos las celdas que hay que comparar. En funcin del
porcentajedeevolucin(negativo,< 20 %,> 20 %),seasignauncomentarioyunformatoalaprimeracelda.

Sub Compara_Valor(oRng1 As Range, oRng2 As Range)


Dim dbl1, dbl2, dbl3 As Double
Dim strEvol As String

Compara los valores de dos celdas y asigna un comentario

With oRng1
dbl1 = oRng2.Value
dbl2 = .Value
dbl3 = (dbl2 - dbl1) / dbl1
strEvol = Format(Abs(dbl3), "0.00 %")
Select Case dbl3
Case Is < 0
.Font.Bold = True
.AddComment "Atencin: por debajo de " & strEvol
Case Is < 0.2
.Font.Italic = True
.AddComment "Bien: por encima de " & strEvol
Case Else
.Borders.LineStyle = xlContinuous
.AddComment "Excelente: por encima de " & strEvol
End Select
End With
End Sub

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

141

- 3-

Lastablasdinmicas
LacoleccinPivotTablescontienetodoslosobjetosdetabladinmica(objetosPivotTable)quehayenunahojade
clculo.

1.ElobjetoPivotTable
Esta seccin describe las colecciones, propiedades y mtodos ms comnmente utilizados para la creacin y
modificacindetablasdinmicas.

a.Colecciones
CalculatedFields
Coleccindetodosloscamposcalculadosdelatabladinmicaespecificada.
ColumnFields
Coleccindetodosloscamposdelatabladinmicaespecificadaquesemuestrancomocamposde
columna.
DataFields
Coleccindetodosloscamposdelatabladinmicaespecificadaquesemuestrancomocamposde
datos.
HiddenFields
Coleccindetodosloscamposdelorigendedatosdelatabladinmicaespecificadaquenose
muestran.
PageFields
Coleccindetodosloscamposdelatabladinmicaespecificadaquesemuestrancomocamposde
pgina.
RowFields
Coleccindetodosloscamposdelatabladinmicaespecificadaquesemuestrancomocamposde
fila.
PivotFields
Coleccindetodosloscamposdelorigendedatosdelatabladinmicaespecificada,semuestreno
no.
VisibleFields
Coleccindetodosloscamposdelorigendedatosdelatabladinmicaespecificadaquese
muestran.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

142

- 1-

TodasestascoleccionesdevuelvenobjetosPivotFieldquerepresentanuncampodelatabladinmica.

b.Propiedades
Las propiedades descritas a continuacin corresponden a las diferentes opciones de las tablas dinmicas (a las
quesepuedeaccederporlaopcindelmencontextualOpcionesdetabladinmica).
Estnclasificadasporpestaasyordenadasporordendevisualizacinenlapestaa.

OpcionesdelapestaaDiseoyformato

Propiedad
MergeLabel

Descripcin
Corresponde a la opcin Combinar y centrar celdas con

Tipo
Booleano

etiquetas.
CompactRowIndent

Nmero de caracteres de sangra de las etiquetas de fila en

Enterolargo

formacompacta.
DisplayErrorString

Indique si se muestra una cadena personalizada en las

Booleano

celdasconerror.
ErrorString

DisplayNullString

Cadenaquesemuestraenlasceldasquecontienenerrores

Cadena

cuandolapropiedadDisplayErrorStringtieneelvalorTrue.

caracteres

Indicasisemuestraunacadenapersonalizada enlasceldas

Booleano

de

quecontienenvaloresnulos.
ErrorNull

Cadenaquesemuestraenlasceldasquecontienenvalores

Cadena

nulos cuando la propiedad DisplayNullString tiene el valor

caracteres

de

True.
AsAutoFormat

CorrespondealaopcinAutoajustaranchosdecolumnasal

Booleano

actualizar.
PreserveFormating

Corresponde a la opcin Mantenerelformatodelaceldaal

Booleano

actualizar.

OpcionesdelapestaaTotalesyfiltros

Propiedad
ColumnGrand

Descripcin
CorrespondealaopcinMostrartotalesgeneralesdelas

Tipo
Booleano

filas.
RowGrand

CorrespondealaopcinMostrartotalesgeneralesdelas

Booleano

columnas.
AllowMultipleFilters

Corresponde a la opcin Permitir varios filtros por

Booleano

campo.
SortUsingCustomLists

Corresponde a la opcin Usar listas personalizadas al

Booleano

ordenar.

OpcionesdelapestaaMostrar

Propiedad
ShowDrillIndicators

Descripcin
Corresponde a la opcin Mostrar botones para

Tipo
Booleano

expandirycontraer.

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

143

DisplayContextTooltips

Corresponde a la opcin Mostrar informacin

Booleano

contextualsobreherramientas.
DisplayFieldsCaption

Correspondealaopcin Mostrarttulosdecampoy

Booleano

filtrarlistasdesplegables.
InGridDropZones

Corresponde a la opcin Diseo de tabla dinmica

Booleano

clsica.
ShowValuesRow

CorrespondealaopcinMostrarlafiladevalores.

Booleano

FieldListSortAscending

Corresponde a la opcin Listadecampos. Toma el

Booleano

valorTruesiseseleccionalaopcinOrdenardeAa
Z.

OpcionesdelapestaaImpresin

Propiedad

Descripcin

PrintDrillIndicators

Corresponde a la opcin Imprimir

Tipo
Booleano

botonesparaexpandirocontraer.
RepeatItemsOnEachPrintedPage

Corresponde a la opcin Repetir

Booleano

etiquetas de fila en cada pgina


impresa.
PrintTitles

Corresponde a la opcin Imprimir

Booleano

ttulos.

OpcionesdelapestaaDatos

Propiedad
SaveData

Descripcin
Corresponde a la opcin Guardar datos de origen con el

Tipo
Booleano

archivo.
EnabledDrillDown

CorrespondealaopcinHabilitarMostrar detalles.

Booleano

RefreshOnFileOpen

CorrespondealaopcinActualizaralabrirelarchivo.

Booleano

OpcionesdelapestaaTextoalternativo

Propiedad

Descripcin

Tipo

AlternativeText

CorrespondealaopcinTtulo.

Booleano

Summary

CorrespondealaopcinDescripcin.

Booleano

c.Mtodos
AddFields
Agregacamposdefila,decolumnaydefiltroaunatabladinmica.
ChangePivotCache
ModificaelobjetoPivotCache(cachdedatos)delatabladinmica.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

144

- 3-

ClearAllFilters
Eliminatodoslosfiltrosaplicadosalatabladinmica.
RefreshTable
Actualizalatabladinmicaapartirdelorigendedatos.

2.Creacindeunatabladinmica
Para crear una tabla dinmica, en primer lugar hay que definir su cach de datos con el objetoPivotCache, y a
continuacinutilizarelmtodoCreatePivotTabledelobjetoPivotCache.
Ejemplo
Esteejemplopermitecrearunatabladinmicaapartirdeunatabladeceldasllamada"TablaTiempos".

Dim oCache As PivotCache


Dim oPivotTable As PivotTable

Creacin de la cach de la tabla

Set oCache = ThisWorkbook.PivotCaches.Create _


(SourceType:=xlDatabase, SourceData:="TablaTiempos", _
Version:=xlPivotTableVersion15)

Creacin de la tabla dinmica

Set oPivotTable = oCache.CreatePivotTable _


(TableDestination:=Sheets("TCD").Cells(1, 2), _
TableName:="TCD1")

- 4-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

145

Losgrficos
UngrficoestrepresentadoporunobjetoChart,queestenlacoleccinShapes(objetosShape)querepresentan
lasformasuobjetosdibujadosenunahojadeclculo.Enelcasodeungrfico,elobjetoShaperepresentalazona
delgrfico.

1.ElobjetoShape
Estaseccindescribelaspropiedadesymtodosmscomnmenteutilizadosparacrearydarformatoalaszonas
degrficos.

a.Propiedades
Propiedades
Chart

Descripcin
DevuelveunobjetoChart que representa el grfico contenido en la

Tipo
Objeto

forma.
Fill

DevuelveunobjetoFillFormatquerepresenta elformatoderelleno

Objeto

delaforma.
Line

Devuelve un objeto LineFormat que contiene las propiedades de

Objeto

formatodelbordedelaforma.
TopLeftCell

Devuelve un objeto Range que representa la celda que est en la

Objeto

esquinasuperiorizquierdadelaforma.
HasChart

Indicasilaformacontieneungrfico.

Booleano

Height

Alturadelaformaenpuntos.

Realsimple

Left

Distancia, en puntos, entre el borde izquierdo de la forma y el

Realsimple

bordeizquierdodelacolumnaA.
Top

Distancia,enpuntos,entreelbordesuperiordelaformayelborde

Realsimple

superiordelahojadeclculo.
Width

Largodelaformaenpuntos.

Realsimple

b.Mtodos
Copy
CopialaformaenelPortapapeles.
CopyPicture
CopialaformaenelPortapapelescomounaimagen.
Delete
Eliminalaforma.

2.ElobjetoChart
Estaseccindescribelaspropiedadesymtodosmscomnmenteutilizadosparalacreacinyformatodegrficos.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

146

- 1-

a.Colecciones
Axes
Coleccindetodoslosejesdelgrfico.
SeriesCollections
Coleccindetodaslasseriesdedatosdelgrfico.

b.Propiedades
Propiedad

Descripcin

ChartArea

Devuelve un objeto ChartArea que representa la zona del

Tipo
Objeto

grfico.
ChartTitle

DevuelveunobjetoChartTitlequerepresenta elttulodelgrfico.

Objeto

PlotArea

Devuelve un objeto PlotArea que representa la zona de trazado

Objeto

delgrfico.
Legend

Devuelve un objeto Legend que representa la leyenda del

Objeto

grfico.
ChartType

Defineeltipodegrfico.

Constante

DisplayBlanksAs

Definelaformacomosemuestranlasceldas vacasenelgrfico.

Constante

HasLegend

Indicasielgrficotieneleyenda.

Booleano

HasTitle

Indicasielgrficotieneunttulovisible.

Booleano

c.Mtodos
ApplyChartTemplate
Aplicauntipodegrficoestndaropersonalizado.
ApplyDataLabels
Muestralasetiquetasdedatosparatodaslasseries.
Delete
Eliminaelgrfico.
Export
Exportaelgrficoaunarchivodetipoimagen.
ExportAsFixedFormat
Exportaelgrficoaunformatoespecificado(PDFoXPS).
PrintOut

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

147

Imprimeelgrfico.
PrintPreview
Muestraunavistapreviaantesdeimprimirelgrfico.
SaveChartTemplate
Agregaunaplantilladegrficopersonalizadaalalistadeplantillasdisponibles.
SetSourceData
Defineelrangodedatosdeorigendelgrfico.

3.Creacindeungrfico
ElmtodoAddChartdelacoleccindeobjetosShapespermitecrearungrfico.LapropiedadHasChartdelobjeto
Shapeindicasihayungrficoenlaforma.
Ejemplo
El siguiente ejemplo permite crear un grfico de tipo Sectores en 3D y modificar la presentacin del grfico (ttulo y esquinas
redondeadas).

Dim oSheet As Worksheet


Dim oShape As Shape
Dim oChart As ChartSet
Set oSheet = ThisWorkbook.Sheets("RESUMEN ACTIVIDAD")
Set oShape = oSheet.Shapes.AddChart(Excel.XlChartType.xl3DPie)
If oShape.HasChart Then
Set oChart = oShape.Chart
With oChart
.SetSourceData Source:= _
oSheet.Range("RESUMEN ACTIVIDAD!$B$6:$D$33")
.ChartTitle.Text = "Resumen del tiempo de trabajo"
.Parent.RoundedCorners = True
End With
End If

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

148

- 3-

Ejemplodeaplicacin
1.Presentacin
Elsiguienteejemplopermitegenerarautomticamentetablasygrficosestadsticossobreelrepartodeltiempode
trabajodelosempleadosporda,semana,actividad...
Losdatosdeorigenestnsituadosenlatabladeceldasllamada"TablaTiempos"quepuedeveracontinuacin.
Extractodelosdatosorigen

Ejemplodetabladinmicaygrficogenerado

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

149

- 1-

2.CdigoVBAdelejemplo
El procedimiento GeneraEstadisticas permite generar todas las tablas dinmicas y grficos. Hace una llamada al
procediminetoCreacion_TCDparalacreacindelastablasdinmicas.

Option Explicit
Dim oWbk As Workbook
_____________________________________________________________
Sub GeneraEstadisticas ()
Dim oSheet As Worksheet
Dim oShape As Shape
Dim oChart As Chart
Dim iNumVision As Integer
Dim iNumAct As Integer

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

150

Dim i As Integer
Dim j As Integer
Dim k As Integer

Elimina las hojas existentes

Set oWbk = ThisWorkbook


Application.DisplayAlerts = False
For i = oWbk.Sheets.Count To 2 Step -1
oWbk.Sheets(i).Delete
Next
Application.DisplayAlerts = True

Aade las nuevas hojas

For i = oWbk.Sheets.Count + 1 To 5
oWbk.Sheets.Add after:=oWbk.Sheets(oWbk.Sheets.Count)
Next
oWbk.Sheets(2).Name = "RESUMEN TAREA"
oWbk.Sheets(3).Name = "RESUMEN ACTIVIDAD"
oWbk.Sheets(4).Name = "RESUMEN DIA"
oWbk.Sheets(5).Name = "RESUMEN VISION"

Tabla dinmica Resumen Tarea

Creacion_TCD "TCD1", "Resumen Tarea", "Actividad", "Tarea"

Tabla dinmica Resumen Actividad

Creacion_TCD "TCD2", "Resumen Actividad", "Actividad", ""

Tabla dinmica Resumen Da

Creacion_TCD "TCD3", "Resumen Dia", "Semana", "Da"

Tabla dinmica Resumen Visin

Creacion_TCD "TCD4", "Resumen Vision", "Visin", ""

Recupera el nmero de actividades

iNumAct = Sheets("TIEMPOS").Range("NUM_ACTIVIDADES")

Grfico Resumen por Actividad

Set oSheet = oWbk.Sheets("RESUMEN ACTIVIDAD")


Set oShape = oSheet.Shapes.AddChart(Excel.XlChartType.xl3DPie)
If oShape.HasChart Then
Set oChart = oShape.Chart
With oChart
.SetSourceData Source:= _
oSheet.Range("RESUMEN ACTIVIDAD!$B$6:$D$" & iNbAct + 5)
.ChartTitle.Text = "Resumen del Tiempo de trabajo"
.Parent.RoundedCorners = True
.ApplyDataLabels
.ShowAllFieldButtons = False
End With
End If

Posicin y tamao

With oShape
.Left = 50
.Top = 200

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

151

- 3-

.ScaleWidth 1.15, msoFalse, msoScaleFromTopLeft


.ScaleHeight 1.3, msoFalse, msoScaleFromTopLeft
.IncrementLeft -400
.IncrementTop 80
.ThreeD.RotationY = 30
End With

Leyenda del grfico

With oChart.Legend
.Position = xlBottom
.Left = 25
.Top = 200
.Width = 400
.Height = 60
End With

Color de fondo del grfico

Dim oFill As FillFormat


Set oFill = oShape.Fill
With oFill
.ForeColor.RGB = RGB(240, 238, 228)
.Solid
End With

Etiquetas de datos

With oChart.SeriesCollection(1).DataLabels
.ShowPercentage = True
.ShowValue = False
.Position = 5
.NumberFormat = "0%"
End With

Exporta el grfico en formato PDF

oChart.ExportAsFixedFormat xlTypePDF, "C:\TABLA\RESUMEN_ACTIVIDAD"

Recupera el nmero de valores para la columna VISION

iNumAct = Sheets("TIEMPOS").Range("NUM_VISIONES")

Grfico Resumen por Vision

Set oSheet = oWbk.Sheets("RESUMEN VISION")


Set oShape = oSheet.Shapes.AddChart(Excel.XlChartType.xl3DPie)
Set oChart = oShape.Chart
With oChart
.SetSourceData Source:= _
oSheet.Range("RESUMEN VISION!$B$6:$C$" & iNumVision + 5)
.ChartTitle.Text = "Resumen del Tiempo de trabajo"
.Parent.RoundedCorners = True
.ApplyDataLabels
.Legend.Delete
End With

Posicin y tamao

With oShape
.Left = 30
.Top = 200

- 4-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

152

.ThreeD.FieldOfView = 5
End With

Color de fondo del grfico

Set oFill = oShape.Fill


With oFill
.ForeColor.RGB = RGB(240, 238, 228)
.Solid
End With

Etiquetas de datos

With oChart.SeriesCollection(1).DataLabels
.ShowPercentage = True
.ShowValue = False
.ShowCategoryName = True
.Position = 5
.NumberFormat = "0%"
End With

Exporta el grfico en formato PDF

oChart.ExportAsFixedFormat xlTypePDF, "C:\TABLA\RESUMEN_Vision"

Color para las visiones

Dim lRed As Long, lGreen As Long, lBlue As Long


lRed = 0: lGreen = 0: lBlue = 0

Busca el color en el rango VISIONES

Dim sVision As String


Dim rngVision As Range
Set rngVision = Sheets("TIEMPOS").Range("VISIONES")
For j = 1 To iNumVision
sVision = oSheet.Range("B" & 6 + j).Value & Space(0)
If sVision <> "" And sVision <> "(vacio)" Then
For k = 1 To rngVision.Rows.Count
If rngVision.Cells(k, 1) = sVision Then
ColorRGB rngVision.Cells(k, 2).Interior.Color, _
lRed, lGreen, lBlue
Exit For
End If
Next k

Color en el grfico

With oChart.SeriesCollection(1).Points(j).Format.Fill
.ForeColor.RGB = RGB(lRed, lGreen, lBlue)
End With

Color en la tabla dinmica

oSheet.Range("B" & 6 + j).Font.Color = _


RGB(lRed, lGreen, lBlue)
End If
Next j

Posicin en la hoja

Resumen actividad

oWbk.Sheets("Resumen Actividad").Activate
Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

153

- 5-

Application.ScreenUpdating = True
End Sub

ElprocedimientoCreacion_TCDpermitegenerarunatabladinmicaapartirdedatosdelahoja"TIEMPOS"conlos
siguientesparmetros:nombredelatabladinmica,nombredelahojadedestinoynombredeloscamposdefila.

Private Sub Creacion_TCD(sTCDName As String, sSheetName As _


String, sField1 As String, sField2 As String)
Dim iFil As Integer
Dim oSheet As Worksheet
Dim oCache As PivotCache

Creacin de una tabla dinmica

iFil = 6
oWbk.Activate
Set oSheet = oWbk.Sheets("Tiempos")

Creacin de la cach de la tabla

Set oCache = oWbk.PivotCaches.Create(SourceType:=xlDatabase, _


SourceData:="TablaTiempos", Version:=xlPivotTableVersion15)

Creacin de la tabla

oCache.CreatePivotTable _
TableDestination:=oWbk.Sheets(sSheetName).Cells(iFil, 2), _
TableName:=sTCDName
Set oSheet = oWbk.Sheets(sSheetName)

Filas de la Tabla

With oSheet.PivotTables(sTCDName).PivotFields(sField1)
.Orientation = xlRowField
.Position = 1
End With
If sField2 <> "" Then
With oSheet.PivotTables(sTCDName).PivotFields(sField2)
.Orientation = xlRowField
.Position = 2
End With
End If
oSheet.PivotTables(sTCDName).CompactLayoutRowHeader = _
UCase(sField1)

Elimina los valores vacos

oSheet.PivotTables(sTCDName).PivotFields(sField1) _
.PivotFilters.Add Type:=16, Value1:="(vacio)"

Tiempos en duracin y porcentaje

oSheet.PivotTables(sTCDName).AddDataField _
oSheet.PivotTables(sTCDName).PivotFields("DURACIN"), _
"TIEMPOS", xlsum
oSheet.PivotTables(sTCDName).AddDataField _
oSheet.PivotTables(sTCDName).PivotFields("DURACIN "), _
"PORCENTAJE", xlsum

- 6-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

154

oSheet.Columns("C").NumberFormat = "[hh]:mm"
With oSheet.PivotTables(sTCDName).PivotFields("PORCENTAJE")
.Calculation = xlPercentOfTotal
.NumberFormat = "0.00%"
End With
oSheet.Columns("B:C").EntireColumn.AutoFit

Formato de la hoja de clculo

Formato oSheet
End Sub

Elprocedimiento Formatopermitedarformatoalasdiferenteshojasdeclculo,mostrarunttuloyelnombredel
empleadoyelperiodo.

Private Sub Formato(zSheet As Worksheet)

Dar formato a una hoja de clculo

With zSheet

Tamao de las columnas

.Columns("A").ColumnWidth = 15
.Columns("E").ColumnWidth = 12

Ttulo

.Cells(1, 1).FormulaR1C1 = zSheet.Name


With .Range("A1:E1").Font
.Bold = True
.Name = "Calibri"
.Size = 16
End With

Fusin de las celdas del ttulo

With .Range("A1:E1")
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.Merge
End With

Nombre y periodo

.Cells(3, 1).FormulaR1C1 = Sheets("TIEMPOS").Range("EMPLEADO")


.Cells(4, 1).FormulaR1C1 = "Periodo del " _
& Sheets("TIEMPOS").Range("FECHA_INICIO") _
& " au " & Sheets("TIEMPOS").Range("FECHA_FIN")
With .Range("A3:G4").Font
.Bold = True
.Name = "Calibri"
.Size = 12
End With

Fusin de las celdas

With .Range("A3:E3")
.HorizontalAlignment = xlCenter

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

155

- 7-

.VerticalAlignment = xlCenter
.Merge
End With
With .Range("A4:E4")
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.Merge
End With
End With
End Sub

La funcin ColorRGB permite recuperar los valores RGB de un color. En el ejemplo, los colores de los diferentes
valoresposiblesdelcampo"Vision"seconfiguranenelrangollamado"VISIONES"delahoja"TIEMPOS".

Public Function ColorRGB(ByVal lColor As Long, R As Long, _


G As Long, B As Long)

Devuelve los valores RGB de un color

R = Int(lColor Mod 256)


G = Int((lColor Mod 65536) / 256)
B = Int(lColor / 65536)
End Function

- 8-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

156

Creacindeunatabladinmicaconminigrficos
Elejemplosiguientepermite:

CrearypersonalizarunatabladinmicautilizandolascoleccionesdeobjetosPivotTablesyPivotFields.

Agregarunformatocondicionaldetipobarradedatos,utilizandolacoleccindeobjetosFormatConditions.

AgregarminigrficosutilizandolacoleccindeobjetosSparklineGroups.

Agregarunsegmentoparafiltrarlosdatosdeuncliente,utilizandolacoleccindeobjetosSlicerCaches.

Lahojadeclculo,creadamediantecdigoVBA,sevisualizadelsiguientemodo:

Paraejecutaresteejemplo,realicelassiguientesoperaciones:
Cree un nuevo libro basado en la plantilla Informe de ventas (teclee Informe de ventas en el cuadro
Buscarplantillasenlneaparaaccederaestaplantilla).
GuardeellibrocomoInformedeventas.xlsm.
AsigneelnombreVentas_2015atodaslasceldasdelahoja"Datosorigen"(rango"A1:F278").
Inserteelcdigodelsiguienteprocedimientoenunnuevomdulo.
Ejecuteelcdigo.

Sub Tabla_Dinamica()
Dim wSheet As Worksheet
Dim i As Integer
Dim NumLineas As Integer

Selecciona el rango (origen de datos)

Application.Goto Reference:="Ventas_2015"

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

157

- 1-

Elimina la hoja TD_Productos si existe

For i = 1 To Worksheets.Count
If Worksheets(i).Name = "TD_Productos" Then
Application.DisplayAlerts = False
Worksheets(i).Delete
Application.DisplayAlerts = True
Exit For
End If
Next i

Crea la hoja TD_Productos

Set wSheet = Sheets.Add


wSheet.Name = "TD_Productos"

Inserta un grfico en la hoja creada

ActiveWorkbook.PivotCaches.Create _
(SourceType:=xlDatabase, SourceData:="VENTAS_2015", _
Version:=xlPivotTableVersion15).CreatePivotTable _
TableDestination:="TD_PRODUCTOS!R1C1", TableName:= _
"TD Productos", DefaultVersion:=xlPivotTableVersion15

Muestra la lista de campos de la tabla dinmica

ActiveWorkbook.ShowPivotTableFieldList = True

Inserta el campo Producto y los 4 trimestres

With wSheet.PivotTables("TD Productos")


.PivotFields("Producto").Orientation = xlRowField
.PivotFields("Producto").Position = 1

4 campos Trimestre

For i = 1 To 4
.AddDataField ActiveSheet.PivotTables("TD Productos") _
.PivotFields("Tri " & i), "Trimestre " & i, xlSum
Next i

Campo Total 2015

.AddDataField ActiveSheet.PivotTables("TD Productos") _


.PivotFields("Total"), "Total 2015", xlSum
End With

Diseo de la tabla dinmica

With wSheet.PivotTables("TD Productos")

Estilo de la tabla dinmica

.TableStyle2 = "PivotStyleLight16"

Tamao de las columnas

Columns("B:F").Select
Selection.ColumnWidth = 13

Ttulo de los datos

.CompactLayoutRowHeader = "Productos"

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

158

.DataPivotField.Caption = "Ventas"

Formato moneda para los valores numricos

For i = 1 To 4
.PivotFields("Trimestre " & i).NumberFormat = "# ##0.00 "
Next i
.PivotFields("Total 2015").NumberFormat = "# ##0.00 "
End With

Nmero de filas de la tabla dinmica

Range("B2").Select
Selection.End(xlDown).Select
NumLineas = ActiveCell.Row

Formato condicional Barra de datos

en la ltima columna

Range("F2:F" & NumLineas - 1).Select


Selection.FormatConditions.AddDatabar
With Selection.FormatConditions(1)
.BarColor.Color = 15698432
.BarColor.TintAndShade = 0
.BarFillType = xlDataBarFillGradient
.BarBorder.Type = xlDataBarBorderSolid
End With

Aade un minigrfico de tipo lneas

Range("G2:G" & NumLineas).Select


Range("G2:G" & NumLineas).SparklineGroups.Add _
Type:=xlSparkLine, SourceData:="B2:E" & NumLineas
With Selection.SparklineGroups.Item(1)
.SeriesColor.ThemeColor = 5
.SeriesColor.TintAndShade = -0.5
.Points.Markers.Color.ThemeColor = 5
.Points.Markers.Color.TintAndShade = 0.5
.Points.Highpoint.Color.ThemeColor = 5
End With

Aade un minigrfico de tipo barras

Range("H2:H" & NumLineas).Select


Range("H2:H" & NumLineas).SparklineGroups.Add _
Type:=xlSparkColumn, _
SourceData:="B2:E" & NumLineas
With Selection.SparklineGroups.Item(1)
.SeriesColor.ThemeColor = 5
.SeriesColor.TintAndShade = -0.5
.Points.Markers.Color.ThemeColor = 5
.Points.Markers.Color.TintAndShade = 0.5
.Points.Highpoint.Color.ThemeColor = 5
End With

Aade un segmento en el campo Cliente

ActiveWorkbook.SlicerCaches.Add _
(wSheet.PivotTables("TD Productos"), "Cliente") _
.Slicers.Add ActiveSheet, , "Cliente", "Cliente", _

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

159

- 3-

200, 20, 100, 100


ActiveSheet.Shapes.Range(Array("Cliente")).Select

Oculta la lista de campos de la tabla dinmica

ActiveWorkbook.ShowPivotTableFieldList = False
End Sub

- 4-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

160

Presentacin
El objetivo principal de los cuadros de dilogo es controlar el intercambio de informacin con el usuario: mostrar
mensajes,pedirinformacin,vistayentrada dedatos,etc.
Existentrestiposdecuadrosdedilogo:

Los cuadros de dilogo llamados cuadros de dilogo integrados, que permiten, por ejemplo, abrir o guardar un
archivo,definirlasopcionesdeExcel,imprimirhojasdeclculo,ordenardatos,etc.

Los cuadros de dilogo predefinidos, que permiten mostrar un mensaje, hacer una pregunta al usuario o invitarlo a
introducirunainformacin.

Los cuadros de dilogo personalizados o formularios, que permiten mostrar o introducir datos en una interfaz
amigable.Lacreacindeformulariospersonalizadosseexplicaenelcaptulosiguiente.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

161

- 1-

Cuadrosdedilogointegrados
1.ElobjetoDialog
LoscuadrosdedilogointegradossonobjetosDialogpertenecientesalacoleccinDialogsdelobjetoApplication.
Sintaxis
Paramostraruncuadrodedilogo,useelmtodoShowsegnlasiguientesintaxis:Application.Dialogs
(xlDialog).Show
dondexlDialogesunaconstantedeExcelqueindicaelcuadrodedilogoquehayquemostrar.
EjemplosdeconstantesxlDialog

Constante

Cuadrodedilogo

xlDialogBorder

Bordes

xlDialogFontProperties

Fuente

xlDialogDisplay

Opcionesdevisualizacin

xlDialogDefineName

Definirunnombre

xlDialogFormulaGoto

Ira...

xlDialogOpenAbrir

Abrir

xlDialogSaveAs

Guardarcomo...

xlDialogSort

Ordenar

2.LosmtodosGetOpenFileNameyGetSaveAsFileName
Los mtodos GetOpenFileName y GetSaveAsFileName del objeto Application muestran, respectivamente, los
cuadrosdedilogoAbrir...yGuardarcomo...delmenArchivo.
A diferencia de los objetos Dialogs correspondientes (constantes xlOpen y xlSaveAs), estos mtodos no realizan
ningunaaccinsolamentepermitenrecuperarelnombredelarchivointroducidooseleccionadoporelusuario.
SintaxisdelmtodoGetOpenFileName

Application.GetOpenFileName(FileFilter, FilterIndex, Title,


ButtonText, MultiSelect)

Todoslosargumentossonopcionales.

FileFilter

Criteriosdefiltrado:nombredelfiltroseguidodelaextensin.Porejemplo:
"PginaWeb(*.htm*.html),*.htm*.html".

FileIndex

ndicedelcriteriodefiltradopordefecto.

Title

Ttulodelcuadrodedilogo.

ButtonText

EtiquetadelbotnAbrir(solamenteparaMacintosh).

MultiSelect

Indicasielusuariopuedeseleccionarvariosarchivos.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

162

- 1-

SintaxisdelmtodoGetSaveAsFileName

Application.GetSaveAsFileName(InitialeFile, FileFilter,
FilterIndex, Title, ButtonText)

Todoslosargumentossonopcionales.

NombredelarchivoqueapareceenlazonadetextoNombre.Siseomiteeste

InitialeFile

argumento,Excelusaelnombredellibroactivo.

LosotrosargumentossonlosmismosquelosargumentosdelmtodoGetOpenFileName.
Ejemplo

Esteejemplopermite:

MostrarelcuadrodedilogoAbrirconlaposibilidaddeseleccionarmsdeunarchivo.

Guardar en una matriz los nombres de los archivos seleccionados del tipo indicado (extensin xlsm) y que no se
encuentrenyaabiertos.

Mostrarunmensajequeindicalosarchivosqueseabrirn.

Abriresosarchivostraspedirconfirmacin.

Sub AbreLibros()
Dim varFiles As Variant
Dim xlFiles() As Variant
Dim blnAbierto As Boolean
Dim strMensaje As String
Dim objWbk As Workbook
Dim i As Integer
Dim j As Integer

Muestra el cuadro de dilogo Abrir

varFiles = Application.GetOpenFilename _
(filefilter:="Archivos Excel (*.xlsm),*.xlsm", _
Title:="Seleccione los archivos que hay que abrir", _
MultiSelect:=True)

Prueba si los archivos han sido seleccionados

If TypeName(varFiles) = "Variant()" Then


ReDim xlFiles(UBound(varFiles))
For i = 1 To UBound(varFiles)

Controla la extensin del archivo

If Right(varFiles(i), 4) = "xlsm" Then

Prueba si el archivo ya est abierto

blnAbierto = False
For Each objWbk In Workbooks
If objWbk.Path & "\" & objWbk.Name = varFiles(i) Then
blnAbierto = True
End If
Next objWbk

Guarda el nombre del archivo en una matriz

If Not blnAbierto Then

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

163

j = j + 1
xlFiles(j) = varFiles(i)
strMensaje = strMensaje & varFiles(i) & vbCr
End If
End If
Next i

Abre todos los archivos de Excel tras confirmacin

If j > 0 Then
strMensaje = "Confirme la apertura de los archivos: " _
& vbCr & strMensaje
If MsgBox(strMensaje, vbYesNo + vbQuestion) = vbYes Then
For i = 1 To j
Workbooks.Open Filename:=xlFiles(i)
Next i
End If
End If
Else
MsgBox "Ningn archivo seleccionado"
End If
End Sub

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

164

- 3-

Cuadrosdedilogopredefinidos
1.LafuncinInputBox
Muestraunapregunta(unasolicituddedatos)ydevuelveeltextoescritoporelusuario.

InputBox(prompt,title,default,xpos,ypos,helpfile,context)

prompt

Cadenaqueaparecercomomensaje.

title

Cadenaqueaparecerenlabarradettulo.

default

Valortomadopordefecto.

xpos

Posicinhorizontaldelcuadrodedilogo(expresadoentwips).

ypos

Posicinverticaldelcuadrodedilogo(expresadoentwips).

helpfile

Nombredelarchivodeayudacontextual.

context

Nmerodelcontextodeayuda.

Ejemplo
Esteejemplomuestrauncuadrodedilogoquepideelnombredelasceldas quehayqueborrar(lasceldasrecibenelnombre
decadames).

Sub Borrar_Celdas_Nombradas()
Dim sOpcion As String

Pide introducir el mes que hay que borrar

Si el mes se reconoce, borra las celdas con nombre

Si no, muestra un mensaje de error

sOpcion = InputBox( _
Prompt:="Qu mes desea borrar?", _
Title:="Borrar celdas")
On Error GoTo Err
Application.Goto reference:=sOpcion
Selection.Clear
Exit Sub
Err:
MsgBox "No se puede borrar, nombre de celda inexistente"
End Sub

2.ElmtodoInputBox
ActacomolafuncinInputBox,peropermitecontrolareltipodedatosquehayqueintroducir.

objeto.InputBox(prompt,title,default,left,top,helpfile,
helpContextID,type)

ElobjetoesobligatorioydebeserunobjetoApplication.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

165

- 1-

prompt

Mensajemostrado.

title

Ttulodelcuadrodedilogo.

default

Valortomadopordefecto.

left

Posicinhorizontaldelcuadrodedilogo(enpuntos).

top

Posicinverticaldelcuadrodedilogo(enpuntos).

helpfile

Nombredelarchivodeayudaenlnea.

helpContextID

Nmerodelcontextodeayuda.

type

Tipodedatosquesedevolver:
0:Frmula
1:Nmero
2:Cadena
4:ValorBooleano
8:Referenciadecelda
16:Valordeerror
64:Matrizdevaloresenunaseleccindeceldas.

Para aceptar varios tipos de datos, haga la suma de los valores. Por ejemplo, si se puede aceptar un texto o un
nmero,indiqueelvalor3(1+2)comotipo.

Ejemplo
Pidealusuarioseleccionarlaceldaolasceldasquehayquepintar.

Sub Celdas_A_Pintar()
Dim strRep as Range

Si el usuario selecciona celdas,

estas se pintan de rojo

Si hace clic en Cancelar, termina el procedimiento

On Error GoTo Err


Set strRep = Application.InputBox( _
Prompt:="Seleccione la celda o las celdas que hay que pintar", _
Title:="Celda que hay que pintar", Default:="A1",

Type:=8)

strRep.Interior.ColorIndex = 3
Err:
End Sub

3.LafuncinMsgBox
Estafuncinmuestraunmensajeenuncuadrodedilogo.Puedeincluiruniconoydeunoatresbotones.
Sintaxisdelainstruccin
Usadacuandoapareceunnicobotn.

MsgBox <message> [, [<type>][, <title>]]

Sintaxisdelafuncin

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

166

Usadacuandoaparecemsdeunbotn.Permitesaberqubotnactivelusuario,atravsdelvalordevuelto.

MsgBox (<message> , [<buttons>][, <title>]


[,helpfile, context])

message

Textodelmensajequeapareceenelcuadrodedilogo.

buttons

Expresinnumricaquerepresentalasumadelosvaloresqueespecificanlosbotones
quehayquemostrar,eltipodeiconoquehayqueusar,laidentidaddelbotnpor
defectoylamodalidaddelcuadro.

title

Textoenlabarradettulo.

helpfile

Archivodeayudaquehayqueusar.

context

Nmerodelcontextodeayuda.

ValoresdelargumentoButtons

Constantesimblica

Valor

Significado

Nmeroytipodelosbotones
vbOKOnly

MuestrasolamenteelbotnAceptar.

vbOKCancel

MuestralosbotonesAceptaryCancelar.

vbAbortRetryIgnore

MuestralosbotonesAnular,Reintentare Ignorar.

vbYesNoCancel

MuestralosbotonesS,NoyCancelar.

vbYesNo

MuestralosbotonesSyNo.

vbRetryCancel

MuestralosbotonesReintentaryCancelar.

vbMsgBoxHelpButton

16384

Muestraunbotndeayuda.

Tipodeicono
vbCritical

16

vbQuestion

32

vbExclamation

48

vbInformation

64

Muestraelicono

Muestraelicono

Muestraelicono

Muestraelicono

Botnpordefecto
vbDefaultButton1

Primerbotn.

vbDefaultButton2

256

Segundobotn.

vbDefaultButton3

512

Tercerbotn.

vbDefaultButton4

768

Cuartobotn.
Modalidad

vbApplicationModal

Aplicacinmodal.
Elusuariodeberesponderalmensajequeapareceen
elcuadrodemensajesantesdeseguirtrabajandoen
laaplicacin actual.

vbSystemModal

4096

Sistemamodal.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

167

- 3-

Sesuspendentodaslasaplicacioneshastaqueel
usuariorespondaalmensajequeapareceenelcuadro
demensajes.
Presentacin
vbMsgBoxSetForeground

65536

Muestralaventanadelcuadrodemensajeenprimer
plano.

vbMsgBoxRight

524288

vbMsgBoxRtlReading

1048576

Alineaeltextoaladerecha.
Especificaelordendelecturadederechaaizquierda
paralossistemashebreoyrabe.

Losvaloresdevueltostambinsedefinenmedianteconstantes:

Constante

Valordevuelto

Botnelegido

vbOK

Aceptar

vbCancel

Cancelar

vbAbort

Anular

vbRetry

Reintentar

vbIgnore

Ignorar

vbYes

vbNO

No

Ejemplos:usodelafuncinMsgBox

iRep = MsgBox ("Por favor, confirme", 292, _


"Confirmacin")

iRep = MsgBox ("Desea guardar los cambios?", _


vbYesNo + vbQuestion + vbDefaultButton2, _
"Confirmacin")

UsodelainstruccinMsgBox

MsgBox "Resultado incorrecto",vbCritical,"Error"

- 4-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

168

Ejemplo
Lasiguientemacropidealusuarioqueseleccionelascolumnasquesedeben eliminar(laseleccindecolumnassepuedehacer
apartirdeunaomsceldasdelacolumna)yqueconfirmelaeliminacin.

Sub Confirmacion()
Dim oCualCol As Range
Dim vAConfirmar as Variant

Elegir las columnas

Set oCualCol = Application.InputBox( _


Prompt:="Seleccione las columnas que desea eliminar", _
Title:="Elija las columnas", _
Type:=8)
Set oCualCol = oCualCol.EntireColumn

Selecciona las columnas y pide confirmacin

oCualCol.Select
vAConfirmar = MsgBox( _
Prompt:="Confirma la eliminacin de las columnas seleccionadas?", _
Title:="Eliminacin de las columnas", _
Buttons:=vbYesNo + vbExclamation + vbDefaultButton2)
If vAConfirmar = vbYes Then oCualCol.Delete
End Sub

4.Constantesusadasenloscuadrosdedilogo
Enlosmensajesdeloscuadrosdedilogo,puedeusarlassiguientesconstantesparainsertaralgunoscaracteres
especiales.

Carcterquedeseainsertar

Constante

Equivalente

Retornodecarroysaltodelnea

vbCrLf

Chr(13)+Chr(10)

Saltodeprrafo

vbCr

Chr(13)

Saltodelnea

vbLf

Chr(10)

Carcternulo

vbNullChar

Chr(0)

Diferenteaunacadenadelongitudnula

vbNullString

Cadenaquetieneelvalorcero

Tabulacin

vbTab

Chr(9)

Retroceso

vbBack

Chr(8)

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

169

- 5-

Estasconstantespuedenusarseenotrasinstrucciones,ademsdeloscuadrosdedilogo.

Ejemplo
Paramostrarestecuadrodedilogo:

seutilizelsiguienteprocedimiento:

Sub Identificacion()
MsgBox "Usted es:" & vbCr & vbTab _
& Application.UserName & vbCr & vbTab _
& ThisWorkbook.BuiltinDocumentProperties("Company")
End Sub

- 6-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

170

Presentacin
Losformularios(tambinllamadoscuadrosdedilogopersonalizados,formulariospersonalizados,hojasdelusuarioo
UserForm) permiten disponer de interfaces de usuario simples y amigables para la introduccin, modificacin o
visualizacindedatos.
Losformulariospersonalizadossoncuadrosdedilogosobrelosquesepuede:

UbicarcontrolesActiveX,talescomocuadrosdeentradadetexto,listasdesplegables,botonesdecomando,etc.

Asociar cdigo VBA para responder a distintos eventos del usuario (clic en un botn de comando, introduccin de
textoenunazona,seleccinenunalistadesplegable,etc.).

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

171

- 1-

Crearunformulario
UnformulariosecreaenunahojaUserForm.
ParainsertarunahojaUserForm,accedaaMicrosoftVisualBasicyluegoseleccionelasopcionesInsertar
UserForm.
SeagregarunahojallamadaUserFormn(porejemplo:UserForm1),aparecerunformulariovacoyel
cuadrodeherramientas.
Paramostrarlaventanadepropiedades,seleccionelasopcionesVerVentana Propiedades,hagaclicen

elbotn
opulselatecla[F4].

(Name)
Nombredelformulario.
Caption
Textoenlabarradettulo.
Para dimensionar el formulario, seleccinelo y arrastre los controladores de tamao o indique las
propiedadesHeightyWidthdelformulario.
LaopcinControlesadicionalespermiteagregarotroscontrolesdesdelabarradeherramientas.

Listadecontroles

Herramienta

Nombre

Objeto

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

172

- 1-

Etiqueta

Label

Cuadrodetexto

TextBox

Cuadrocombinado

ComboBox

Cuadrodelista

ListBox

Casilladeverificacin

CheckBox

Botndeopcin

OptionButton

Botndealternar

ToggleButton

Marco

Frame

Botndecomando

CommandButton

Barradetabulaciones

TabStrip

Pginamltiple(seleccindepginas)

Multipage

Barradedesplazamiento

ScrollBar

Botndenmero(seleccindevalores)

SpinButton

Imagen

Image

RefEdit(seleccinderangos)

RefEdit

Dibujaruncontrol
Seleccioneelcontrolquedeseacrearyarrastreelpunteroparadefinirunrearectangular.
Alsoltarelbotndelratn,aparecerelcontrolylaherramientaSeleccionarobjetos

pasaraserla

herramientaactiva.
Paradibujarvarioscontrolesdelmismotipo,hagadobleclicenlaherramientacorrespondiente.

Algunaspropiedades
(Name)
Especificaelnombredelcontrol.
Caption

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

173

Indicaeltextodeunaetiqueta.
ControlTipText
Creaunaetiquetainformativa.
Visible
Especificasiuncontrolestocultoovisible.
Enabled
Determinasielfocopuedeestarsobreelcontrol.
Value
Defineelestadooelcontenidodeuncontrol.
ControlSource
Vinculauncontrolaunacelda(cuadrodetexto)ounrangodeceldas(cuadrodelista).

Determinarelaccesoauncontrol
Paradefinirelordendetabulacin,seleccionelasopciones:
VerOrdendetabulacin
Para desactivar la posibilidad de usar la tecla [Tab] para acceder a un control, seleccione el control e
indiqueFalseenlapropiedadTabStop.
Paraasignarunatecladeaccesorpido,seleccioneelcontroleindiquelatecladeaccesoenlapropiedad
Accelerator.
Si el acceso rpido se aplica a un control Label, el control que sigue al Label en el orden de tabulacin recibir el
foco,ynoelcontrolLabelpropiamentedicho.

Tamaodeuncontrol
Para modificar el tamao de un control, seleccione los controles y arrastre el controlador de tamao o
seleccione el control e indique las propiedades Height y Width, que determinan el alto y el ancho del
control,enpuntos.
Parauniformizarlostamaos,seleccioneloscontrolesquedeseadimensionaryvayaalmen Formato
Igualartamao.
Enfuncindeltamaodeseado,elijaAncho,AltooAmbos.
Para ajustar el tamao, seleccione los controles que desea ajustar y seleccione las opciones Formato
AjustartamaoalcontenidooAjustartamaoalacuadrcula.

Ubicaruncontrol

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

174

- 3-

Paradefinirlaposicindeuncontrol,seleccioneelcontrolquedeseamoveryarrastreelratnoseleccione
elcontrolyasignelaspropiedadesLeftyTopqueindicanladistanciaentreelcontrolyelbordeizquierdoy
superiordelformulario.
Para alinear controles entre ellos, seleccione los controles que desea alinear y a continuacin vaya a la
opcinAlineardelmenFormato.
Segnelcontroldereferencia,elija:Izquierda,Centro,Derecha,Superior,Medio,InferioroAla
cuadrcula.
Para administrar el espaciado entre controles, seleccione los controles y vaya a las opciones Formato
EspaciohorizontaloEspaciovertical.
Enfuncindelespaciodeseado,seleccionelasopcionesIgualar,Aumentar,DisminuiroQuitar.
Para centrar un control en el formulario, seleccione el control y a continuacin Formato Centrar en el
formularioHorizontalmenteoVerticalmente.

Aplicarformato
Asignelassiguientespropiedades:
Font
Definelatipografa.
BackColor
Especificaelcolordefondo.
ForeColor
Especificaelcolordeprimerplano.
BorderColor
Especificaelcolordelborde.
BorderStyle
Especificaeltipodeborde.
SpecialEffect
Especificaelaspectodelobjetoenlapantalla.

Administrarlasfuturasentradas
PasswordChar
Indicaelcarcterquehayquemostrarenlugardeloscaracteresrealesintroducidosporelusuario.
MaxLength

- 4-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

175

Especificaellargomximodeunaentrada.
AutoTab
Fuerzaunatabulacinautomticacuandounaentradaalcanzaelmximolargodecaracterespermitido.
AutoSize
Redimensionaautomticamenteuncontrolparamostrartodosucontenido.
AutoWordSelect
Especificasiunapalabraouncarctereslaunidadbsicautilizadaparaextenderlaseleccin.
DragBehavior
Indicasielsistemaaceptalafuncinarrastrarysoltar.
EnterKeyBehavior
Defineelefectodelatecla[Intro].
HideSelection
Indicasieltextoseleccionadopermaneceresaltadocuandouncontrolpierdeelfoco.
IntegralHeight
Indicasielcontrolmuestralaslneascompletasdetextoenunalistaolneasparcialesenelsentido
vertical.
Locked
Indicasisepuedemodificaruncontrol.
MultiLine
Definesiuncontrolpuedeaceptarymostrarvariaslneasdetexto.
SelectionMargin
Especificasielusuariopuedeseleccionarunalneadetextoalhacerclicalaizquierdadeltexto.
TabKeyBehavior
Determinasisepermitenlastabulacionesenlazonadeedicin.
TextAlign
Indicaeltipodealineacindeltextoenuncontrol.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

176

- 5-

WordWrap
Indicasiseagregaautomticamenteunretornodecarroalcontenidodeuncontrolalfinaldeunalnea.

Resumendepropiedadesporobjeto

Check

Combo

Command

Box

Box

Button

(Name)

Accelerator

AutoSize

X
X

AutoWordSelect

X
X

Image

ListBox

BorderColor

BorderStyle

Caption

ControlSource

ControlTipText

DragBehavior
Enabled

Multi

Label

Page

AutoTab

BackColor

Frame

X
X

X
X

Font

ForeColor

Height

EnterKeyBehavior

HideSelection

IntegralHeight

Left

Locked

MaxLength

MultiLine
PassWordChar
SelectionMargin
SpecialEffect

X
X

TabKeyBehavior
TabStop
TextAlign

- 6-

Top

Value

Visible

Width

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

177

WordWrap

Option

Scroll

Spin

Button

Bar

Button

(Name)

Accelerator

AutoSize

TabStrip

TextBox

Toggle

RefEdit

Button
X

X
X

AutoTab

AutoWordSelect

BackColor

BorderColor

BorderStyle

Caption

ControlSource

ControlTipText

DragBehavior
Enabled

X
X

EnterKeyBehavior

X
X

Font

ForeColor

Height

X
X

HideSelection

IntegralHeight

Left

Locked

MaxLength

MultiLine

PassWordChar

SelectionMargin

SpecialEffect

TabKeyBehavior
TabStop

X
X

TextAlign

X
X

X
X

Top

Value

Visible

Width

WordWrap

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

178

- 7-

Personalizarunformulario
1.Escribirprocedimientos
Paramostrarlaventanadecdigodeuncontrol:
hagadobleclicenelcontrolparaelquedeseeasignaruncdigo,oseleccioneelcontrolyseleccione
lasopciones:
VerCdigoo[F7]
Parainsertarunnuevoevento,abralalistadeladerechayseleccioneeleventodeseado.
Sinoindicaunevento,eleventosugeridoparalamayoradeloscontroleseseleventoClick.

Paravolveramostraruncontrol,seleccionelasopciones:
VerObjetoo[Mays][F7]

2.Listadeeventosasociadosalosprincipalescontroles
Activate
Ocurrecuandoseactivalahoja.
AddControl
Ocurrecuandoseinsertauncontrolenunahoja.
AfterUpDate
Ocurretrasmodificardatos.
BeforeDragOver
Ocurrecuandoseestejecutandounaoperacindearrastrarysoltar.
BeforeDropOrPaste
Ocurrecuandoelusuarioestapuntodecolocaropegardatosenunobjeto.
BeforeUpDate
Ocurreantesdelamodificacindedatos.
Change
OcurrecuandosemodificalapropiedadValue.
Click

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

179

- 1-

Ocurrecuandoelusuariohaceclicenuncontrolocuandoseleccionadefinitivamenteunvalorparaun
controlconmsdeunvalorposible.
DblClick
Ocurrecuandoelusuariohacedobleclic.
DeActivate
Ocurrecuandolahojadejadeserlaventanaactiva.
DropButtonClick
Ocurrecadavezquesemuestraoseocultaunalistadesplegable.
Enter
Ocurreantesdequeuncontrolrecibarealmenteelfocodesdeuncontroldelamismahoja.
Error
Ocurrecuandouncontroldetectaunerrorynopuededevolverinformacindelerroralprogramaque
lohallamado.
Exit
Ocurreinmediatamenteantesdequeuncontrolpierdaelfocoenfavordeotrocontroldelamisma
hoja.
Initialize
Ocurredespusdequesecargaunobjeto,peroantesdequesemuestre.
KeyDown
Ocurrecuandoelusuariopulsaunatecla.
KeyPress
OcurrecuandoelusuariopulsaunateclaANSI.
KeyUp
Ocurrecuandoelusuariosueltaunatecla.
Layout
Ocurrecuandocambiaeltamaodeuncontrol.
MouseDown
Ocurrecuandoelusuariopulsaelbotndelratn.
- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

180

MouseMove
Ocurrecuandoelusuariomueveelratn.
MouseUp
Ocurrecuandoelusuariosueltaelbotndelratn.
QueryClose
Seproduceantesdecerrarlahoja.
RemoveControl
Ocurrecuandoseeliminaelcontroldelcontenedor.
Resize
Seproducecuandocambiaeltamaodelahoja.
Scroll
Ocurrecuandosevuelveareubicaruncuadrodedesplazamiento.
SpinDown
Ocurrecuandoelusuariohaceclicenlaflechainferioroizquierdadelcontador.
SpinUp
Ocurrecuandoelusuariohaceclicenlaflechasuperioroderechadelcontador.
Terminate
Ocurretrasladescargadelahoja.
Zoom
OcurrecuandocambiaelvalordelapropiedadZoom.

Resumendeeventosporcontrol

Check

Combo

Command

Box

Box

Button

Frame

Image

Label

List

Multi

Box

page

Activate
AddControl

AfterUpdate

BeforeDragOver

X
X

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

181

- 3-

BeforeDropOrPaste

BeforeUpdate

Change

Click

DblClick

Deactivate
DropButtonClick

Enter

Error

Exit

KeyDown

KeyPress

KeyUp

Initialize

Layout

MouseDown

MouseMove

MouseUp

RemoveControl

Terminate
Scroll
SpinDown
SpinUp
Zoom
QueryCLose
Resize
Option

Scroll

Spin

Tab

Text

Toggle

User

Ref

Button

Bar

Button

Strip

Box

Button

Form

Edit

Activate

AddControl

AfterUpdate

BeforeDragOver

BeforeDropOrPaste

BeforeUpdate

Change

Click

DblClick

Deactivate

DropButtonClick
Enter

- 4-

X
X

X
X

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

182

Error

Exit

Initialize

X
X

KeyDown

KeyPress

KeyUp

Layout
MouseDown

MouseMove

MouseUp

RemoveControl

Terminate

Scroll

SpinDown

SpinUp

Zoom

QueryCLose

Resize

Cancelarunevento
Enciertoscasos,resultanecesariopodercancelarunevento.
Paraello,sedebeasignarelvalorTruealargumentoCanceldelprocedimientoasociadoaunevento.
Ejemplo
Silafechaintroducidaesincorrecta,secancelaeleventoExit:elcursorquedasituadoenlazonadetexto.

Private Sub txtFechaFin_Exit(ByVal Cancel As _


MSForms.ReturnBoolean)
If IsNull(txtFechaFin) Then Exit Sub

La fecha debe ser correcta

If Not IsDate(txtFechaFin) Then


MsgBox "Fecha incorrecta", vbCritical
Cancel = True
Exit Sub
End If

La fecha de fin debe ser >= fecha de inicio

If DateValue(txtFechaFin) < DateValue(txtFechaIni) Then


MsgBox "La fecha de fin es anterior a la fecha de inicio", vbCritical
Cancel = True
Exit Sub
End If
End Sub

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

183

- 5-

Solamente los eventos BeforeDragOver, BeforeDropOrPaste, BeforeUpdate, DblClick, Exit, Error y QueryClose
tienenunargumentoCancel.Losdemseventosnopuedencancelarse.

3.Ejecutarycerrarunformulario
ParaejecutarunformulariodesdedelahojaUserForm,seleccionelasopciones:
EjecutarEjecutarSub/UserFormo

o[F5]

Paraejecutarunformulariodesdeunmdulo,useelmtodoShowolainstruccin Load.

Show(mtodo)
Sintaxis

ObjetoUserForm.Show

MuestraelobjetoUserFormindicado.

Load(instruccin)
Sintaxis

Load ObjetoUserForm

Cargaelobjetosinmostrarlo.
Paracerrarunformulario,useelmtodoHideolainstruccinUnload.

Hide(mtodo)
Sintaxis

ObjetoUserForm.Hide

Ocultaelformulariosindescargarlo.

Unload(instruccin)
Sintaxis

Unload ObjetoUserForm

Eliminaelformulariodelamemoria.

Eventosinvocados

- 6-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

184

Losmtodoseinstruccionesdeejecucinydecierredeformulariosdesencadenanlossiguienteseventos:

Mtodooinstruccin
Show

Eventos
Initialize
Activate

Load

Initialize

Hide

Sinevento

Unload

QueryClose
Terminate

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

185

- 7-

Ejemplodeformulariopersonalizado
1.Presentacin
Esteejemplomuestracmocrearunformulariopersonalizadoparaintroduciromodificarlaspestaas"empleados".
EllibroEmpleados.xlsmcontienedoshojasdeclculoyunformulario.
Lahoja"Empleados"contienelalistadeempleados:

Lahoja"Servicios"contienelalistadeservicios:

Elformulario"Empleados"permite:

ModificarlainformacindeunempleadoyactualizarlahojadeExcelEmpleados.

CrearunnuevoempleadoyagregarloalalistadelahojadeExcelEmpleados.

LalistadeserviciosseleedesdelahojaServicios.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

186

- 1-

ListadecontrolesdelformularioEmpleados:

N.

Tipodecontrol

Nombre

Cuadrodelista

lstEmpleados

Botndecomando

cmdNuevo

Botndeopcin

optSra

Botndeopcin

optSrta

Botndeopcin

optSr

Cuadrodetexto

txtApellido

Cuadrodetexto

txtNombre

Cuadrodelista

lstServicios

Botndecomando

cmdAceptar

10

Botndecomando

cmdCerrar

2.CdigoasociadoalbotnmacrodelapestaaEmpleados
EstecdigoestcontenidoenelmdulodeclaseThisWorkbook.

Sub Mostrar_Formulario()

Muestra el formulario Empleados

Empleados.Show
End Sub

3.CdigoVBAasociadoalformulario

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

187

Option Explicit
Nombre de la aplicacin
Const strAppName = "Entrada de empleados"
Dim bNuevo As Boolean
________________________________________________________________
Private Sub UserForm_Initialize()
Dim oRng As Range
Dim oCell As Range
Muestra la lista de servicios
With ThisWorkbook.Worksheets("Servicios")
.Activate
Set oRng = .Range("A1").CurrentRegion
Ordena los servicios por orden alfabtico
oRng.Sort Key1:

=Range("A1")

lstServicios.Clear
For Each oCell In oRng
If oCell.Text <> "" Then
lstServicios.AddItem oCell.Text
Else
Exit For
End If
Next oCell
End With
Muestra la lista de empleados
Mostrar_Empleados
lstEmpleados.ListIndex = 0
Nuevo empleado por defecto
bNuevo = True
End Sub
________________________________________________________________
Private Sub Mostrar_Empleados()
Dim oRng As Range
Dim oLinea As Range
Muestra la lista de empleados
With ThisWorkbook.Worksheets("Empleados")
.Activate
Set oRng = .Range("A3").CurrentRegion
Set oRng = .Range("A4:

D" & oRng.Rows.Count + 3)

lstEmpleados.Clear
For Each oLineaIn oRng.Rows
If Cells(oLinea.row, 2) <> "" Then
lstEmpleados.AddItem Cells(oLinea.row, 2) & " " &
Cells(oLinea.row, 3)
Else
Exit For
End If
Next oLinea
End With
End Sub
________________________________________________________________
Private Sub cmdAceptar_Click()
Dim oRng As Range
Dim i As Integer
Control de datos introducidos
Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

188

- 3-

If txtNombre = "" Or txtApellido = "" _


Or IsNull(lstServicios) Then
MsgBox "Nombre, apellido y servicio obligatorio", _
vbExclamation, strAppName
txtNombre.SetFocus
Exit Sub
End If
If Not (optSr Or optSra Or optSrta) Then
MsgBox "Tratamiento obligatorio", vbExclamation, strAppName
optSr.SetFocus
Exit Sub
End If
With ThisWorkbook.Worksheets("Empleados")

Agrega el empleado en la primera fila vaca

If bNuevo Then
Set oRng = .Range("A3").CurrentRegion
i = oRng.Rows.Count + 3
Else

Modifica el empleado seleccionado


i = lstEmpleados.ListIndex + 4

End If
If optSr Then
.Cells(i, 1) = "Sr."
ElseIf optSra Then
.Cells(i, 1) = "Sra."
Else
.Cells(i, 1) = "Srta."
End If
.Cells(i, 3) = Empleados.txtNombre
.Cells(i, 2) = Empleados.txtApellido
.Cells(i, 4) = Empleados.lstServicios

Ordena los empleados

Ordenar_Empleados
End With

Muestra la lista de empleados


If bNuevo Then Mostrar_Empleados
Inicializa_Empleados

End Sub
________________________________________________________________
Private Sub cmdCerrar_Click()

Pide confirmacin y cierra el formulario

If MsgBox("Desea terminar la insercin de datos?", _


vbQuestion + vbYesNo, strAppName) = vbYes Then
Unload Me
End If
End Sub
________________________________________________________________
Private Sub cmdNuevo_Click()

Inicializa la pestaa Empleados

Inicializa_Empleados
bNuevo = True
End Sub
________________________________________________________________
Private Sub Ordenar_Empleados()
Dim oRng As Range
- 4-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

189

Ordena la lista de empleados por apellido y nombre

Set oRng = Worksheets("Empleados").Range("A3").CurrentRegion


oRng.Sort Key1:=Range("B3"), Order1:=xlAscending, _
Key2:=Range("C3"), Order2:=xlAscending, _
Header:=xlYes
End Sub
________________________________________________________________
Private Sub Inicializa_Empleados()
Dim i As Integer

Inicializa el formulario para la prxima insercin de datos

With Empleados
txtNombre = ""
txtApellido = ""
optSr = False
optSra = False
optSrta = False
For i = 0 To lstServicios.ListCount - 1
lstServicios.Selected(i) = False
Next i
End With
End Sub
________________________________________________________________
Private Sub lstEmpleados_Click()
Dim i As Integer
Dim j As Integer

Muestra el empleado seleccionado

bNuevo = False
i = lstEmpleados.ListIndex + 4
With ThisWorkbook.Worksheets("Empleados")
Select Case .Cells(i, 1)
Case "Sr.":
Case "Sra.":
Case "Srta.":

optSr = True
optSra = True
optSrta = True

End Select
Empleados.txtNombre = .Cells(i, 3)
Empleados.txtApellido = .Cells(i, 2)
For j = 0 To Empleados.lstServicios.ListCount - 1
If Empleados.lstServicios.List(j) = .Cells(i, 4) Then
Empleados.lstServicios.ListIndex = j
End If
Next j
End With
End Sub

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

190

- 5-

Presentacin
Laversin2016deMicrosoftOfficepermitepersonalizarlacintadeopcionesagregando,relocalizandooeliminando
pestaas y comandos (ver el captulo Presentacin). Esta innovacin no permite tener cintas especficas para un
libro determinado.
Sinembargo,existendossolucionesparatenerunacintapersonalizadapropiadeundeterminadolibro:

Lautilidad CustomUIEditor,quepermitecrearunacintapersonalizadapormediodecdigoXMLeinteractuarconla
cintaatravsdeprocedimientosVBA.

LacoleccinCommandBars,quepermitecrearbarrasdeherramientasymensenlapestaaComplementos.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

191

- 1-

PersonalizacindelacintaconlautilidadCustomUIEditor
1.PresentacindelautilidadCustomUIEditor
LautilidadCustomUIEditorpermitepersonalizarntegramentelacintadeopcionesasociadaaunlibro,pormedio
decdigoXML.EstautilidadsepuededescargardesdeelsitiooficialdeMicrosoft.Tambinestdisponibleconlos
ejemplosdeestecaptulo.
Parausarlautilidad CustomUIEditor,sedebedisponerdelpaquetederedistribucin.NETFramework 2.Sieste
noeselcaso,unvnculodedescargaselopropondralinstalarlautilidad.
Unavezinstaladalautilidad,podrpersonalizarlacintadeopcionesdeunlibro delasiguientemanera:
CreeunnuevolibroenExcel2016ygurdeloenformatoxlsm(librohabilitadoparamacros).
Cierreellibro:siestabierto,elcdigoXMLnopodrgrabarsedesdelautilidaddepersonalizacin.
EjecutelaherramientaCustomUIEditor.
AbraellibroconlaopcinArchivoyluegoAbriroconelbotndecomando

EscribaelcdigoXMLdepersonalizacindelainterfaz.

HagaclicenelbotnValidate

paraverificarlasintaxisdelcdigo.

Haga clic en el botn Generate CallBacks

para generar el cdigo VBA de los procedimientos

asociadosalasfuncionespersonalizadasonAction.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

192

- 1-

Copie el cdigo en el Portapapeles: podr luego pegarlo en un mdulo asociado a su libro e incluir su
propiocdigoVBAenlosdistintosprocedimientos.
GuardeellibroconlaopcinSavedelapestaaFileoconelbotndecomando

CierrelaherramientaconlaopcinExitdelapestaaFile.
AbrasulibrodesdeExcel:aparecerlanuevacintadeopciones.
Usteddeberincluirlosprocedimientos onActionenunmduloVBAypersonalizarelcdigoasociadoa
losdiferentesbotonesdecomando.

2.EjemplodecdigoXMLdepersonalizacin
ElsiguientecdigoXMLpermitecrearunapestaapersonalizadacondosgruposqueincluyenbotonesdecomando
dediferentestamaos.

<customUI
xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon startFromScratch="false">
<tabs>
<!-- Creacin de una pestaa personalizada -->
<tab id="PESTAA_PERSO" label="Pestaa personalizada">
<!-- Grupo personalizado -->
<group id="Grupo1" label="Grupo personalizado">
<button id="btn_Imprimir" label="Imprimir"
- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

193

imageMso="FilePrint"
onAction="Impresion"
tag="Impresin"
size="large" />
<button id="btn_Grabar" label="Grabar"
imageMso="FileSave"
onAction="Guarda"
tag="Grabar"
size="normal" />
<button id="btn_Salir" label="Salir"
imageMso="PrintPreviewClose"
onAction="Fin"
tag="Salir"
size="normal" />
</group>
<!-- Grupo Documentacin -->
<group id="Grupo2" label="Documentacin">
<button id="btn_Leame" label="Leame"
imageMso="FunctionsLookupReferenceInsertGallery"
onAction="Leer"
tag="Leame"
size="large" />
</group>

</tab>
</tabs>
</ribbon>
</customUI>

Pararealizaresteejemplo:
CreeellibroCintapersonalizada.xlsmdesdeExcel2016.Gurdeloycirrelo.
AbraeselibrodesdelautilidadCustomUIEditoryescribaelcdigoXMLdelejemplo.
CopieenelportapapeleslosprocedimientosVBAgeneradosusandoelbotnGenerateCallBacks

GuardeelcdigoXMLysalgadelCustomUIEditor.
AbraellibroenExcel2016.Aparecerlanuevapestaa.
AhorapuedepegarelcdigodesdeelportapapelesenunmduloestndarVBAypersonalizarlo.
Ejemplodecdigopersonalizado:

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

194

- 3-

Paraprobarestecdigo,debecrearenellibrounahojallamadaLeeme.

3.EtiquetasXMLcorrespondientesalosdistintoselementosdelacinta
a.Pestaasygrupos
Control

Etiqueta

Pestaadelacinta

<tab...</tab>

Ejemplo
<tab id = "PestaaPers" label = "Pestaa
personalizada" </tab>

Grupodecomandos

<group...</group>

<tab id = "GrupoPers"
personalizado"

label = "Grupo

<group id = "GrupoPers1" label =

"Tipo de factura"

</group>

</tab>

Lasetiquetas<group...</group>debenestarincluidasenunapestaa(etiquetas<tab...</tab>).

Estossonlosidentificadores(atributo"idMso")delaspestaasestndaresdeExcel 2016:

- 4-

TabHome

pestaaInicio

TabInsert

pestaaInsertar

TabPageLayoutExcel

pestaaDiseodepgina

TabFormules

pestaaFrmulas

TabData

pestaaDatos

TabReview

pestaaRevisar

TabView

pestaaVista

TabDeveloper

pestaaDesarrollador

TabAddIns

pestaaComplementos

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

195

Ejemplo:

ElsiguientecdigopermiteocultarlaspestaasRevisaryDesarrollador.

<customUI
xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon startFromScratch="false">
<tabs>
<tab idMso="TabReview" visible="false"/>
<tab idMso="TabDeveloper" visible="false"/>
</tabs>
</ribbon>
</customUI>

b.Principalescontrolesdelacintadeopciones
Loscontrolessiguientessepuedeninsertardentrodegrupos(etiquetas<group...</group>).

Control
Botnde

Etiqueta

Ejemplo

<button.../>
<button id= "btVend1"

comando

label= "Servicios"
imageMso = "MeetingsWorkspace"
onAction = "MuestraVendedor" />

Botnde

<toogleButton.../>
<toggleButton id="btProd"

alternar

label="Productos"
imageMso="Functions
RecentlyUsedtInsertGallery"
size="grande"
onAction="Tipo de factura"
getPressed="Activar" />

Etiqueta

<labelControl.../>
<labelControl id="Titulo"
label="Tipo de factura"/>

Cuadro

<comboBox...

combinado

</comboBox>

<combo Box id="cmb_TasaIVA"


label= "Tasa de IVA"
onChange= "IVA" get Text="getIVA" >
<item id= "itIva1" label="10 %" />
<item id= "itIva2" label="21 %" />
</comboBox>

Cuadrode

<dropDown...

lista

</dropDown>

<dropDown id="cmb_TasaIVA"
label= "Tasa de IVA" >
<item id= "itIva1" label="10 %" />
<item id= "itIva2" label="21 %" />
</drop Down>

Casillade
verificacin

<checkBox.../>
<checkBox id="chkPort"

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

196

- 5-

label="Gastos de flete?"
onAction="GastoPort"
getPressed="getchkPort" />

Campode

<editBox.../>
<editBox id="edFlete"

entrada

label="Importe de los gastos de flete:


"onChange="MostrarFlete"
getText="getPort"
getEnabled="ActivationPort"/>

Galera(o

<gallery...</gallery>

tabla)de

<gallery id="galPlazos"

controles

label = "Plazos"
imageMso="StartTimer" size="large" >
<button id= "itPlazo1"
label="Recepcin de la factura"
onAction="Muestra plazo"
imageMso="StartTimer" />
<button id= "itPlazo2"
label="30 das"
onAction="Muestra plazo"
imageMso="StartTimer" />
<button id= "itPlazo3"
label="30 das
desde el fin de mes" onAction="Muestra
plazo"
imageMso="StartTimer" />
</gallery>

Barrade

<menu...</menu>
<menu id="mnu_Vendedores"

men

label="Vendedor"
imageMso="AccessTableContactos"
size="large">
<button id= "btVend1" label="Pedro LOPEZ"
onAction="Muestra Vendedor" />
<button id= "btVend2" label="Laura DURAN"
onAction="Muestra Vendedor" />
<button id= "btVend3" label="Lucas PEREZ"
onAction="Muestra Vendedor" />
</menu>

Men

<dynamicMenu.../>

dinmico(el

<dynamicMenu id="dmnu_TasaIVA"

cdigoVBA,a

label="Flete"

travsdela

getContent="Lista_Fletes"

funcin

imageMso="ShowTimeZones"

GetContent,

size="large" />

debe
proporcionar
elcontenido
delmen)

c.Atributosdeloscontrolesdelacintadeopciones
Lossiguientesatributospermitendefinirelcontenidoylaaparienciadelaspestaas,losgruposyotroscontroles.

Atributo
columns

- 6-

Tipodedato
Numrico

Descripcin
Cantidaddecolumasenunatabladecontroles.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

197

description

Texto(4096)

Descripcindelcontrol.

enabled

Booleano

Indicasielcontrolestactivo.

id

Texto(1024)

Identificadornicodelcontrol.

idMso

Texto(1024)

IdentificadordeloscontrolespredefinidosdeExcel.

image

Texto(1024)

Imagenasociadaalcontrol.

imageMso

Texto(1024)

IdentificadordeunaimagenpredefinidadeExcel.

insertAfterMso

Texto(1024)

Identificadordelcontrolpredefinidodespusdel
cualseinsertarelcontrolespecificado.

insertBeforeMso

Texto(1024)

Identificadordelcontrolpredefinidoantesdelcual
seinsertarelcontrolespecificado.

invalidateContentonDrop

Boolean

Indicasielcontenidodelcontrolseactualizacada
vezqueseselecciona.

itemHeight

Numrico(pxeles)

Altodeunelementodeunatabladecontroles
(galera).

itemWidth

Numrico(pxeles)

Anchodeunelementodeunatabladecontroles
(galera).

itemSize

"large"o"normal"

Tamaodelloselementosdeunmen.

keytip

Texto(3)

Mtodoabreviadodelcontrol.

label

Texto(1024)

Texto(oetiqueta)delcontrol.

maxLength

Numrico

Cantidaddecaracteresenuncuadrodeentrada.

rows

Numrico

Cantidaddelneasenunatabladecontroles.

screentip

Texto(1024)

Textodelapistadelcontrol.

showImage

Booleano

Indicasiestvisiblelaimagendelcontrol.

showItemImage

Booleano

Indicasiestvisiblelaimagendeunelemento
(tem).

showItemLabel

Booleano

Indicasiestvisibleeltextoasociadoaun
elemento(tem).

showLabel

Booleano

Indicasiestvisibleeltextoasociadoauncontrol.

size

"large"o"normal"

Tamaodelcontrol.

sizeString

Texto(1024)

Anchodelcontrol.

startFromScratch

Booleano

Indicasiestnvisibleslaspestaaspredefinidasde
Office.

supertip

Texto(1024)

Textodelpopupcomplementariodelcontrol.

tag

Texto(1024)

Propiedadcomplementariaquesepuedeusara
travsdecdigoVBA(ejemplo:hipervnculoauna
pginaweb).

visible

Booleano

Indicasiestvisibleelcontrol.

d.Resumendelosatributosparacadacontrol
Cintade

Pestaa

Groupo

Botnde

Botn

Etiqueta

Cuadro

Office

(tab)

(group)

comando

Alternar

(labelControl)

combinado

(ribbon)

(button)

(toggle

(comboBox)

Button)
columns
description

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

198

- 7-

enabled

idMso

image

ImageMso

id

insertAfterMso

insertBeforeMso

invalidateContentonDrop

itemHeight
ItemWidth
ItemSize
keytip

label

maxLength

rows
screentip

showImage

X
X

showItemImage

showItemLabel

showLabel

size

sizeString
startFromScratch

X
X

supertip

tag
visible

Cuadrode

Casillade

Cuadro

Galera

Barra

Mendinmico

lista

verificacin

de

de

de

(dynamicMenu)

(dropDown)

(checkBox)

entrada

controles

men

(editBox)

(gallery)

(menu)

columns

description

enabled

id

idMso

image

ImageMso

insertAfterMso

insertBeforeMso

invalidateContent

onDrop

- 8-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

199

itemHeight

ItemWidth

ItemSize

keytip

label

maxLength

rows

screentip

showImage

showItemImage

showItemLabel

showLabel

size

sizeString

startFromScratch
supertip

tag

visible

e.ImgenesdelagaleradeiconosdeMicrosoftOffice
Losnombresdelasimgenesusadasparapersonalizarlacintadeopciones(atributoImageMso)correspondenal
nombredeliconoenlagaleradeMicrosoftOffice.
Paraconocerlalistadenombresdeiconosdeestagalera:
AbraenExcelelarchivoOffice2007IconsGallery.xlsm(disponibleconlosejemplosdeestelibrooenla
pginadeMicrosoft).
SeleccionelapestaaDesarrollador.
HagaclicenalgunodelosbotonesdeGalleryparaverlalistadeiconos.
Elnombredelaimagenapareceralsealarconelpunterodelratneliconocorrespondiente(tambin
puedehacercliceneliconoparamostrarsunombreenuncuadrodedilogo).

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

200

- 9-

f.FuncionesdellamadasCallbacks
Las funciones de llamada Callbacks permiten iniciar la ejecucin de procedimientos VBA, con el objetivo de
personalizar el contenido, la presentacin y las acciones asociadas a los diferentes controles de la cinta de
opciones.
LafuncinonActionseejecutaenelmomentodelaactivacindelcontrol.
Las otras funciones (getEnabled, getVisible, getLabel...) permiten actualizar de manera dinmica algunos
atributos en funcin de ciertas condiciones (por ejemplo, el campo "Cantidad de tasa portuaria" se desactiva
cuandolacasilla deopcin"Tasaportuaria"noestseleccionada).

Funcin

Descripcin

Control

onLoad

Procedimientoquesellamaalcargarlacinta.

customUI

loadImage

Procedimientoparalacargadeimgenes.

customUI

onAction

Procedimientoquesedesencadenaalactivarun

Todosloscontroles

control.
onChange

Procedimientoquesellamadespusdemodificarel

comboBox,editBox

contenidodelcontrolyperderelfoco.
getText

Procedimientoquedefineelvalorpordefectodeun

comboBox,editBox

control.
getContent

ProcedimientoquedefineelcdigoXMLde

dynamicMenu

personalizacindeunmendinmico.
getitemCount

getItemId

Procedimientoquedefinelacantidaddeelementos

comboBox,dropDown,

delcontrol.

gallery

Procedimientoquedefineelidentificadornico(id)
decadaelementodelcontrol

getItemImage

Procedimientoquedefinelaimagenasociadaacada
elementodelcontrol.

getItemLabel

Procedimientoquedefinelaetiquetaasociadaa
cadaelementodelcontrol.

getPressed

- 10 -

Procedimientoqueindicasiunbotndealternar

toggleButton,checkBox

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

201

estactivadoosiunacasillaestmarcada.
getSelectedItemId

ProcedimientoquedefineelIddelelemento

dropDown,gallery

seleccionadopordefectodentrodelcontrol.
getSelectedItemIndex

Procedimientoquedefineelndicedelelemento

dropDown,gallery

seleccionadopordefectodentrodelcontrol.
getDescription

getEnabled

Procedimientoquedefineelatributo"Description"

Todosloscontrolesque

delcontrol.

tienenelatributo

Procedimientoquedefinesielcontrolestactivado
oaccesible.

getKeytip

getImage

personalizableporla
funcin.
Ejemplo:getImageseaplica

Procedimientoquedefineelmtodoabreviado

atodosloscontrolesque

asociadoalcontrol.

tenganelatributoImage.

Procedimientoquedefinelaimagenasociadaal
control.

Eltipodedatosque
devuelveelprocedimiento
VBAdebeserelmismoque

getItemLabel

Procedimientoquedefinelaetiquetadelcontrol.

eldelatributo

getItemHeigth

Procedimientoquedefineelaltodecadaelemento

ejemplo,booleanopara

delagalera.

getEnable ocadenade

getItemWidth

Procedimientoquedefineelanchodecada
elementodelagalera.

getItemScreentip

getItemSupertip

correspondiente(por

caracteresparagetImage),
exceptoparalafuncion
getSize(elprocedimiento

Procedimientoquedefinelapistadecadaelemento

devuelve1para"normal"y

delagalera.

2para"large".

Procedimientoquedefinelapistasuplementariade
cadaelementodelagalera.

getLabel

Procedimientoquedefinelaetiquetadeuncontrol.

getScreentip

Procedimientoquedefinelapistadeuncontrol.

getSupertip

Procedimientoquedefinelapistasuplementariade
uncontrol.

getShowImage

Procedimientoquedefinesisedebemostrarla
imagendelcontrol.

getShowLabel

Procedimientoquedefinesisedebemostrarla
etiquetadelcontrol.

getSize

Procedimientoquedefineeltamaodelcontrol.

getVisible

Procedimientoquedefinesiuncontrolestvisible.

g.UsodelasfuncionesdellamadaCallbacks
Elprincipiodeusodeestasfuncioneseselsiguiente:envezdeindicarelvalordeunatributoenelarchivoXMLde
personalizacin(porejemplo,visible="False"),ustedindicaelnombredelprocedimientoVBAquedeterminaesa
propiedad(porejemplo,getVisible="ProcVisible").
Las funciones de llamada devuelven informacin especfica de la cinta de opciones por medio de parmetros (o
argumentos),transferidosalosprocedimientosVBA.
Para generar automticamente los procedimientos VBA y los parmetros asociados, use el botn Generate

CallBacks
delautilidadCustomUIEditor.

Losprincipalesparmetrossonlossiguientes:

Argumento

Descripcin

Controlesinvolucrados

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

202

- 11 -

Control

Objetoquerepresentaelcontrolquehadesencadenado

Todosloscontroles

elprocedimiento.Esteobjetotienelaspropiedades"id"y
"tag",quepermiten,respectivamente,recuperarlos
valoresdelosatributos"id"y"tag".
index

Determinaelnmerodeelementoparaloscontrolesde

ControlescomboBox,dropDown,

tipolista.

galleryymenu

Valorbooleanoqueindicasilacasillaestmarcada

ControlesCheckBoxy

(checkBox)osielbotnestpresionado(toggleButton).

toggleButton

Argumento

Argumentoquepermiterecuperarydefinirelatributodel

Todosloscontroles

precedidoporla

control(porejemplo:ByRefenabled,ByReflabel).

pressed

palabraclave
ByRef

- 12 -

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

203

EjemplodecintapersonalizadaconelCustomUIEditor
1.Presentacin
Elsiguienteejemplopermitepedirlainformacindeunafacturaapartirdelacintadeopciones.
LainteraccinconlahojadeExcelquecontienelainformacindelafacturasehaceenambossentidos:

Elingresodedatos,aniveldelacinta,afectaelcontenidodelasceldasdelahoja.

Lamodificacindelasceldas,dentrodelahojadeExcel,modificalosdatosdelacinta.

Lacintaconstadeunapestaadecuatrogruposquecontienenlossiguientescontroles:

Grupo"Tipodefactura":dosbotonesdealternar.

Grupo"IVAyflete":unalistadesplegable,unacasilladeverificacinyuncuadrodeentrada.

Grupo"Vendedorytransportista":unmenyunmendinmico.

Grupo"Condiciones":dosgalerasdecontroles.

2.CdigoXMLdelacinta

<customUI

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

204

- 1-

xmlns="http://schemas.microsoft.com/office/2009/07/customui"
onLoad="CargaCinta" >
<!-- Oculta la cinta de opciones de Office -->
<ribbon startFromScratch="true">
<tabs>
<!-- Creacin de una pestaa personalizada -->
<tab id="PESTAA_PERSO" label="Facturacin">
<!-- Grupo personalizado Tipo de factura -->
<group id="Grupo1" label="Tipo de factura">
<!-- Botones de alternar -->
<toggleButton id="btProd" label="Productos"
imageMso="FunctionsRecentlyUsedtInsertGallery"
size="large" onAction="TipoFactura"
getPressed="Activation" />
<toggleButton id="btServ" label="Servicios"
imageMso="MeetingsWorkspace"
size="large" onAction="TipoFactura"
getPressed="Activation" />
</group>
<!-- Grupo personalizado IVA y flete -->
<group id="Grupo2" label="IVA y flete"
getVisible="SelectGroup">
<!-- Lista desplegable de tasas de IVA -->
<comboBox id="cmbTasaIVA" label="Tasa de IVA" onChange="IVA"
getText="getIVA" >
<item id="itIVA1" label="10 %" />
<item id="itIVA2" label="21 %" />
</comboBox>
<!-- Casilla Gastos de flete -->
<checkBox id="chkFlete" label="Gastos de envo?"
onAction="GastosFlete" getPressed="getchkFlete" />
<!-- Cuadro de entrada Importe del flete -->
<editBox id="edFlete" label="Importe de los gastos: "
onChange="MostrarFlete" getText="getFlete"
getEnabled="ActivarFlete" />
</group>
<!-- Grupo Vendedor y transportista -->
<group id="Grupo3" label="Vendedor y transportista"
getVisible="SelectGroup">
<!-- Men de vendedores -->
<menu id="mnu_Vendedores" label="Vendedor"
imageMso="AccessTableContacts" size="large">
<button id="btVend1" label="Pedro LOPEZ"
tag="Pedro LOPEZ" imageMso="ContactPictureMenu"
- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

205

onAction="MuestraVendedor" />
<button id="btVend2" label="Laura DURAN"
tag="Laura DURAN" imageMso="ContactPictureMenu"
onAction="MuestraVendedor" />
<button id="btVend3" label="Lucas PEREZ"
tag="Lucas PEREZ" imageMso="ContactPictureMenu"
onAction="MuestraVendedor" />
</menu>
<!-- Men dinmico con la lista de transportistas -->
<dynamicMenu id="dmnu_TasaIVA" label="Transportista"
getContent="Lista_Transp"
imageMso="ShowTimeZones" size="large" />
</group>
<!-- Grupo Condiciones -->
<group id="Grupo4" label="Condiciones">
<!-- Tabla de controles (galeras) -->
<gallery id="galPlazo" label="Plazos"
imageMso="StartTimer" size="large" >
<button id="idPlazo1" label="A la recepcin de la factura"
onAction="MostrarPlazo"
tag="De fecha de factura" imageMso="StartTimer" />
<button id="idPlazo2" label="30 das"
onAction="MostrarPlazo"
tag="30 das" imageMso="StartTimer" />
<button id="idPlazo3" label="30 das a fin de mes"
onAction="MostrarPlazo"
tag="30 das a fin de mes" imageMso="StartTimer" />
</gallery>
<gallery id="galPagos" label="Forma de pago"
imageMso="PictureReflectionGalleryItem" size="large" >
<button id="itModo1" label="Cheque" tag="Cheque"
onAction="MostrarModo"
imageMso="EnvelopesAndLabelsDialog" />
<button id="itModo2" label="Giro" tag="Giro"
onAction="MostrarModo"
imageMso="ViewSlideShowView" />
<button id="itModo3" label="Transferencia bancaria"
tag="Transferencia bancaria"
onAction="MostrarModo"
imageMso="PictureReflectionGalleryItem" />
</gallery>
</group>
</tab>
</tabs>
</ribbon>
</customUI>

3.CdigoVBAdepersonalizacindelacinta(mdulo"Cinta")

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

206

- 3-

Option Explicit
Public objCinta As IRibbonUI
Public blnFlete As Boolean

Carga de la cinta

Sub CargaCinta(ribbon As IRibbonUI)

Variable objeto para usar la cinta

Set objCinta = ribbon


End Sub

Activa la hoja correspondiente al tipo de factura

Sub TipoFactura(control As IRibbonControl, pressed As Boolean)


If control.ID = "btProd" Then
Sheets("Factura de productos").Select
Else
Sheets("Factura de servicios").Select
End If

Muestra la cinta

objCinta = Invalidate
End Sub

Oculta los grupos 2 y 4 si es factura de servicios

Sub SelectGroup(control As IRibbonControl, ByRef returnedVal)


returnedVal = True
If control.ID = "Grupo2" And ActiveSheet.Name = "Factura de
servicios" Then
returnedVal = False
End If
If control.ID = "Grupo3" And ActiveSheet.Name = "Factura
de servicios" Then
returnedVal = False
End If
End Sub

Destaca el botn alternar seleccionado

Sub Activation(control As IRibbonControl, ByRef returnedVal)


returnedVal = False
If control.ID = "btProd" And _
ActiveSheet.Name = "Factura de Productos" Then
returnedVal = True
End If
If control.ID = "btServ" And _
ActiveSheet.Name = "Factura de Servicios" Then
returnedVal = True
End If
End Sub

- 4-

Recuperacin de los valores de la factura

como valores por defecto de la cinta

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

207

Recupera la tasa de IVA de la factura

Sub GetIVA(control As IRibbonControl, ByRef returnedVal)


returnedVal = ""
Application.Goto Reference:="TASA_IVA"
returnedVal = ActiveCell.Value
End Sub

Gastos de flete sobre la factura?

Sub getchkFlete(control As IRibbonControl, ByRef returnedVal)


returnedVal = False
Application.Goto Reference:="FLETE"
If Val(ActiveCell.Value) > 0 Then returnedVal = True
blnFlete = returnedVal
If Not blnFlete Then
Application.Goto Reference:="FLETE"
ActiveCell.Value = ""
End If
objCinta.InvalidateControl "edFlete"
End Sub

Recupera el valor del flete de la factura

Sub getFlete(control As IRibbonControl, ByRef returnedVal)


returnedVal = ""
If blnFlete Then
Application.Goto Reference:="FLETE"
returnedVal = Format(ActiveCell.Value, "0.00")
End If
End Sub

Recuperacin de los valores de la cinta

y asignacin a la factura

Muestra la tasa de IVA seleccionada

Sub IVA(control As IRibbonControl, text As String)


Application.Goto Reference:="TASA_IVA"
ActiveCell.Value = text
End Sub

Si no hay gastos de flete, se desactiva el campo de entrada

Sub GastosFlete(control As IRibbonControl, pressed As Boolean)


blnFlete = pressed
If Not blnFlete Then
Application.Goto Reference:="FLETE"
ActiveCell.Value = ""
End If
objCinta.InvalidateControl "edFlete"
End Sub

Activa o desactiva el importe del flete

Sub ActivarFlete(control As IRibbonControl, ByRef returnedVal)


returnedVal = blnFlete
Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

208

- 5-

End Sub

Asigna el importe del flete a la factura, despus de controlar

Sub MostrarFlete(control As IRibbonControl, text As String)

El importe del flete debe ser numrico

If Not IsNumeric(text) Then


MsgBox "Ingrese un valor numrico como importe del flete",
vbExclamation
Else
Application.Goto Reference:="FLETE"
ActiveCell.Value = text
objCinta.InvalidateControl "edFlete"
End If
End Sub

Asigna el plazo seleccionado a la factura

Sub MostrarPlazo(control As IRibbonControl)


If ActiveSheet.Name = "Factura de Productos" Then
Application.Goto Reference:="PLAZO1"
Else
Application.Goto Reference:="PLAZO2"
End If
ActiveCell.Value = control.Tag
End Sub

Asigna el modo seleccionado a la factura

Sub MostrarModo(control As IRibbonControl)


If ActiveSheet.Name = "Factura de Productos" Then
Application.Goto Reference:="MODO1"
Else
Application.Goto Reference:="MODO2"
End If
ActiveCell.Value = control.Tag
End Sub

Asigna el vendedor seleccionado a la factura

Sub MuestraVendedor(control As IRibbonControl)


Application.Goto Reference:="VENDEDOR"
ActiveCell.Value = control.Tag
End Sub

Asigna el transportista seleccionado a la factura

Sub MuestraTransp(control As IRibbonControl)


Application.Goto Reference:="TRANSPORTISTA"
ActiveCell.Value = control.Tag
End Sub

Carga el men dinmico con la lista de transportistas

mediante cdigo XML

Sub Lista_Transp(control As IRibbonControl, ByRef returnedVal)


Dim i As Integer
Dim sXML As String
i = 1
sXML = "<menu xmlns=""http://schemas.microsoft.com/office/2006/01/
- 6-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

209

customui"">"
With Sheets("Transportistas")
Do While .Cells(i, 1) <> ""
sXML = sXML & AgregaItem(i, .Cells(i, 1))
i = i + 1
Loop
End With
returnedVal = sXML & " </menu>"
End Sub

Agrega un transportista al men dinmico

Private Function AgregaItem(Index, Transportista As String)


AgregaItem = "<button " _
& "id=" & Chr(34) & "btTransp" & Index & Chr(34) & " " _
& "label=" & Chr(34) & Transportista & Chr(34) & " " _
& "tag=" & Chr(34) & Transportista & Chr(34) & " " _
& "imageMso=" & Chr(34) & "ShowTimeZones" & Chr(34) & " " _
& "onAction=" & Chr(34) & "MuestraTransp" & Chr(34) & "/>"
End Function

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

210

- 7-

Personalizacindelacintadeopcionesmediantelacoleccin
CommandBars
ElaccesoaestacoleccinpermiterealizarlassiguientesoperacionesconlaayudadellenguajeVBA:

Crear barras de herramientas personalizadas: se ubican automticamente en el grupo Barras de herramientas


personalizadas de la pestaa Complementos (la ltima de la derecha) y tiene el aspecto de las barras de
herramientasdelasversionesanterioresdeExcel.

Crearbarrasdemenspersonalizados:sepuedenubicartantoenlapestaaComplementoscomoenunahojaExcel
bajolaformademenscontextuales(mens"popup").

CrearunabarradecomandospersonalizadaconelformatodeOffice2016.

Personalizarloscomandosensuaccinsobrelasmacros.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

211

- 1-

Ejemplosdebarrasdecomandos
1.Barrasdeherramientaspersonalizadas

Semuestrandosbarrasdecomandos:unabarradeherramientasconseisbotones yunabarrademenscontres
opciones.

2.ComandosdemensenformatoOffice2016

3.Agregarelgrupoalabarradeherramientasdeaccesorpido
Lasbarrasdecomandosascreadassepuedenhaceraccesiblesdesdelabarradeherramientasdeaccesorpido
delasiguientemanera:
Ubiqueelcursorbajolabarradecomandosyhagaclicconelbotnderechodelratn.
SeleccionelaopcinAgregaralabarradeherramientasdeaccesorpido.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

212

- 1-

Normalmente,lasbarrasdecomandossonaccesiblesatravsdebotonesdecomandosagregadosalabarrade
herramientasdeaccesorpido:
Barrasdeherramientaspersonalizadas

Comandosdemens

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

213

Barrasdecomandos
1.Terminologa
a.Barradecomandos
RepresentalasbarrasdeherramientasdeExcel,lasbarrasdeherramientaspersonalizadasylasbarrasdemen.

b.Control
Representauncomando(botndecomando,opcindemen,etc.)deunabarradecomandos.

2.Crearunabarradecomandos
CommandBars.Add(Name, Position, MenuBar, Temporary)

EstemtododevuelveunobjetoCommandBar.

Name

Nombredelanuevabarradecomandos.

Position

Posicindelanuevabarrapuedeadoptarunadelassiguientesconstantes:
msoBarLeft:alaizquierda
msoBarTop:arriba
msoBarRight:aladerecha
msoBarBottom:abajo
msoBarFloating:noanclada
msoBarPopup:mencontextual

MenuBar

RecibeelvalorTruesilanuevabarradebereemplazarlabarraactiva.

Temporary

Recibe el valor True en el caso de una barra temporal las barras temporales se
eliminanalcerrarlaaplicacin.

Ejemplo
Creacindeunabarrademenydeunabarradeherramientas.Estasbarras solamentesernvisiblesdespusdeagregarlos
controlesasociados.

Dim Barra1 As CommandBar


Dim Barra2 As CommandBar
Sub Crear_Barras()

Crea una barra de men llamada "Menu1"

Set Barra1 = CommandBars.Add(Name:="Menu1", _


Position:=msoBarTop)

Muestra la barra de men creada

Barra1.Visible = True

Crea una barra de herramientas llamada "Menu2"

Set Barra2 = CommandBars.Add(Name:="Menu2", _


Position:=msoBarTop)
End Sub

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

214

- 1-

Atencin:sielcdigoestescritoenelmdulodeclaseThisWorkbook,esnecesarioindicarelobjeto Application
(ejemplo:Application.CommandBars).

3.Eliminarunabarradecomandos
Expression.Delete
ExpresinquedevuelveelobjetoCommandBarquehayqueeliminar.

Expression

Ejemplo
Eliminarlabarrademenylabarradeherramientas(indispensableantesdecrearnuevamentelasbarras).

Sub Eliminar_Barras()

Elimina las barras de comandos personalizadas

Application.CommandBars("Menu1").Delete
Application.CommandBars("Menu2").Delete
End Sub

Lasbarrasdecomandostambinpuedenreferenciarseporelnombredelavariableobjeto.

Sub Eliminar_Barras()

Elimina las barras de comandos personalizadas

Barra1.Delete
Barra2.Delete
End Sub

4.Mostrarunabarradecomandos
LapropiedadVisiblepermitemostraruocultarunabarradecomandos.Despusdecrearunabarradecomandos,
lapropiedadVisibletieneelvalorFalse.
La propiedad Enabled permite activar o desactivar una barra de comandos. Si una barra de comandos est
desactivada (Enabled = False), esta se elimina de la lista de barras de herramientas la propiedad Visible ya no
estardisponible.
Ejemplo
MuestralabarradecomandosMenu2despusdeverificarqueestaseencuentra disponible.

Sub Mostrar_Barras()

Muestra la barra de comandos Menu2

if Application.CommandBars("Menu2").Enabled = False then


Application.CommandBars("Menu2").Enabled = True
End if
- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

215

Application.CommandBars("Menu2").Visible = True
End Sub

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

216

- 3-

Controles(opcionesobotonesdecomando)delasbarrasde
comandos
LacoleccindeobjetosCommandBarControlsrepresentatodosloscontrolesdeunabarradecomandos.
Paraaccederaestacoleccin,uselapropiedadControlsdelosobjetosCommandBar yCommandBarPopup.

1.Agregaruncontrol
Expression.Controls.Add(Type, Id, Parameter, Before, Temporary)

Este mtodo devuelve un objeto CommandBarButton, CommandBarComboBox o CommandBarPopUp, que son


objetosdetipoCommandBarControls.

Expression

ExpresinquedevuelveunobjetoCommandBarobligatorio.

Type

Tipodecontrolquehayqueagregarpuedeserunadelassiguientesconstantes:
msoControlButton:herramientauopcindemen
msoControlEdit:cuadrodeentrada
msoControlDropDown:cuadrodelista
msoControlComboBox:cuadrodelista
msoControlPopUp:mencontextual
Entero que identifica un control integrado si el valor del argumento es igual a 1 o si se

Id

omite, se agrega un control personalizado vaco del tipo indicado en la barra de


comandos.
En el caso de controles integrados, la aplicacin contenedor lo usa para ejecutar el

Parameter

comando en el caso de controles personalizados, este argumento puede servir para


enviarinformacinalosprocedimientosVisualBasicoparaalmacenarlainformacinen
elcontrol.
Nmero que indica la posicin del nuevo control en la barra de comandos si no se

Before

especificaesteargumento,elcontrolseagregaalfinaldelabarradecomandos.
Recibe el valor True en el caso de un control temporal los controles temporales se

Temporary

suprimencuandosecierralaaplicacindeExcel.

2.Especificarelttulodeuncontrol
UselapropiedadCaptiondelcontrol.
Enelcasodeunmen,estapropiedadindicasuttuloenelcasodeunbotn,indicalaetiquetainformativaque
aparece.

3.Eliminaruncontrol
Expression.Delete

Expression

ExpresinquedevuelveelobjetoCommandBarControlsquehayqueeliminar.

4.Asociarunprocedimientoauncontrol

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

217

- 1-

UselapropiedadonActiondelcontrol.
Elnombredelprocedimientoquedeseaasociaralcontrolsedebeindicarentrecomillas.

Para mostrar la tecla de mtodo abreviado del procedimiento asociado, use la propiedad ShortCutText del objeto
CommandBarButton.

5.Otraspropiedades
Paraactivarodesactivaruncontrol,uselapropiedadEnableddelcontrol.
Para modificar el aspecto de la imagen de un botn, use la propiedad FaceId del objeto
CommandBarButton.
Estapropiedaddefineelaspectodelbotn,ynosufuncin.

Ejemplos
AgregarunbotndecomandopersonalizadoalabarradeherramientasMenu2.EstebotnabreelcuadrodedilogoGuardar
como.

Sub Agregar_Control1()
Dim m_Button as CommandBarButton

Agrega un botn de comando a la barra Menu2

Set m_Button = Application.CommandBars("Menu2").Controls.Add _


(Type:=msoControlButton)

Icono Guardar

m_Button.FaceId = 3

Accin "GuardarComo"

m_Button.OnAction = "GuardarComo"
End Sub

ProcedimientoGuardarComo

Sub GuardarComo()

Cuadro de dilogo "GuardarComo"

Application.Dialogs(xlDialogSaveAs).Show
End Sub

AgregarelmenArchivoylaopcinGuardarcomoalabarradecomandosMenu1.

Sub Agrega_Control2()
Dim m_Menu As CommandBarControl
Dim m_Option As CommandBarControl
Agrega el men Archivo
Set m_Menu = Application.CommandBars("Menu1") _
.Controls.Add (Type:=msoControlPopup)
m_Menu.Caption = "Archivo"

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

218

Agrega el botn de comando


Set m_Option = m_Menu.Controls.Add _
(Type:=msoControlButton)
m_Option.Caption = "Guardar Como"
Icono Guardar
m_Option.FaceId = 3
Accin "GuardarComo"
m_Option.OnAction = "GuardarComo"
End Sub

6.Listadeimgenesasociadasalosbotonesdecomando
El siguiente procedimiento muestra, en la hoja de Excel activa, la lista de imgenes que se pueden asociar a los
botonesdecomando(propiedadFaceId)ysunmerocorrespondiente.

Sub Muestra_Imagenes()
Dim numFila As Integer
Dim numCol As Integer
Dim numImagen As Long
Dim Menu1 As CommandBar
Dim Button1 As CommandBarControl

Crea una barra de herramientas temporal

Set Menu1 = Application.CommandBars.Add _


(Position:=msoBarFloating, temporary:=True)

Agrega un botn de comando

Set Button1 = Menu1.Controls.Add(msoControlButton)

Modifica la imagen del botn de comando

y la copia en una celda de Excel

For numCol = 1 To 10 Step 2


For numFila = 1 To 100
numImagen = numImagen + 1
Button1.FaceId = numImagen
Button1.CopyFace
ActiveSheet.Cells(numFila, numCol) = numImagen
ActiveSheet.Paste Cells(numFila, numCol + 1)
Next numFila
Next numCol

Redimensiona las columnas

Columns("A:W").Select
Selection.ColumnWidth = 4

Elimina la barra de herramientas

Menu1.Delete
End Sub

Elresultadoobtenidoeselsiguiente:

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

219

- 3-

- 4-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

220

Ejemplosdemenspersonalizados
1.Presentacin

Esteejemplocrealassiguientesbarrasdecomandos:

Ungrupodecomandosllamado"Comandosdemen":

Una barra de men con el ttulo "Men Gastos", dentro del grupo "Barras de herramientas personalizadas", que
permiteaccederalassiguientesopciones:

Unabarrademenconelttulo"Gastos",dentrodelgrupo"Barrasdeherramientaspersonalizadas":

Unabarrademencontextualqueaparececuandoelusuariosesitaenlazonallamada"Empleado"yhacecliccon
el botn secundario del ratn. Los empleados se extraen de la base de datos de Access Empleados.accdb (base de
datosdisponibleconlosejemplosdellibro).

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

221

- 1-

2.Cdigodelosejemplos
Paracrearlosmensdelsiguienteejemplo,sedebenrealizarlassiguientesoperaciones:

CreareldocumentodeExcel.

Definirunreadeimpresin.

DefinirunrangodeceldasconelnombreEmpleadoqueincluyalasceldasApellidoyNmerodeempleado.

DefinirunrangodeceldasconelnombreINFORMEGASTOSqueincluyalasceldasquehayqueimprimir.

Asignarlossiguientesnombresalasceldasquecontienenlainformacindelempleado:Empleado,Funcin,Poblacin.

Agregar un mdulo estndar llamado ProcMenus este mdulo contendr los procedimientos para crear las
diferentesbarrasdecomandos.

Agregar un mdulo estndar llamado ProcAcciones este mdulo contendr los procedimientos personalizados
asociadosalosbotonesdecomando.

3.CdigodelmdulodeclaseThisWorkbook

option Explicit
________________________________________________________________
Private Sub Workbook_Open()

Muestra los mens personalizados

Personalizar_Excel

Ajusta el zoom

Ajuste
End Sub
________________________________________________________________
Private Sub Workbook_BeforeClose(Cancel As Boolean)

Pide confirmacin del cierre del libro

If MsgBox("Desea cerrar el libro?", _


vbQuestion & vbYesNo, ThisWorkbook.Name) = vbYes Then
Muestra los mens de Excel
Restaurar_Excel
Else
Cancel = True
End If
End Sub

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

222

4.Cdigodelahoja"NotadeGastos"

Option Explicit
Private Sub Worksheet_BeforeRightClick(ByVal Target As Excel.Range, _
Cancel As Boolean)

Si la primera celda activa pertenece al rango llamado

"Empleado": mostrar el men Empleados

If Union(Target.Range("A1"), Range("Empleado")).Address = _
Range("Empleado").Address Then
CommandBars("Empleados").ShowPopup
Cancel = True
End If
End Sub

5.CdigodelmduloProcMenus

option Explicit

Declaracin de variables

Dim m_Menu As CommandBarPopup


Dim m_Barra As CommandBar
Dim m_Option As CommandBarControl
Dim m_Button As CommandBarButton
Sub Personalizar_Excel()
Dim i As Integer

Crea los mens y comandos personalizados

Mostrar_Barra_Mens
Mostrar_Barra_Herramientas
Mostrar_Barra_Comandos

Men contextual "Lista de empleados"

Lista_Empleados

Oculta las barras de frmulas, de estado

y los encabezados de fila y columna

Application.DisplayFormulaBar = False
Application.DisplayStatusBar = False
Application.ActiveWindow.DisplayHeadings = False
End Sub
______________________________________________________________________
Sub Restaurar_Excel()
Dim i As Integer
Dim m_Ctrl As CommandBarControl

Elimina los mens y barras de comandos

On Error Resume Next


Application.CommandBars("Men Gastos").Delete
Application.CommandBars("Gastos").Delete
Application.CommandBars("Empleados").Delete
On Error GoTo 0

Elimina los comandos personalizados


Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

223

- 3-

de la barra de comandos "Herramientas"

For Each m_Ctrl In Application.CommandBars("Tools").Controls


If Not m_Ctrl.BuiltIn Then
m_Ctrl.Delete
End If
Next m_Ctrl

Vuelve a mostrar las barras de frmulas, de estado

y los encabezados de fila y columna

Application.DisplayFormulaBar = True
Application.DisplayStatusBar = True
Application.ActiveWindow.DisplayHeadings = True
End Sub
Sub Mostrar_Barra_Menus()
On Error Resume Next

Elimina la barra de men para recrearla

Application.CommandBars("Menu Gastos").Delete
On Error GoTo 0

Crea la barra de men

Set m_Barra = Application.CommandBars.Add(Name:="Menu Gastos", _


Position:=msoBarTop)

Muestra la barra de men creada

Application.CommandBars("Menu Gastos").Visible = True

Agrega el men "Archivo"

Set m_Menu = m_Barra.Controls.Add(Type:=msoControlPopup)


m_Menu.Caption = "Archivo"

Agrega los comandos del men "Archivo"

Las acciones son las acciones por defecto

Set m_Option = m_Menu.Controls.Add(Type:=msoControlButton, ID:=3)


m_Option.OnAction = "GuardarComo"
Set m_Option = m_Menu.Controls.Add(Type:=msoControlButton, ID:=109)
Set m_Option = m_Menu.Controls.Add(Type:=msoControlButton, ID:=4)
Set m_Option = m_Menu.Controls.Add(Type:=msoControlButton, ID:=106)

Agrega el men "Ver"

Set m_Menu = m_Barra.Controls.Add(Type:=msoControlPopup)


m_Menu.Caption = "Ver"

Agrega la lista desplegable de zooms

Set m_Option = m_Menu.Controls.Add(Type:=msoControlComboBox, ID:=1733)

Agrega los comandos del men "Ver"

con la llamada a los procedimientos accin

Set m_Option = m_Menu.Controls.Add(Type:=msoControlButton)


m_Option.FaceId = 175
m_Option.Caption = "Ajuste"
m_Option.OnAction = "Ajuste"

Agrega la opcin " Restaurar Excel "

Set m_Option = m_Menu.Controls.Add(Type:=msoControlButton)


m_Option.FaceId = 303
m_Option.Caption = "Restaurar Excel"
m_Option.OnAction = "Restaurar_Excel"

Agrega el men "Formato"

Set m_Menu = m_Barra.Controls.Add(Type:=msoControlPopup)


m_Menu.Caption = "Formato"

Agrega los comandos del men "Ver"

con la llamada a los procedimientos accin

Set m_Option = m_Menu.Controls.Add _

- 4-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

224

(Type:=msoControlButton)
m_Option.FaceId = 291
m_Option.Caption = "Fuente"
m_Option.OnAction = "Fuente"
Set m_Option = m_Menu.Controls.Add _
(Type:=msoControlButton)
m_Option.Caption = "Bordes"
m_Option.OnAction = "Bordes"
m_Option.FaceId = 1704
Set m_Option = m_Menu.Controls.Add _
(Type:=msoControlButton)
m_Option.Caption = "Tramas"
m_Option.OnAction = "Tramas"
m_Option.FaceId = 1988
End Sub
_______________________________________________________________________
Sub Mostrar_Barra_Herramientas()
On Error Resume Next

Elimina la barra de herramientas para recrearla

Application.CommandBars("Gastos").Delete
On Error GoTo 0

Crea una barra de men llamada "Gastos"

Set m_Barra = Application.CommandBars.Add(Name:="Gastos", _


Position:=msoBarTop)

Muestra la barra de herramientas personalizada

Application.CommandBars("Gastos").Visible = True

Agrega los botones de comando estndares en la barra

de herramientas

Set m_Button = m_Barra.Controls.Add _


(Type:=msoControlButton, ID:=3)
m_Option.OnAction = "GuardarComo"
Set m_Button = m_Barra.Controls.Add _
(Type:=msoControlButton, ID:=109)
Set m_Button = m_Barra.Controls.Add _
(Type:=msoControlButton, ID:=4)

Agrega un botn de comando personalizado

Set m_Button = m_Barra.Controls.Add _


(Type:=msoControlButton)
With m_Button
.BeginGroup = True
.FaceId = 175
.OnAction = "Ajuste"
.TooltipText = "Ajuste"
End With

Agrega la lista desplegable de zooms

Set m_Option = m_Barra.Controls.Add _


(Type:=msoControlComboBox, ID:=1733)

Agrega la opcin "Restaurar Excel"

Set m_Option = m_Barra.Controls.Add _


(Type:=msoControlButton)
m_Option.FaceId = 303
m_Option.Caption = "Restaurar Excel"
m_Option.OnAction = "Restaurar_Excel"

Agrega los botones "Formato"

Set m_Button = m_Barra.Controls.Add _

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

225

- 5-

(Type:=msoControlButton)
With m_Button
.BeginGroup = True
.FaceId = 291
.OnAction = "Fuente"
.TooltipText = "Fuente"
End With
Set m_Button = m_Barra.Controls.Add _
(Type:=msoControlButton)
With m_Button
.FaceId = 1704
.OnAction = "Bordes"
.TooltipText = "Bordes"
End With
Set m_Button = m_Barra.Controls.Add _
(Type:=msoControlButton)
With m_Button
.FaceId = 1988
.OnAction = "Tramas"
.TooltipText = "Tramas"
End With
End Sub
_______________________________________________________________________
Sub Mostrar_Barra_Comandos()

Objeto que representa la barra de herramientas "Tools"

Set m_Barra = Application.CommandBars("Tools")

Agrega los botones de comando estndares en la barra

de herramientas

Set m_Button = m_Barra.Controls.Add _


(Type:=msoControlButton, ID:=3)
m_Button.Caption = "Guardar como"
m_Button.OnAction = "GuardarComo"
Set m_Button = m_Barra.Controls.Add _
(Type:=msoControlButton, ID:=109)
m_Button.Caption = "Vista preliminar"
m_Button.OnAction = "VistaPreliminar"
Set m_Button = m_Barra.Controls.Add _
(Type:=msoControlButton, ID:=4)
m_Button.Caption = "Imprimir"
m_Button.OnAction = "Imprimir"

Agrega los comandos de tipo "Formato"

Set m_Button = m_Barra.Controls.Add _


(Type:=msoControlButton)
With m_Button
.FaceId = 291
.OnAction = "Fuente"
.TooltipText = "Fuente"
.Caption = "Fuente"
End With
Set m_Button = m_Barra.Controls.Add _
(Type:=msoControlButton)
With m_Button
.FaceId = 1704
.OnAction = "Bordes"
.TooltipText = "Bordes"

- 6-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

226

.Caption = "Bordes"
End With
Set m_Button = m_Barra.Controls.Add _
(Type:=msoControlButton)
With m_Button
.FaceId = 1988
.OnAction = "Tramas"
.TooltipText = "Tramas"
.Caption = "Tramas"
End With
End Sub
_______________________________________________________________________
Public Sub Lista_Empleados()
Dim Db As Database
Dim rstEmp As Recordset
Dim Legajo As Long

Crea el men "Empleados"

On Error Resume Next


Application.CommandBars("Empleados").Delete
On Error GoTo 0
Set m_Barra = CommandBars.Add _
(Name:="Empleados", Position:=msoBarPopup, Temporary:=True)

Abre la tabla Empleados

Set Db = OpenDatabase(ActiveWorkbook.Path & "\Empleados.accdb")


Set rstEmp = Db.OpenRecordset("SELECT * FROM Empleados ORDER BY
Apellido,

Nombre")

Muestra la lista de empleados

Do While Not rstEmp.EOF


Set m_Button = m_Barra.Controls.Add(Type:=msoControlButton)
With m_Button
If rstEmp("Tratamiento") = "Sra" Or rstEmp("Tratamiento") =
"Srta" Then
.FaceId = 2148
Else
.FaceId = 2103
End If
.Caption = UCase(rstEmp("Apellido")) & " " & rstEmp("Nombre")
Legajo = rstEmp("Legajo")
.OnAction = "Mostrar_Empleado(" & Legajo & ")"
End With
rstEmp.MoveNext
Loop

Cierra los objetos de Access

rstEmp.Close
Db.Close
End Sub

6.CdigodelmduloProcAction

Sub Ajuste()

Ajusta el zoom al contenido

del rango llamado "NotaDeGastos"

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

227

- 7-

Application.Goto Reference:="INFORME GASTOS"


ActiveWindow.Zoom = True
Range("EMPLEADO").Select
End Sub
________________________________________________________________________
Sub Mostrar_Empleado(Legajo As Long)
Dim Db As Database
Dim rstEmp As Recordset
Dim strSql As String

Abre la tabla "Empleados"

Set Db = OpenDatabase(ActiveWorkbook.Path & "\Empleados.accdb")


strSql = "SELECT * FROM Empleados WHERE [NumEmpleado] = " & NumEmp
Set rstEmp = Db.OpenRecordset(strSql)

Muestra las coordenadas del empleado seleccionado

Range("EMPLEADO") = UCase(rstEmp("Apellido")) & " " & rstEmp("Nombre")


Range("Funcin") = rstEmp("Cargo")
Range("Poblacin") = rstEmp("Municipio")

Cierra los objetos de Access

rstEmp.Close
Db.Close
End Sub
________________________________________________________________________
Sub Fuente()

Muestra el cuadro de dilogo "Fuente"

Application.Dialogs(xlDialogFormatFont).Show
End Sub
________________________________________________________________________
Sub Bordes()

Muestra el cuadro de dilogo "Bordes"

Application.Dialogs(xlDialogBorder).Show
End Sub
________________________________________________________________________
Sub Tramas()

Muestra el cuadro de dilogo "Tramas"

Application.Dialogs(xlDialogPatterns).Show
End Sub
________________________________________________________________________
Sub GuardarComo()

Cuadro de dilogo Guardar como

Application.Dialogs(xlDialogSaveAs).Show
End Sub
________________________________________________________________________
Sub VistaPreliminar()

Vista preliminar

ThisWorkbook.PrintPreview
End Sub
________________________________________________________________________
Sub Imprimir()

Impresin de la hoja de clculo

ActiveSheet.PrintOut
End Sub

- 8-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

228

Presentacin
Un evento es una accin del usuario o del sistema reconocido por un objeto de Microsoft Excel. El evento
desencadenaunprocedimiento,asociadoaleventodelobjetoactivo.
Estosprocedimientoslepermitenasociaruncdigopersonalizadoenrespuestaauneventoqueseproduceenun
objetodeExcel(libro,hoja,formulario,grfico,etc.).

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

229

- 1-

Escrituradeeventos
1.Eventosdelibro,dehojaodeformulario
Ustedpuedeaccederalosprocedimientosdeeventosasociadosaunobjetodelasiguientemanera:
En la ventana Explorador de proyectos, haga doble clic en el objeto deseado (libro, hoja o formulario)
parahacerqueaparezcalaventanadecdigocorrespondiente.
Abra la lista desplegable a la izquierda de la ventana de cdigo y seleccione Workbook,Worksheet o
UserForm,segnelobjetoseleccionado.
Tambin puede seleccionar un evento vinculado al objeto seleccionado en la lista desplegable de la
derecha,paraasociarleuncdigopersonalizado.
Laejecucindelosprocedimientosdeeventossepuededesactivarencualquier momentoasignandoelvalorFalse
alapropiedadEnableEventsdelobjetoApplication.

Ejemplo
Esteejemplomuestracmoobtenerunlistadohistricodetodosloshipervnculosvisitadosenlahojadeclculoactiva.

ResultadoenExcel:

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

230

- 1-

2.EventosdelobjetoApplication
SenecesitantresetapasparalaescriturayejecucindeloseventosdelobjetoApplication.

Etapa1
Inserteunmdulodeclase:
InsertarMdulodeclase
oabralalista

yhagaclicenMdulodeclase.

Unavezinsertadoelmdulo,asgneleunnombre.
Ejemplo
DeleelnombreObjApplicationalmdulodeclase.

Etapa2
Enelmdulodeclase,creeunobjetoApplicationconelsiguientecdigo:
Public WithEvents NomObjeto As Application
Ejemplo
CreacindelobjetooMiAplicacincomoaplicacin.

Public WithEvents oMiAplicacion As Application

Elobjetoascreadoquedadisponibleenlalistadelaizquierdadelmdulo.
Seleccioneelobjetocreadoenlalistadelaizquierdadelmduloyluegoseleccioneeleventoesperado
enlalistadeladerecha.Escribaelcdigodelosprocedimientosquedeseagenerar.
Ejemplo
Creacin de dos procedimientos de eventos: el primero realiza la insercin de una nueva hoja el segundo, la creacin de un
nuevolibro.

Public WithEvents oMiAplicacion As Excel.Application


______________________________________________________________________
Private Sub oMiAplicacion_WorkbookNewSheet _
(ByVal Wb As Workbook, ByVal Sh As Object)
Dim oNomHoja As String

Cada vez que se agrega una hoja, se pide al usuario

que introduzca un nombre que a continuacin se asignar a la hoja

insertada tras las hojas existentes

oNomHoja = InputBox("Introduzca el nombre de la hoja")


ActiveSheet.Name = oNomHoja

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

231

ActiveSheet.Move After:=Sheets(Sheets.Count)
End Sub
______________________________________________________________________
Private Sub oMiAplicacion_NewWorkbook(ByVal Wb As Workbook)
Dim iNbHojas As Integer
Dim iNbActual As Integer
Dim iDiferencia As Integer

Por cada nuevo libro,

solicitamos al usuario la cantidad de hojas

Segn el caso, se agregan o eliminan las hojas necesarias

Do
iNbHojas = Application.InputBox _
("Cantidad de hojas?", Type:=1)
Loop While iNbHojas = False
iNbActual = Sheets.Count
iDiferencia = iNbActual - iNbHojas

Eliminar las hojas de ms

Eliminar los mensajes de alerta con el fin

de no obtener mensajes en la eliminacin de hojas

Do While iDiferencia > 0


Application.DisplayAlerts = False
Sheets.Item(iDiferencia).Select
ActiveWindow.SelectedSheets.Delete
iDiferencia = iDiferencia - 1
Loop

Agregar hojas si es necesario

Se desactivan los eventos para

no indicar los nombres de las nuevas hojas

Do While iDiferencia < 0


Application.EnableEvents = False
Sheets.Add
iDiferencia =

iDiferencia + 1

Loop

Reactivar eventos y alertas

Application.EnableEvents = True
Application.DisplayAlerts = True
End Sub

Etapa3
ActiveunmdulocualquierayconecteelobjetodeclaradoenelmdulodeclaseconelobjetoApplication
paralassiguientesinstrucciones:
Dim oNomVariable As New NomModuloDeClase
Sub NomProced ()
Set oNomVariable.NomObjeto = Application
End Sub
Ejemplo
AgregueelsiguientecdigoenelmduloDeclaraciones.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

232

- 3-

Option Explicit
Dim oApp As New ObjApplication
________________________________________________________________
Sub InicializaMiAplicacion()
Set oApp.oMiAplicacion = Application
End Sub

Finalmente,llamealprocedimientoInicializaMiAplicacionalabrirellibro(mdulodeclaseThisWorkbook).

Private Sub Workbook_Open()


InicializaMiAplicacion
End Sub

Cuandoseabraellibro,seejecutarnautomticamentelosprocedimientosdeeventoscreadosdurantelaetapa2
yseagregarnloslibrosolashojas.Estosprocedimientossedesactivarnalcerrarellibro.

3.Eventoasociadoaungrficoincrustado
LacoleccinCharts(delobjetoWorkbook)contienetodoslosgrficosdellibroespecificado.
Senecesitantresetapasparalaescrituraylaejecucindeloseventosasociadosaungrficoincrustado.

Etapa1
Inserteunmdulodeclase:
InsertarMdulodeclase
oabralalista

yhagaclicenMdulodeclase.

Unavezinsertadoelmdulo,asgneleunnombre.
Ejemplo
DeleelnombreObjGraficosalmdulodeclase.

Etapa2
Enelmdulodeclase,creeunobjetogrficoparaelsiguientecdigo:
Public WithEvents NomObjeto As Chart
Ejemplo
CreacindelobjetollamadooChart1comogrficoincrustado.

Public WithEvents oChart1 As Chart

- 4-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

233

Elobjetoascreadoquedadisponibleenlalistadelaizquierdadelmdulo.
Seleccioneelobjetocreadoenlalistadelaizquierdadelmduloyluegoseleccioneeleventoesperado
enlalistadeladerecha.Escribaelcdigodelosprocedimientosquedeseagenerar.
Ejemplo
Creacindedosprocedimientosdeeventos:unodesactivaelgrfico,elotroespecificasusdimensiones.

Option Explicit
Public WithEvents oChart1 As Chart
________________________________________________________________
Private Sub oChart1_Deactivate()
Dim sRespuesta As String

Cada vez que se desactiva el grfico

se pregunta si hay que guardar el libro

sRespuesta = MsgBox("Guardar los cambios?", vbYesNo)


If sRespuesta = vbYes Then ActiveWorkbook.Save
End Sub
________________________________________________________________
Private Sub oChart1_Resize()
Dim oGrafico As Object

Cada vez que cambia el tamao del grfico

se muestran la primera y la ltima celda oculta

Set oGrafico = Worksheets(2).ChartObjects(1)


MsgBox "Este grfico oculta la celda: " _
& oGrafico.TopLeftCell.Address _
& Chr(13) & "hasta la celda: " _
& oGrafico.BottomRightCell.Address
End Sub

Etapa3
Active un mdulo cualquiera y conecte el objeto declarado en el mdulo de clase con el objeto grfico
incrustadoparalassiguientesinstrucciones:
Dim oNomVariable As New NomModuloDeClase
Sub NomProced ()
Set oNomVariable.NomObjeto =
WorkSheets(HojaDeGrafico).
ChartObjects(NumeroDeGrafico).Chart
End Sub
Ejemplo
Para asociar los eventos al primer grfico de la segunda hoja de clculo, agregue el siguiente cdigo en el mdulo
Declaraciones.

Dim obj As New ObjGraficos


________________________________________________________________
Sub InicializaGrafico()

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

234

- 5-

Set obj.Chart1 = Worksheets(2).ChartObjects(1).Chart


End Sub

Finalmente,llamealprocedimientoInitMiAplicacionalabrirellibro(mdulodeclaseThisWorkbook).

Private Sub Workbook_Open()


InicializaGrafico
End Sub

Al abrir este libro, los procedimientos creados durante la etapa 2 se ejecutarn automticamente y se
redimensionar o se desactivar el grfico situado en la segunda hoja de clculo. Estos procedimientos se
desactivarnalcerrarellibro.

- 6-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

235

EventosdelobjetoApplication
AfterCalculate
Ocurredespusdelreclculodelosformulariosdellibro.
NewWorkBook
Ocurrealcrearunnuevolibro.
ProtectedViewWindowActivate
Ocurrealactivarunaventanaprotegida.
ProtectedViewWindowBeforeClose
Ocurreinmediatamenteantesdecerrarunaventanaprotegidaounlibrodentrodeunaventana
protegida.
ProtectedViewWindowBeforeEdit
Ocurrealmodificarunaventanaprotegida.
ProtectedViewWindowDeactivate
Ocurrealcerrarunaventanaprotegida.
ProtectedViewWindowOpen
Ocurrecuandoseabreunlibroenunaventanaprotegida.
ProtectedViewWindowResize
Ocurrecuandoseredimensionaunaventanaqueseencuentraenmodoprotegido.
SheetActivate
Ocurrealactivarunahoja.
SheetBeforeDoubleClick
Ocurrealhacerdobleclicenunahojadeclculo,antesdelaaccinpredeterminadaparaeldobleclic.
SheetBeforeRightClick
Ocurrealhacerclicconelbotnsecundariodelratnenunahojadeclculo,antesdelaaccin
predeterminada.
SheetCalculate
Ocurrecuandoserecalculatodalahojadeclculoodespusdeactualizarungrficoalmodificarsus
datos.
Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

236

- 1-

SheetChange
Ocurrecuandolasceldasdeunahojadeclculosemodificanporelusuariooporunvnculoexterno.
SheetDeactivate
Ocurrealdesactivarunahojadeclculo.
SheetFollowHyperlink
OcurrecuandoelusuariohaceclicenunhipervnculoenMicrosoftExcel.
SheetPivotTableAfterValueChange
Ocurrecuandosemodificaorecalculaunaceldaorangodeceldasdeunatabladinmica.
SheetPivotTableBeforeAllocateChanges
Ocurrealactualizarcambiosenunatabladinmica.
SheetPivotTableBeforeCommitChanges
OcurreantesdevalidarcambiosenunatabladinmicavinculadosaunorigendedatosOLAP.
SheetPivotTableBeforeDiscardChanges
Ocurreantesdedescartarcambiosenunatabladinmica.
SheetPivotTableUpdate
Ocurrealactualizarlahojadeinformedeunatabladinmica.
SheetSelectionChange
Ocurrecuandocambialaseleccinencualquierhojadeclculo(eleventonoocurresilaseleccinse
hacesobreunahojadegrfico).
WindowActivate
Ocurrealactivarunaventanadelibro.
WindowDeactivate
Ocurrecuandosedesactivaunaventanadelibro.
WindowResize
Ocurrealcambiareltamaodeunaventanadelibro.
WorkbookActivate

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

237

Ocurrecuandoseactivaunlibro.
WorkbookAddinInstall
Ocurrecuandoseinstalaunlibroenformadeunamacrocomplementaria.
WorkbookAddinUninstall
Ocurrecuandosedesinstalaunamacrocomplementaria.
WorkbookAfterSave
Ocurredespusdeguardarunmdulodeclase.
WorkbookAfterXMLExport
OcurredespusdeexportarunarchivoXML.
WorkbookAfterXMLImport
OcurredespusdeimportarunarchivoXML.
WorkbookBeforeClose
Ocurrejustoantesdecerrarunlibro.
WorkbookBeforePrint
Ocurreantesdeimprimirunlibroabierto.
WorkbookBeforeSave
Ocurreantesdeguardarunlibroabierto.
WorkbookBeforeXMLExport
OcurreantesdeexportarunarchivoXML.
WorkbookBeforeXMLImport
OcurreantesdeimportarunarchivoXML.
WorkbookDeactivate
Ocurrecuandosedesactivaunlibroabierto.
WorkbookNewChart
Ocurrealcrearunnuevogrficoenunlibro.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

238

- 3-

WorkbookNewSheet
Ocurrecuandosecreaunanuevahojaenunlibroabierto.
WorkbookOpen
Ocurrecuandoseabreunlibro.
WorkbookPivotTableOpenConnection
Ocurrealabrirlaconexindeuninformedetabladinmicaconsufuentededatos.
WorkbookPivotTableCloseConnection
Ocurrealcerrarlaconexindeuninformedetabladinmicaconsufuentededatos.
WorkbookRowsetComplete
OcurrecuandoelusuarioextraeeljuegodegrabacindeunatabladinmicaOLAP.
WorkbookSync
Ocurrealsincronizarlacopialocaldeunahojadeclculohechaapartirdeunreadetrabajoconla
copiaenelservidor.

- 4-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

239

EventosdelobjetoWorkbook
Activate
Ocurrecuandoseactivaellibro.
AddinInstall
Ocurrecuandoellibroseinstalaenformadeunamacrocomplementaria.
AddinUninstall
Ocurrecuandoellibrosedesinstalaenformadeunamacrocomplementaria.
AfterSave
Ocurredespusdeguardarellibro.
AfterXMLExport
OcurredespusdeexportarunarchivoXML.
AfterXMLImport
OcurredespusdeimportarunarchivoXML.
BeforeClose
Ocurreantesdecerrarellibrosiellibrofuemodificado,esteeventoseproduceantesdeinvitaral
usuarioaguardarloscambios.
BeforePrint
Ocurreantesdeimprimirellibro(ocualquieradesuspartes).
BeforeSave
Ocurreantesdegrabarellibro.
BeforeXMLExport
OcurreantesdeexportarunarchivoXML.
BeforeXMLImport
OcurreantesdeimportarunarchivoXML.
Deactivate
Ocurrealdesactivarungrfico,unahojadeclculoounlibro.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

240

- 1-

NewChart
Ocurrealcrearunnuevogrficoenellibro.
NewSheet
Ocurrecuandosecreaunanuevahojaenellibro.
Open
Ocurrecuandoseabreellibro.
PivotTableOpenConnection
Ocurrealabrirlaconexindeuninformedetabladinmicaconsufuentededatos.
PivotTableCloseConnection
Ocurrealcerrarlaconexindeuninformedetabladinmicaconsufuentededatos.
RowsetComplete
Esteeventosedesencadenacuandoelusuarioextraeeljuegodegrabacindeunatabladinmica
OLAP.
SheetActivate
Ocurrecuandoseactivaunahoja.
SheetBeforeDoubleClick
Ocurrealhacerdobleclicenunahojadeclculo,antesdelaaccinpredeterminadaparaeldobleclic.
SheetBeforeRightClick
Ocurrealhacerclicconelbotnsecundariodelratnenunahojadeclculo,antesdelaaccin
predeterminada.
SheetCalculate
Ocurrecuandoserecalculatodalahojadeclculoodespusdequeserecalculeungrficoalmodificar
susdatos.
SheetChange
Ocurrecuandolasceldasdeunahojadeclculosemodificanporelusuariooporunvnculoexterno.
SheetDeactivate
Ocurrecuandosedesactivaunahojadeclculo.
SheetFollowHyperlink
- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

241

SeproducealhacerclicencualquierhipervnculoenMicrosoftExcel.
SheetPivotTableAfterValueChange
Ocurrecuandosemodificaorecalculaunaceldaorangodeceldasdeunatabladinmica.
SheetPivotTableBeforeAllocateChanges
Ocurrealactualizarcambiosenunatabladinmica.
SheetPivotTableBeforeCommitChanges
OcurreantesdevalidarcambiosenunatabladinmicavinculadosaunorigendedatosOLAP.
SheetPivotTableBeforeDiscardChanges
Ocurreantesdedescartarcambiosenunatabladinmica.
SheetPivotTableChangeSync
Ocurredespusdemodificarunatabladinmica.
SheetPivotTableUpdate
Ocurrealactualizarlahojadelinformedetabladinmica.
SheetSelectionChange
Seproducecuandocambialaseleccinenunahojadeclculocualquiera(eleventonoseproducesila
seleccinestenunahojadegrfico).
Sync
Ocurrealsincronizarlacopialocaldeunahojadeclculohechaapartirdeunreadetrabajoconla
copiaenelservidor.
WindowActivate
Ocurrealactivarunlibro.
WindowDeactivate
Ocurrealdesactivarunlibro.
WindowResize
Ocurrecuandocambiaeltamaodelaventana.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

242

- 3-

EventosdelobjetoWorksheet
Activate
Ocurrecuandoseactivaunlibro,unahojadeclculo,unahojadegrficooungrficoincrustado.
BeforeDelete
Ocurreantesdeeliminarunahoja.
BeforeDoubleClick
Ocurrealhacerdobleclicenunahojadeclculooungrficoincrustado,antesdelaaccin
predeterminadaparaeldobleclic.
BeforeRightClick
Ocurrealhacerclicconelbotnsecundariodelratnenunahojadeclculooungrficoincrustado,
antesdelaaccinpredeterminada.
Calculate
Ocurrealrecalcularlahojadeclculo.
Change
Ocurrecuandoalgunasceldasdelahojadeclculoestnmodificadasporelusuariooporunvnculo
externo.
Deactivate
Ocurrealdesactivarelgrfico,lahojadeclculooellibro.
FollowHyperlink
Ocurrealhacerclicenunhipervnculodeunahojadeclculo.
PivotTableAfterValueChange
Ocurrecuandosemodificaorecalculaunaceldaorangodeceldasdeunatabladinmica.
PivotTableBeforeAllocateChanges
Ocurrealactualizarcambiosenunatabladinmica
PivotTableBeforeCommitChanges
OcurreantesdevalidarcambiosenunatabladinmicavinculadosaunorigendedatosOLAP.
PivotTableBeforeDiscardChanges
Ocurreantesdedescartarcambiosenunatabladinmica.
Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

243

- 1-

PivotTableChangeSync
Ocurredespusdemodificarunatabladinmica.
PivotTableUpdate
Ocurredespusdeactualizaruninformedetabladinmicaenunahojadeclculo.
SelectionChange
Ocurrecuandocambialaseleccinenunahojadeclculo.

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

244

EventosdelobjetoChart
Activate
Ocurrecuandoseactivaunahojadegrficooungrficoincrustado.
BeforeDoubleClick
Ocurrealhacerdobleclicenungrficoincrustadoounahojadegrfico,antesdelaaccin
predeterminadaparaeldobleclic.
BeforeRightClick
Ocurrealhacerclicconelbotnsecundarioenungrficoincrustadoounahojadegrfico,antesdela
accinpredeterminadacorrespondiente.
Calculate
Ocurredespusdequeelgrficoseactualicecondatosnuevosomodificados.
Deactivate
Ocurrecuandosedesactivaelgrfico,lahojadeclculooellibro.
MouseDown
Ocurrealpresionarelbotnizquierdooderechodelratncuandoelpunteroestsobreungrfico.
MouseMove
Ocurrealcambiarlaposicindelpunterodelratnsobreungrfico.
MouseUp
Ocurrealsoltarelbotnizquierdooderechodelratncuandoelpunteroestsobreungrfico.
Resize
Seproducealcambiareltamaodelgrfico.
Select
Seproducealseleccionarunelementodelgrfico.
SeriesChange
Ocurrecuandoelusuariomodificaelvalordeunpuntodedatosdelgrfico.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

245

- 1-

Diferentestiposdeerror
SedistinguendiferentestiposdeerrorenellenguajeVBA:

Erroresdesintaxis.

Erroresdecompilacin.

Erroresdeejecucin.

Erroresdelgica.

1.Erroresdesintaxis
LoserroresdesintaxissedetectanautomticamenteamedidaqueseintroduceelcdigoenVBA.
Para activar la comprobacin de sintaxis, en el men Herramientas, seleccione Opciones, luego
seleccionelapestaaEditorymarquelacasillaComprobacindesintaxisautomtica.
Ejemplo

Loserroresdesintaxisnocorregidosprovocarnunerrordecompilacindeahelmensajequeaparece.

2.Erroresdecompilacin
LoserroresdecompilacinsedetectancuandoExceltratadecompilarelcdigo.
ElcdigoVBApuedecompilarsededosmaneras:

Bajo demanda, al seleccionar la opcin Compilar VBAProject del men Depuracin. En este caso, el cdigo se
compilaensutotalidad.

Automticamente al ejecutar el cdigo. En este caso, solamente se compila el cdigo contenido en los

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

246

- 1-

procedimientoscuandosellamanporprimeravez.Losprocedimientosquenosellamannosecompilarn.

Serecomiendacompilarelprogramaantesdeejecutarloparaganartiempoenlaactualizacin.

Ejemplo

Es posible anticipar los errores de ejecucin debidos a las variables no declaradas usando la instruccin Option
Explicit.Sitratadeusarunnombredevariablenodeclarado,seproduceunerrordurantelacompilacin.

3.Erroresdeejecucin
LoserroresdeejecucinsedetectancuandoExceltratadeejecutarelcdigo.Unainstruccin,unaoperacin,una
llamadaaunafuncin,etc.,invlidasprovocaunerrordeejecucin.Porejemplo,elusodeunndiceerrneoenuna
coleccinolaasignacindeunvalornonumricoaunavariablenumricapuedeprovocarunerrordeejecucin.
Ejemplo
Lahojadeclculo"Enero"noexisteenellibroactivo.

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

247

4.Erroresdelgica
Loserroresdelgicatienenqueverconerroresderazonamientooconunamalatraduccindeunrazonamientoen
cdigoVBA.Porejemplo,unalgoritmodeclculopuedeproducirunerrorenelresultadosiensutranscripcinaVBA
seomiteosetraducemalunaoperacinoelalgoritmoeserrneo.
Los errores de lgica son los ms difciles de detectar. En general, no producen un error de ejecucin: pero
producenunresultadodistintodelesperado.
Paraanalizarestetipodeerror,elentornoVBEdisponedeherramientasdedepuracinquepermitenejecutarel
cdigopasoapasoyverificarelcontenidodelasvariablesamedidaquesedesarrollaelprograma.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

248

- 3-

Depuracin
1.Presentacin
Ladepuracinpuedeactivarsededistintasmaneras:

Ejecutandoelprogramapasoapaso.

InsertandopuntosdeinterrupcinenelcdigoVBA.

HaciendoclicenelbotnDepurarcuandoseproduceunerrordeejecucin.

Lasdiferentesherramientasdedepuracinpermiten:

Conocerentodomomentoelvalordelasvariablesodelasexpresiones.

Ejecutarinstrucciones.

Modificarinteractivamenteelcdigo.

Ejecutarelcdigopasoapaso.

Agregarpuntosdeinterrupcin.

2.LabarradeherramientasDepuracin
LabarradeherramientasDepuracinpermiteaccederdirectamentealasherramientas dedepuracin.

1.Mododediseo:activaodesactivaelmododediseo.
2.Ejecutar(mtodoabreviadodeteclado[F5]):ejecutaelcdigodelprocedimientoencurso,delahojaUserForm
activaodeunamacro.
3.Interrumpir(mtodoabreviadodeteclado[Ctrl][Pausa]):interrumpelaejecucindelprogramaencursoypasa
almodoInterrupcin.
4.Restablecer:borraelcontenidodelasvariablesyreinicializaelproyecto.
5.Alternarpuntodeinterrupcin(mtodoabreviadodeteclado[F9]):defineoeliminaunpuntodeinterrupcinen
lalneaactualelcdigoseejecutarhastaelpuntodeinterrupcin,yluegopasaralmododepuracin.
6.Pasoapasoporinstrucciones(mtodoabreviadodeteclado[F8]):ejecutaelcdigohaciendounainterrupcin
despusdecadainstruccindelprocedimientoencursoydelosprocedimientosllamados.
7. Paso a paso por procedimientos (mtodo abreviado de teclado [Mays][F8]): ejecuta el cdigo haciendo una
interrupcin despus de cada instruccin del procedimiento en curso (las instrucciones de los procedimientos
llamadosseejecutandemaneracontinua).

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

249

- 1-

8.Pasoapasoparasalir(mtodoabreviadodeteclado[Ctrl][Mays][F8]):ejecutaenformacontinualasrestantes
lneasdelprocedimientoencurso.
9.VentanaLocales:muestralosvaloresdelasvariableslocalesdelprocedimiento.
10.VentanaInmediato(mtodoabreviadodeteclado[Ctrl]G):muestralaventanaInmediato,quepermiteejecutar
unainstruccindeformainteractiva.
11.VentanaInspeccin:muestralalistadelasvariablesdeunainspeccin.
12.Inspeccinrpida(mtodoabreviadodeteclado[Mays][F9]):muestraelvalordelaexpresinseleccionada.
13. Pila de llamadas (mtodo abreviado de teclado [Ctrl] L): muestra la lista de llamadas de procedimiento cuya
ejecucinestencurso.

3.ElobjetoDebug
ElobjetoDebugpermiteenviardatosdesalidaalaventanaInmediatodurantelaejecucin.

Mtodos
Print
MuestratextoenlaventanaInmediato.
Assert
Suspendedeformacondicionallaejecucindelalneaenlaqueapareceelmtodo.
Ejemplo

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

Muestra el nombre de la hoja activa en la ventana Inmediato

Debug.Print Sh.Name
If Sh.Name = "Resumen" Then ...

ResultadoenlaventanaInmediato:

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

250

AdministracindeerroresenVBA
Cuandoseproduceunerror,VBAgeneraunerrordeejecucinqueinterrumpelaaplicacin.Otroserrorespueden
hacerqueelcdigoVBAsecomportedemaneraimprevisible.
Paraevitaresto,esposiblemanejarelerrorconlaayudadelassiguientesinstruccionesyfunciones:

OnError(instruccin)
Indicaunasecuenciadeinstruccionesqueseejecutarencasodeerror.
Sintaxis1

On Error GoTo lnea


Activalarutinadeadministracindeerroresquecomienzaenlalneaindicadaporelargumentolnea.
Elargumentolneadebeserunaetiquetaonmerodelnea.
LalneadebeperteneceralmismoprocedimientoquelainstruccinOnError.
Sielargumentolneaesunnmerodelnea,debeserobligatoriamenteelprimercarcternovacodelalnea.
Sintaxisdelarutinadeadministracindeerrores

Lnea:
instrucciones
Resume

La instruccin Resume permite continuar la ejecucin del cdigo cuando termina la rutina de administracin de
errores,esdecir,unavezresueltoelproblemaqueprodujoelerror.
HaytressintaxisdiferentesparaResume:

Resume0

reanudalaejecucindelcdigodondeelerrorseprodujo.

ResumeNext

reanudaapartirdelainstruccinquesigueinmediatamentealaquegenerelerror.

ResumeLnea

reanudaenlalneaespecificadaporelargumentoLnea.

Paraimpedirlaejecucindelcdigodeadministracindeerrorescuandonohayerrores,coloqueunainstruccinExit
Sub,ExitFunctionoExitProperty inmediatamenteantesdelarutinadeadministracindeerrores.
Sintaxis2

On Error Resume Next

Especificaque,encasodeerror,laejecucindebecontinuar.
Sintaxis3

On Error GoTo 0

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

251

- 1-

Permiteinterrumpirlaadministracindeerrorescuandoelprocedimientoesttodavaenejecucin.
Ejemplo
Esteprocedimientoseleccionacadahojaylecambiaelnombre(pormediodeuncuadrodedilogo)sucesivamente.Unarutina
deadministracindeerrorseejecutacuandoelnombreelegidoesincorrectoocorrespondeaunnombreexistente.

Sub Errores_Nombre_Hojas()
Dim oHojaTest As Worksheet
Dim sNuevoNombre As String

En caso de error, se ejecutar la rutina "AdministracionDeErrores"

On Error GoTo AdministracionDeErrores

Para cada hoja, seleccionarla y solicitar un nombre

For Each oHojaTest In Sheets


oHojaTest.Select
1

sNuevoNombre = InputBox _
(prompt:="Escriba el nombre para la hoja activa", _
Default:=oHojaTest.Name)

Sale del procedimiento si el usuario hace clic en el


botn "Cancelar" o no indica ningn nombre
If sNuevoNombre = "" Then Exit Sub
oHojaTest.Name = sNuevoNombre

Next

Desactiva la administracin de errores

On Error GoTo 0

Selecciona la primera hoja y guarda el libro

Sheets(1).Select
ActiveWorkbook.Save
Exit Sub

Rutina de administracin de errores que muestra

un mensaje y reanuda en la lnea nmero 1

AdministracionDeErrores:
MsgBox "Nombre de hoja incorrecto o existente"
Resume 1
End Sub

Error(funcin)
Devuelveunmensajequecorrespondeaunnmerodeerror.
Sintaxis

Error (Cdigo error)

Error(instruccin)
Simulalaocurrenciadeunerror.

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

252

Sintaxis

Error CdigoError

Loscdigosdeerrorpersonalizadosdebentenerunvalorsuperioraldeloscdigosdeerrorestndareinferiora65
535.

1.ElobjetoErr
ElobjetoErrcontieneinformacinquepermiteconocerelorigendeunerrordeejecucin.

Propiedades
Description
Devuelveunacadenadecaracteresquecontieneunabrevedescripcindelerror.
HelpContext
Devuelveelidentificadordecontextoasociadoauntemadeunarchivodeayuda.
HelpFile
Devuelveunacadenadecaracteresquecontienelarutadeaccesocompletadelarchivodeayuda.
LastDLLError
Devuelveuncdigodeerrordesistemaproducidoporunallamadaaunabiblioteca devnculos
dinmicos(DLL).
Number
Devuelveoestableceunvalornumricoqueespecificaelnmerodelerror.
Source
Devuelveoestableceunacadenadecaracteresqueespecificaelnombredelobjetoolaaplicacinque
generelerror.

Mtodos
Clear
BorratodaslaspropiedadesestablecidasdelobjetoErr.
Raise
Permitegenerarerroresdeejecucin.
Ejemplo

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

253

- 3-

Elsiguientecdigomuestraunmensajequebrindainformacinsobrelanaturalezadelerror.

Private Sub Workbook_SheetActivate(ByVal Sh As Object)


Dim oRng As Range

Muestra un mensaje si la hoja activada

es el resumen de ventas

On Error GoTo Error


If Sh.Name = "Resumen" Then
MsgBox "Resumen de las diferentes hojas ", vbExclamation
Set oRng = Worksheets("Enero").Range("A1:G11")
End If
On Error GoTo 0
Exit Sub

En caso de error, mostrar un mensaje con

la descripcin del error encontrado

Error:
MsgBox "Error de procedimiento: " _
& "Workbook_SheetActivate " _
& vbCr & vbCr & "en la aplicacin: " & Err.Source _
& vbCr & vbCr & "Error Nro. " & Err.Number & " : " _
& Err.Description
Resume Next
End Sub

Paraprobaresteejemplo:

EscribirelcdigoenelmduloThisWorkbook.

LlamarunahojaResumen.

PonerelcursorenlahojaResumen.

Laejecucindeestecdigo(sinoexistelahojaEnero)devuelveelsiguientecuadrodemensaje:

SilahojaEneroexiste,noseproduceningnerror.

- 4-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

254

LatecnologaAutomation
1.Presentacin
La tecnologa Automation, llamada tambin OLE (Object Linking and Embedding) u OLE Automation, permite
manipularlosobjetosdeotraaplicacindirectamente desdeExceloVBAExcel.
Para poder funcionar, Automation necesita un cliente y un servidor, llamado servidor OLE. El servidor es la
aplicacin o el componente que realiza los servicios al cliente. El cliente (tambin llamado controlador), usa estos
serviciosparamanejarlaaplicacinservidorymanipularsusobjetos.Porejemplo,siseejecutaunacombinacinde
correspondenciadeWorddesdeVBAExcel,ExceleselclienteyWordelservidorOLE.
Unabibliotecadeobjetosesunarchivo,generalmenteconextensinolb,queproveelainformacinnecesariapara
manipularlosobjetospuestosadisposicinporunservidor.SepuedeusarelExaminadordeobjetosparaexaminar
elcontenidodeunabibliotecadeobjetos.
Para tener acceso a los objetos de otra aplicacin, se debe hacer referencia a su biblioteca de objetos de la
siguientemanera:
Seleccione la opcin Referencias del men Herramientas. Aparece el cuadro de dilogo Referencias
VBAProjectcontodoslosservidoresOLEguardadosenlabasedelregistro.

Activeacontinuacinlasreferenciasdeseadas.
ElnmeroindicadoconelnombredelabibliotecadeobjetoscorrespondealaversindeMicrosoftOffice(12parala
versin 2007,14paralaversin2010,15paralaversin2013y16.0paralaversin2016).

2.UsodelatecnologaAutomation
Paramanipularlosobjetosdeotraaplicacin,procedadelasiguientemanera:
DefinaunavariableobjetoenelcdigoVBA.
Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

255

- 1-

UselasfuncionesCreateObjectoGetObjectparahacerreferenciaalobjeto.
Ejemplos
EjecutarWord

Dim oAppWord as Object


Set oAppWord = CreateObject("Word.Application")

Dim oAppWord As New Word.Application

ReferenciaaundocumentodeWordexistente

Dim oDocWord As New Word.Document


Set oDocWord = GetObject("C:\Clientes\mailing.doc")

Si hay instalada ms de una versin del mismo programa, se ejecutar la ltima versin guardada en la base de
registro.
Sinembargo,puedeprecisarlaversindelprogramaquedeseaejecutar:
Ejemplo
IniciarlaaplicacinWord2013

Dim oAppWord as Object


Set oAppWord = CreateObject("Word.Application.15")

Las siguientes secciones describen cmo manejar distintos programas de Microsoft Office usando la tecnologa
Automation.

Los objetos, colecciones, mtodos y propiedades de los modelos de objeto de Microsoft Office son numerosos.
Solamentesedescribenacontinuacinlosmsusados.

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

256

ComunicacinconWorddesdeExcel
1.ElmodelodeobjetodeWord
ExtractodelmodelodeobjetodeWord:

2.PrincipalescoleccionesdelmodelodeobjetodeWord
AddIns
ColeccindeobjetosAddInquerepresentalosmodelosycomplementosdisponiblesenWord,tantosi
estncargadosactualmentecomosinoloestn.
AutoCaptions
ColeccindeobjetosAutoCaptionquerepresentalasleyendasagregadasautomticamentecuando
esoselementosseinsertanenundocumento.
CaptionsLabels

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

257

- 1-

ColeccindeobjetosCaptionLabelquerepresentalosrtulosdelasleyendasagregadas
automticamentecuandoesoselementosseinsertanenundocumento.
COMAddIns
ColeccindeobjetosCOMAddinquerepresentanloscomplementosCOM(ComponentObjectModel),
accesiblesdesdeWord.
Dialogs
ColeccindeobjetosDialogquerepresentanloscuadrosdedilogointegradosdeWord.
Documents
ColeccindeobjetosDocumentquerepresentantodoslosarchivosabiertosactualmenteenWord.
FileConverters
ColeccindeobjetosConverterquerepresentantodoslosconversoresdearchivodisponiblespara
abriryguardararchivosdesdeWord.
Languages
ColeccindeobjetosLanguagequerepresentatodoslosidiomasdisponiblesenWordparala
comprobacindeortografaygramtica.
ListGalleries
ColeccindeobjetosListGalleryquerepresentalastresbibliotecasdemodelosdelista(convietas,
nmerosyjerarqua).
RecentFiles
ColeccindeobjetosRecentFilequerepresentalosltimosarchivosabiertosenWord.
Tasks
ColeccindeobjetosTaskquerepresentaelconjuntodeaplicacionesenejecucin.
Templates
ColeccindelosobjetosTemplatequerepresentalosmodelosactualmentedisponibles.
Windows
ColeccindeobjetosWindowquerepresentatodaslasventanasactualmentedisponiblesenWord.

3.PrincipalesobjetosdelmodelodeobjetodeWord
AutoCorrect

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

258

ObjetoquecontienelainformacinrelativaalacorreccinautomticadeWord(opciones,excepciones,
etc.).
DefaultWebOptions
ObjetoquerepresentalosatributosglobalesqueusaMicrosoftWordalguardarundocumentocomo
pginaweboalabrirunapginaweb.
EmailOptions
ObjetoquecontienelosatributosglobalesqueMicrosoftWordutilizaalcrearyeditarmensajesde
correoelectrnicoylasrespuestasaesosmensajes.
FileDialog
Objetoquerepresentaelcuadrodedilogoquelepermitirejecutaracciones conunarchivo(por
ejemplo,abrirunarchivo,guardarlo,etc.).
FontNames
Objetoquecontienelosnombresdetodaslasfuentesdisponibles.
LanguageSettings
Objetoquedevuelvelainformacindeldiccionariodesinnimos.
MailingLabel
Objetoquerepresentaaunaetiquetadecorreo.
MailMessage
ObjetoquerepresentaelmensajedecorreoelectrnicoactivosiWordessueditordeemail.
Options
RepresentalasopcionesdelaaplicacinydeldocumentodeWord.
Selection
Representalaseleccinactualdentrodeunaventanaodeunpanel.
System
Contieneinformacinsobreelsistemadesuordenador.

4.LacoleccinDocuments
LacoleccinDocumentsestformadaportodoslosobjetosDocumentabiertosenWord.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

259

- 3-

Principalesmtodos
Add
CreaunnuevodocumentoyloagregaalacoleccinDocuments.
Ejemplo:Documents.AddTemplate:="Normal"
Close
CierratodoslosdocumentosdeWordabiertos.
Ejemplo:Documents.Close
Open
AbreeldocumentoespecificadoyloagregaalacoleccinDocuments.
Ejemplo:Documents.OpenFileName:="C:\Clientes\Informe.docx", ReadOnly:=True
Save
Guardatodoslosdocumentosabiertos.
Ejemplo:Documents.Save

5.ObjetosDocument
LosobjetosDocumenthacenreferenciaaundocumentodeWord.ActiveDocumentdesignaaldocumentoactivo.

Principalesmtodos
Activate
Activaundocumentoyaabierto.
Ejemplo:Documents("Compras.docx").Activate
Close
CierraundocumentodeWordabierto.
Ejemplo:Documents("Compras.docx").CloseoActiveDocument.Close
PrintOut
Imprimeundocumentoopartedel.
Ejemplo:imprimirlastresprimeraspginasdeldocumentoactivo.
ActiveDocument.ActiveWindow.PrintOut_Range:=wdPrintFromTo, From:="1",To_="3"

- 4-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

260

PrintPreview
Muestralavistapreliminardeundocumento.
Ejemplo:ActiveDocument.PrintPreview
Range
DevuelveunobjetoRange(Selection).
Ejemplo:ActiveDocument.Range(0,50).Bold=True
Save
Guardaundocumento.
Ejemplo:ActiveDocument.Save
SaveAs
Guardaundocumentoconunnuevonombreoenotroformato.
Ejemplo:ActiveDocument.SaveAsFileName:=strDocName

Principalescolecciones
Characters
Coleccindeloscaracteresdeundocumento.
Paragraphs
Coleccindelosprrafosdeundocumento.
Tables
Coleccindelastablascontenidaseneldocumento.
Words
Coleccindelaspalabrasdeundocumento.
Ex:ActiveDocument.Words.Count

Principalesobjetos
AttachedTemplate
DevuelveunobjetoTemplatequerepresentaelmodeloasociadoaldocumentoespecificado.
DocumentTheme

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

261

- 5-

ObjetoquerepresentaeltemadeOfficeaplicadoaldocumentoespecificado.
MailMerge
Objetoquepermiteaccederalasopcionesdefusinycombinacindecorrespondencia enWord.
PageSetup
Objetoquerepresentalasopcionesdeconfiguracindepgina.
Permissions
Objetoquerepresentalasopcionesdeseguridadparaeldocumentoespecificado.
WebOptions
ObjetoquerepresentalosatributosglobalesusadosenWordparaguardarundocumentocomo
pginaweb.

6.Ejemplo
Esteejemplomuestracmoinsertaruntexto(ttulo)ypegarunatablayungrficodeExcelenunnuevodocumento
deWord.

Public Sub CopiarEnWord()


Dim oAppWord As New Word.Application
Dim oDocWord As New Word.Document

Agrega un nuevo documento

With oAppWord
.Visible = True
Set oDocWord = .Documents.Add
.Activate
End With
With oAppWord.Selection

Agrega una lnea de ttulo y le aplica un formato

.TypeText Text:="Resultado de ventas de 2014"


.HomeKey Unit:=wdLine
.EndKey Unit:=wdLine, Extend:=wdExtend
.ParagraphFormat.Alignment = wdAlignParagraphCenter
.Font.Size = 18
With .Font
.Name = "Arial"
.Size = 18
.Bold = True
.Italic = False
.SmallCaps = True
End With

Copia la tabla de Excel en el Portapapeles

Range("A1:D10").Copy

- 6-

Pega la tabla en Word con vnculo


Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

262

.EndKey Unit:=wdLine
.TypeParagraph
.TypeParagraph
.PasteSpecial Link:=True, DataType:=wdPasteOLEObject, _
Placement:=wdInLine, DisplayAsIcon:=False

Copia el grfico de Excel en el Portapapeles

ActiveSheet.ChartObjects(1).Activate
ActiveChart.ChartArea.Select
ActiveChart.ChartArea.Copy

Pega el grfico en Word

.TypeParagraph
.TypeParagraph
.Paste
End With
With oDocWord

Guarda el documento de Word en la misma

carpeta que el libro de Excel

.SaveAs ThisWorkbook.Path & "\Resultado_2014.docx",

Allowsubstitutions:=True

Vista previa del resultado en Word

.PrintPreview
End With

Reinicializa el objeto

Set oAppWord = Nothing


End Sub

ResultadoenWord2016:

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

263

- 7-

- 8-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

264

ComunicacinconAccessdesdeExcel
1.ElmodelodeobjetodeAccess
ExtractodelmodelodeobjetodeAccess:

2.PrincipalescoleccionesdelmodelodeobjetodeAccess
COMAddIns
Coleccindemacroscomplementarias(objetosCOMAddIn)registradaenAccess
Forms
Coleccindeformularios(objetosForm)abiertosactualmenteenunabasededatosdeAccess.
Modules
Coleccindemdulosestndaresymdulosdeclase(objetosModule)abiertosactualmenteenuna
basededatosdeAccess.
Printers

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

265

- 1-

ColeccindeobjetosPrinterquerepresentantodaslasimpresorasdisponiblesactualmenteenel
sistema.
References
ColeccindeobjetosReferencequerepresentanlasreferenciasVBAdeunabasededatosdeAccess.
Reports
Coleccindelistados(objetosReport)abiertosactualmenteenunabasededatosdeAccess.

3.PrincipalesobjetosdelmodelodeobjetodeAccess
DBEngine
ObjetoquerepresentaelmotordebasededatosMicrosoftJet.
DoCmd
ObjetoquepermiterealizaraccionesdeAccess,comoelcierredeventanas,laaperturadeformularios,
deinformesLamayorpartedelasaccionesdemacrossepuedenconvertirenVBAatravsdel
objetoDoCmd.
FileDialog
Objetoquerepresentauncuadrodedilogoquepermiterealizaraccionessobreunarchivo(ej.:
aperturadeunarchivo,grabacindeunarchivo).
LanguageSettings
ObjetoqueenvainformacindelosparmetrosdeidiomadeAccess.
Screen
Objetoquepermiteaccederalformulario,alestadooalcontrolqueactualmentetieneelfoco.
CurrentProject(oCodeProject)
ObjetoqueagrupavariascoleccionesdeobjetosdeAccessespecficos:
AllForms

ColeccindetodoslosformulariosdeunabasededatosdeAccess.

AllMacros

ColeccindetodaslasmacrosdeunabasededatosdeAccess.

AllModules

ColeccindetodoslosmdulosdeunabasededatosdeAccess.

AllReports

ColeccindetodoslosinformesdeunabasededatosdeAccess.

CurrentData(oCodeData)
ObjetoqueagrupavariascoleccionesdeobjetosdeAccessespecficos:

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

266

AllTables

ColeccindetodaslastablasdeunabasededatosdeAccess.

AllQueries

ColeccindetodaslasconsultasdeunabasededatosdeAccess.

4.Ejemplos
a.ListartablasdeunabasedeAccess
EsteejemplomuestracmoverlalistadetablasdelabasedeAccessNorthwind.accdb.

Sub Tablas_Access()
Dim oAppAccess As Access.Application
Dim i, j As Integer
Inicia una sesin de Microsoft Access
Set oAppAccess = CreateObject("Access.application")
Muestra la lista de tablas recorriendo

la coleccin "Alltables" del objeto "CurrentData"

With oAppAccess
.OpenCurrentDatabase (ThisWorkbook.Path & "\Northwind.accdb")
j = 2
For i = 1 To .CurrentData.AllTables.Count - 1
If Left(UCase(.CurrentData.AllTables(i).Name), 4) _
<> "MSYS" Then
Range("C" & j) = .CurrentData.AllTables(i).Name
j = j + 1
End If
Next i
End With
Sale de la aplicacin Access
oAppAccess.Quit
Reinicializa el objeto
Set oAppAccess = Nothing
End Sub

b.MostrarunatabladeAccessenExcel
ElobjetoQueryTablerepresentaunrangodedatosexterno(basededatos,pgina web,etc.)contenidaenuna
hojadeclculo.LaspropiedadesdeesteobjetoseexplicanenelcaptulodedicadoaInternet.

Sub Mostrar_Tabla()
Dim i As Integer

Borra los datos de la ltima tabla mostrada

If ActiveSheet.ListObjects.Count > 0 Then


For i = ActiveSheet.ListObjects(1).ListColumns.Count To 1 Step -1
ActiveSheet.ListObjects(1).ListColumns(i).Delete
Next i
End If

Muestra el contenido de la tabla seleccionada

haciendo una consulta en la base de datos "Northwind"


Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

267

- 3-

On Error GoTo 1:
If ActiveCell <> "" And ActiveCell.Column = 3 Then
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array( _
"OLEDB;Provider=Microsoft.ACE.OLEDB.16.0;", _
"Data Source=" & ThisWorkbook.Path & "\Northwind.accdb;", _
"Mode=Share Deny Write;Jet OLEDB:Engine Type=6"), _
Destination:=Range("$D$2")).QueryTable
.CommandType = xlCmdTable
.CommandText = Array(ActiveCell)
.RowNumbers = False
.PreserveFormatting = True
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.AdjustColumnWidth = True
.PreserveColumnInfo = True
.AdjustColumnWidth = True
.PreserveColumnInfo = True
.Refresh BackgroundQuery:=False
End With
Else
MsgBox "Debe seleccionar un nombre de tabla", vbExclamation
End If
On Error GoTo 0
Exit Sub
1:
MsgBox "La tabla seleccionada no se puede mostrar", _
vbExclamation
End Sub

ResultadoenExcel:

Enesteejemplo,losdatosimportadossepuedenactualizarentodomomentopormediodelmtodoRefreshdel
objetoListObject.

Sub Actualiza_Datos()

- 4-

Actualiza todas las consultas

de la hoja activa
Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

268

Dim oQTb As ListObject


For Each oQTb In ActiveSheet.ListObjects
If oQTb.SourceType = xlSrcQuery Then
oQTb.Refresh
End If
Next
End Sub

c.AbrirunatablaoconsultadeAccessenunnuevolibro
El mtodo OpenDatabase utilizado permite importar una tabla o el resultado de una consulta de Access en un
nuevolibrodeExcel.

Sub Abrir_Tabla()
Dim sTableName As String
Dim oWbk As Workbook
Dim sWbkName As String
Dim oFso As Object

Controla la celda seleccionada

If ActiveCell = "" Or ActiveCell.Column <> 3 Then Exit Sub

Abre la tabla seleccionada

sTableName = ActiveCell
Set oWbk = Workbooks.OpenDatabase( _
Filename:=ThisWorkbook.Path & "\Northwind.accdb", _
CommandText:=Array(sTableName), CommandType:=xlCmdTable)

Controla si el archivo de Excel ya existe

sWbkName = ThisWorkbook.Path & "\" & sTableName & ".xlsx"


If Dir(sWbkName) <> "" Then
If MsgBox("Libro " & sTableName _
& " ya existente, desea eliminarlo?", _
vbQuestion + vbYesNo) = vbYes Then
Set oFso = CreateObject("Scripting.FileSystemObject")
oFso.deletefile oWbkName
Set oFso = Nothing
Else
Exit Sub
End If
End If

Guarda y cierra el libro creado


oWbk.SaveAs sWbkName
oWbk.Close

End Sub

Losdatosimportadostambinpuedenactualizarseentodomomento.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

269

- 5-

ComunicacinconOutlookdesdeExcel
1.ObjetosdeOutlook
AppointmentItem
Objetoquerepresentaunareunin,unacitanicaobienunacitaoreuninperidicas.
ContactItem
ObjetoquerepresentauncontactoalmacenadoenunacarpetadecontactosdeOutlook.
Folder
ObjetoquerepresentaunacarpetadeOutlook.
JournalItem
ObjetoquerepresentaunaentradadeldiarioalmacenadaenunacarpetaDiario(registrodetodaslas
transaccionesrealizadasenOutlookduranteunperododado).
MailItem
Objetoquerepresentaunmensajedecorreoelectrnico(email)dentrodeunacarpetademensajes
deOutlook.
NoteItem
ObjetoquerepresentaunanotadeOutlookdentrodeunacarpetaNotas.
PostItem
Objetoquerepresentaunapublicacindeunacarpetapblicaqueotrosusuariospuedenexaminar.
TaskItem
ObjetoquerepresentaunatareaalmacenadaenlacarpetaTareasdeOutlook.

2.AccesoalosobjetosdeOutlook
a.Creacindeunobjeto(email,contacto...)enOutlook
ElmtodoCreateItemdelobjetoApplicationpermitecrearunainstanciadeunobjetoparaunmensajedecorreo
ounacita.
Ejemplo:
CreacindeunnuevocontactoenOutlook.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

270

- 1-

Sub Crea_Contacto()
Dim oAppOutlook As Outlook.Application
Dim oContacto As Outlook.ContactItem
Inicia una sesin de Microsoft Outlook
Set oAppOutlook = CreateObject("outlook.application")
Crea un nuevo contacto con un nombre y una direccin
Set oContacto = oApp Outlook.CreateItem(olContactItem)
oContacto.LastName = "PEREZ Patricia"
oContacto.MailingAddress = "pati.perez@yahoo.es"
Guarda el contacto
oContacto.Save
End Sub

b.Accesoalosobjetos(contactos,citas )deOutlook
Elmtodo GetDefaultFolder del objetoNameSpacepermiteelaccesoalconjuntodecarpetasdeOutlook.Este
mtodousaunparmetroquepermiteespecificarlacarpetaquesedeseausar.
Sintaxisdelmtodo:

expression.GetDefaultFolder(FolderType)
expression
FolderType

Variable que representa un objeto NameSpace


Constante que representa el tipo de carpeta que se devuelve:
olFolderCalendar

carpeta Calendario

olFolderContacts

carpeta Contactos

olFolderDrafts

carpeta Borrador

olFolderInbox

carpeta Bandeja de entrada

olFolderJunk

carpeta Correo no deseado

olFolderNotes

carpeta Notas

olFolderOutbox

carpeta Bandeja de salida

olFolderSentMail

carpeta Enviados

olFolderTasks

carpeta Tareas

olFolderToDo

carpeta Para hacer

ParateneraccesoalalistadeobjetoscontenidosenunacarpetadeOutlook(contactos,citas,etc.),procedadela
siguientemanera:

InicializarunavariableobjetodetipoNameSpace.

Usar el mtodo GetDefaultFolder del objeto NameSpace para tener acceso a la carpeta deseada: el mtodo
devolverunobjetoFolder.

Recorrer la coleccin Items del objeto Folder hasta llegar al conjunto de elementos de la carpeta (ciclo For...
Each).

Ejemplo:
EsteejemplodaaccesoalconjuntodereunionesenelcalendariodeOutlook.

Sub Reunion()
Dim oAppOutlook As Outlook.Application
Dim oNameSpace As Outlook.Namespace
- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

271

Dim oFolder As Outlook.Folder


Dim oItem As AppointmentItem
Abre una sesin de Microsoft Outlook
Set oAppOutlook = CreateObject("outlook.application")
Recorre las reuniones en el calendario
Set oNameSpace = oAppOutlook.GetNamespace("MAPI")
Set oFolder = oNameSpace.GetDefaultFolder(olFolderCalendar)
For Each oItem In oFolder.Items
Debug.Print oItem.Start & " " & oItem.End _
& " " & oItem.Subject
Next
End Sub

3.EjemplodeusodelobjetoMailItem
Esteejemplocreaunmensajedecorreoelectrnico(email)conundocumentodeWordcomoadjunto.

Sub Envia_Email()
Dim oAppOutlook As Outlook.Application
Dim oMail As Outlook.MailItem

Abre una sesin de Microsoft Outlook

Set oAppOutlook = CreateObject("outlook.application")

Crea un nuevo mensaje

Set oMail = oAppOutlook.CreateItem(olMailItem)


With oMail
Ttulo, Texto, Destinatarios, Adjuntos
.Subject = "RESULTADO DE VENTAS"
.Body = "Adjunto envo el documento con los resultados de
ventas del ao 2014." _
& Chr(13) & "Atentamente," & Chr(13) _
& "Equipo comercial"
.BodyFormat = olFormatHTML
To = "laura@northwindtraders.com"
To = "jaime@northwindtraders.com"
.Attachments.Add ThisWorkbook.Path & "\Resultados_2014.docx"
Enva el mensaje
.Send
End With
Cierra la aplicacin Outlook
oAppOutlook.Quit
Reinicializa el objeto
Set oAppOutlook = Nothing
End Sub

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

272

- 3-

Objetosvinculadosoincrustados
EsposiblemanipularlosobjetosvinculadosoincrustadosenExcelatravsdelacoleccinOLEObjects de objetos
OLEObject.
ElobjetoemparentadopuedeserunobjetoWorksheetounobjetoChart.
Ejemplo
ElsiguienteprocedimientomodificaeltamaoyaplicaunbordeatodoslosobjetosincrustadosenlahojadeclculoProductos.

Sub Format_OLE()
Dim ole1 As OLEObject
For Each ole1 In Worksheets("Productos").OLEObjects
With ole1
.Height = 100
.Width = 100
.Border.Color = vbRed
.Border.LineStyle = xlContinuous
.Border.Weight = xlMedium
End With
Next ole1
End Sub

1.MtodosdelobjetoOLEObject
Activate

Duplicate

Add

Item

BringToFront

Select

Copy

SendToBack

CopyPicture

UpDate

Cut

Delete

2.PropiedadesdelobjetoOLEObject
AutoLoad
Truesielobjetosecargaautomticamentecuandoseabreellibroquelocontiene.
OLEType
DevuelvexlOLELinkoxlOLEEmbed.
Application

Name

AutoUpdate

Object

Border

Parent

Bottom

Right

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

273

- 1-

- 2-

Cell

Placement

Count

PrintObject

Creator

ProgId

Enabled

ShapeRange

Height

Shadow

Index

SourceName

Interior

Top

Left

TopLeftCell

LinkedCell

Visible

ListFillRange

Width

Locked

ZOrder

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

274

MtodosypropiedadesrelativosalosvnculosconExcel
1.MtodosypropiedadesdelobjetoWorkbook
ChangeLink(mtodo)
Modificaunvnculoentredosdocumentos.

ChangeLink (NAME,NEWNAME,type)

NAME

Nombredelvnculoquesedebemodificar.

NEWNAME

Nuevonombredelvnculo.

type

Tipodevnculoquehayquedevolver:xlLinkTypeExcelLinks,xlLinkTypeOLELinks.

LinkInfo(mtodo)
Devuelveinformacinacercadelafechayelestadodeactualizacindelvnculo.

LinkInfo(NAME,LINKINFO,type,EditionRef)

NAME

Nombredelvnculo.

LINKINFO

Tipodeinformacinquehayquedevolver:(xlUpdateStateoxlEditionDate).

type

Tipo de vnculo que se debe devolver: (xlLinkInfoOLELinks, xlLinkInfoPublishers o


xllinkInfoSubscribers).
Sielvnculoesunaedicin,esteargumentoespecificalareferenciaalaedicin.

EditionRef

LinkSources(mtodo)
DevuelveunamatrizVisualBasicconlosvnculosdellibro.

LinkSources(type)

type

Tipo de vnculo que hay que devolver: xlExcelLinks, xlOLELinks, xlPublishers,


xlSubscribers.

OpenLinks(mtodo)
Abreeldocumentodeorigendeunvnculo.

OpenLinks(NAME,readonly,type)

NAME

Nombredelvnculo.

Readonly

Aperturaenmododesololectura(TrueoFalse).

type

Tipodelvnculo:(xlExcelLinks,xlOLELinks,xlPublishersoxlSubscribers).

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

275

- 1-

SaveLinkValues(propiedad)
PropiedadquedevuelveTruesiMicrosoftExcelguardalosvaloresdelosvnculosexternosconellibro.

SetLinkOnData(mtodo)
CreaunprocedimientoqueseejecutarcadavezqueseactualiceunvnculoDDE.

SetLinkOnData(NAME,PROCEDIMIENTO)

NAME

Nombredelvnculo.

PROCEDIMIENTO

Nombredelprocedimientoquesedebeejecutarcuandoseactualizaelvnculo.

UpDateLink(mtodo)
Actualizaunvnculo.

UpDateLink(NAME,type)

NAME

Nombredelvnculo.

type

Tipodevnculo(xlLinkTypeExcelLinksoxlLinkTypeOLELinks).

2.Mtodosypropiedadesdeotrosobjetos
AskToUpDateLinks(propiedaddelobjetoApplication)
PropiedadquedevuelveTruesiExcelinvitaalusuarioaactualizarlosvnculoscuandoseabrenlosarchivosquelos
contienen.

LinkSource(propiedaddelobjetoDocumentProperty)
Devuelveodefineelorigendeunapropiedaddeundocumentopersonalizadoconvnculos.

LinkToContent(propiedaddelobjetoDocumentProperty)
PropiedadquedevuelveTruesielvalordeunapropiedaddedocumentopersonalizadaestvinculadaalcontenido
deldocumentocontenedor.

ActivateMicrosoftApp(mtododelobjetoApplication)
ActivaunaaplicacindeMicrosoft.

Application.ActivateMicrosoftApp(INDEX)

INDEX

Aplicacin de Microsoft que hay que activar. Algunos ejemplos: xlMicrosoftWord,


xlMicrosoftAccess,xlMicrosoft Project,etc.

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

276

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

277

- 3-

ConsultasporInternet
ElsiguienteprocedimientoinsertaenExcelunatablaprocedentedeunsitioWeb:

Hagaclicenelbotn

situadoenelgrupoObtenerdatosexternosdelapestaaDatos.

Escribaladireccindelsitiowebdeseadoenlabarradedireccionesdelnavegador.
Seleccione las zonas que desea importar por medio del icono
tablaeliconosetransformaren

, ubicado en la parte superior de cada

Silodesea,modifiquelasopcionesdeconsultahaciendoclicenelbotnOpciones.
HagaclicenelbotndecomandoImportar.
SeleccioneeldestinodelatablaenelcuadrodedilogoImportardatosyhagaclicenAceptar.
Ejemplo:
ElsiguienteejemploimportalascotizacionesdelaBolsadeValoresdeMadrid desdeelsitiowww.bolsamadrid.es.

ResultadoenExcel:

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

278

- 1-

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

279

ElobjetoQueryTable
ElobjetoQueryTable(tabladeconsulta)representaunrangodedatosexternoscontenidoenunahojadeclculo.
Estosdatospuedenprocederdeunorigenexterno,comounabasededatosdeMicrosoftAccessoSQLServer,ode
datosextradosconunaconsultaweb.
ElobjetoQueryTablepertenecealacoleccinQueryTablesdelobjetoWorksheet.

1.PropiedadesdelobjetoQueryTable
Propiedadesdelrangodedatosexternos
Ciertaspropiedadesdelobjeto QueryTablesecorrespondenconlasopcionesdelcuadrodedilogoPropiedades
delrangodedatosexternos.
Paramostrarestecuadro:
Activeelrangodedatosexternohaciendoclicenunadesusceldas.
SeleccioneelcomandoPropiedadesdelgrupoConexionesdelapestaaDatos (ohagaclicenelbotn
derechodelratnyseleccionePropiedadesdelrangodedatosenelmencontextual).
Aparecelasiguienteventana:

N.
1.

Propiedades
Name

Valoresdevueltos
Cadenadecaracteres

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

280

- 1-

2.

SavePassword

Booleano

3.

BackgroundQuery

Booleano

4.

RefreshPeriod

Enterolargo

5.

RefreshOnFileOpen

Booleano

6.

SaveData

Booleano

7.

FileNames

Booleano

8.

RowNumbers

Booleano

9.

AdjustColumnWidth

Booleano

10.

PreserveColumnInfo

Booleano

11.

PreserveFormatting

Booleano

12.

RefreshStyle

Constantes:
xlInsertDeleteCells
xlInsertEntireRows
xlOverwriteCells

13.

FillAdjacentFormulas

Booleano

OpcionesdelasconsultasWeb
Ciertaspropiedadesdelobjeto QueryTablesecorrespondenconlasopcionesdelcuadrodedilogoOpcionesde
consultaweb.
Paramostrarestecuadrodedilogo:
Coloqueelcursorenelrangodedatosexternodelaconsultaweb.
HagaclicenelbotnderechodelratnyseleccionelaopcinModificarconsultaenelmencontextual.
HagaclicenelbotnOpciones,arribaaladerechadelcuadrodedilogoModificarconsultaweb.

N.
1.

Propiedades
WebFormatting

Valoresdevueltos
Constantes:
xlWebFormattingNone
xlWebFormattingRTF

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

281

xlWebFormattingAll
2.

WebPreFormattedTextToColumns

Booleano

3.

WebConsecutiveDelimiterAsOne

Booleano

4.

WebSingleBlockTextImport

Booleano

5.

WebDisableDateRecognition

Booleano

6.

WebDisableRedirections

Booleano

Otraspropiedadesusadasporlasconsultasweb
Connection
Cadenadecaracteres.URLdelorigendedatosweb.
Destination
ObjetoRange.Devuelvelaceldadelaesquinasuperiorizquierdadelrangodedatosexternos.
EditWebPage
Variant.URLdelapginaweb.
EnabledEditing
Booleano.Indicasielusuariopuedemodificarlaconsulta.
EnableRefresh
Booleano.Indicasielusuariopuedeactualizarlosdatosdelrangodedatosexternos.
MaintainConnection
Booleano.Indicasilaconexinalorigendedatosexternossemantienedespusdelaactualizaciny
hastaquesecierraellibro.
Name
Nombredelrangodeorigendedatosexternos.
QueryType
Constante.IndicaeltipodeconsultaqueMicrosoftExcelutilizapararellenarelorigendedatos
externos(xlWebQueryparalasconsultasweb).
ResultRange
ObjetoRange.Representaelreadelahojadeclculoocupadaporelorigendedatosexternos.
WebSelectionType

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

282

- 3-

Constante.Estableceunvalorquedeterminaqupartedelapginawebseimportar:todalapgina,
todaslastablasdelapginaosoloalgunasdeellas.
Constantes:xlWebEntirePage,xlWebAllTables,xlWebSpecifiedTables
WebTables
Cadenadecaracteres.Listadelimitada,porcomas,delosnombresonmerosdendicedelastablas
quehayqueimportar.

Mtodos
CancelRefresh
Cancelatodaslasconsultasensegundoplanodelrangodedatosexternoespecificado.
Delete
Eliminaelrangodedatosexternoespecificado.
Refresh
Actualizaelrangodedatosexterno.
ResetTimer
Restableceeltemporizadorautomticodeactualizacinutilizandoelltimointervaloestablecido
mediantelapropiedadRefreshPeriod(frecuenciadeactualizacin).
SaveAsODC
GuardaelorigendelosdatosexternoscomoarchivodeconexindedatosdeMicrosoftOffice.
(extensin.odc).Nofuncionaconlasconsultasweb.

2.Ejemplos
Creacindeunaconsultaweb
Esteprocedimientocreaunaconsultawebqueimportaunatablaespecificada.Losargumentospermitendefinir:

LaURLdelsitioweb.

Elnombredelrangodeorigendedatosexternos.

Eldestinoenellibro(objetoRange).

Elnmerodelatablaquehayqueimportar.

Sub CreateWebQuery(strURL As String, strName As String, _


oRngDesti As Range, sTable As Integer)

- 4-

Crea una consulta web

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

283

Modifica las opciones de importar y las propiedades de

la consulta

Actualiza los datos por medio del mtodo "Refresh"

With ActiveSheet.QueryTables.Add(Connection:=strURL, _
Destination:=oRngDesti)

Propiedades de la consulta

.Name = strName
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = True
.BackgroundQuery = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 30

Opciones de importar

.WebSelectionType = xlSpecifiedTables
.WebTables = sTable
.WebFormatting = xlWebFormattingAll
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False

Actualiza los datos

.Refresh BackgroundQuery:=False

Corrige los datos

Cells.Replace What:="", Replacement:="", LookAt:=xlPart, _


SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

Da formato a los datos de la columna F

Selection.NumberFormat = "#,##0"
End With
End Sub

Ejemplo

de

llamada

del

procedimiento:

importar

la

tabla

nmero

13

de

la

pgina

web

http://www.bolsamadrid.es/esp/aspx/Mercados/Precios.aspx?indice=ESI100000000enlahoja"Acciones" dellibroactivo.

Sub ImportarCotizaciones()
Dim oRng As Range
Dim sUrl As String
Dim sName As String
Dim i As Integer

Elimina las consultas existentes y borra los datos

ThisWorkBook.WorkSheets("Acciones").Select
If ActiveSheet.QueryTables.Count > 0 Then
For i = ActiveSheet.QueryTables.Count To 1 Step -1
ActiveSheet.QueryTables(i).Delete

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

284

- 5-

Range("A1:X100").Delete
Next i
End If

Llama al procedimiento CreateQueryWeb

sUrl = "URL;http://www.bolsamadrid.es/esp/aspx/Mercados/Precios.aspx?indice=ESI100000000"
sName = "accind1_1"
Set oRng = ActiveWorkbook.Worksheets("Acciones").Range("A1")
CreateWebQuery sUrl, sName, oRng, 13
End Sub

- 6-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

285

Publicacindepginasweb
Sepuedecrearunapginawebenformatohtmlapartirdeunlibro,deunahojadeclculo,deungrficoodeun
rangodeceldasyactualizarlapginaalguardarellibro.
ParapublicarunapginawebdesdedeExcel,sigaestasinstrucciones:
SeleccionelaopcinGuardardelapestaaArchivo.
DesplieguelasopcionesdelalistaTipoyseleccioneeltipodearchivoPgina web(*.htm*.html).
Haga clic en el botn Publicar para seleccionar los elementos que se van a publicar y las opciones de
publicacin(marquelasopcionesVolver a publicar automticamente cada vez que se guarde el libroy
Abrirpginaenelexploradorweb).
HagaclicotravezenelbotnPublicarparacrearlapginaweb.
Lapginasecrearyaparecerensunavegador.
EnVBA,paraasociarunelementodeunlibroaunapginaweb,sedebecrearunobjetoPublishObject(usandoel
mtodoAdddelacoleccinPublishObjects).Parapublicarlapginaweb,luegodeberusarelmtodoPublishdel
objetoPublishObject.

1.Asociacindeunelementodelibroaunapginaweb
Sintaxis

PublishObjects.Add(SourceType, FileName, Sheet, Source,


HtmlType, DivID, Title)
SolamentesonobligatorioslosargumentosSourceTypeyFileName.

PublishObjects

ExpresinquedevuelveunacoleccinPublishObjects.

SourceType

Tipo de elemento que se va a publicar (xlSourceSheet, SourceRange,


xlSourceworkbook,xlSourceChart,xlSourceQuery,xlSourcePivotTable).

Sheet

Nombredelahojadeclculoguardadacomopginaweb.

Source

Nombredelelementoquehayquepublicarsisetratadeungrfico,deuninforme
detabladinmicaodeunatabladeconsulta.

HtmlType

Indica si el elemento publicado se guarda como componente de Microsoft Office


Webinteractivoocomotextoeimgenesestticas.

DivId

Identificador nico usado en la etiqueta DIV de HTML para identificar el elemento


enlapginaweb.

Title

Ttulodelapginaweb.

2.Publicacindelapginaweb
Sintaxis

PublishObject.Publish(Create)

PublishObject

Expresin

que

devuelve

un

objeto

PublishObject

una

coleccin

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

286

- 1-

PublishObjects.
SiesteargumentotieneelvalorTrueyelarchivoHTMLyaexiste,sesustituye.

Create

ElvalorpordefectoesFalse.

3.Ejemplo
PublicacindellibroEmpleados:estelibrotienedoshojasdeclculo:Empleados yServicios.

Sub Publicar()
Dim WebPage As PublishObject

Crea un objeto para guardar una pgina web

Set WebPage = ActiveWorkbook.PublishObjects.Add _


(xlSourceWorkbook, ThisWorkbook.Path & "\Empleados.html" _
, , , xlHtmlStatic, , "LISTA DE EMPLEADOS")

Publica la pgina

With WebPage
.Publish (True)
.AutoRepublish = True
End With
End Sub

VistapreviadelapginawebEmpleados.htmlcreadaenInternetExplorer.

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

287

LosobjetosWebOptionsyDefaultWebOptions
Los objetosWebOptions yDefaultWebOptions contienen los atributos usados por Excel al guardar un documento
comopginaweb.
El objeto DefaultWebOptions contiene las opciones web por defecto de la aplicacin Excel: su contenedor es el
objeto Application. Las propiedades del objeto corresponden a los atributos accesibles al hacer clic en el botn
Opciones webdelacategoraOpcionesavanzadasdelasopcionesdeExcel.
ElobjetoWebOptionscontienelasopcioneswebdellibroespecificado:sucontenedoreselobjetoWorkbook.Las
propiedades del objeto corresponden a los atributos accesibles desde el botn Herramientas/Opciones web al
guardarunlibroenformato"Pginaweb".

CiertaspropiedadessoncomunesaambosobjetoslasdemssonespecficasalobjetoDefaultWebOptions.

1.Propiedades
a.OpcionesdelapestaaGeneral

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

288

- 1-

PropiedadesdelobjetoDefaultWebOptions

1.

SaveHiddenData

Booleano

2.

LoadPictures

Booleano

b.OpcionesdelapestaaExploradores

Propiedadescomunesaambosobjetos

1.

TargetBrowser

Constantes:
msoTargetBrowserIE4(IE5oIE6)
msoTargetBrowserV3(oV4)

2.

AllowPNG

Booleano

3.

RelyOnCSS

Booleano

4.

RelyOnVML

Booleano

PropiedadesdelobjetoDefaultWebOptions

5.

SaveNewWebPagesAsWebArchives

Booleano

c.OpcionesdelapestaaArchivos

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

289

Propiedadescomunesaambosobjetos

1.

OrganizeInFolder

Booleano

2.

UseLongFileNames

Booleano

PropiedadesdelobjetoDefaultWebOptions

3.

UpdateLinkOnSave

Booleano

4.

CheckIfOfficeIsHTMLEditor

Booleano

d.Otraspropiedades
Propiedadescomunesaambosobjetos
Encoding
Constante.Tipodecodificacinusada(correspondealaopcinseleccionadaenlalistadesplegable
delapestaaCodificacin).
FolderSuffix
Cadenadecaracteres.SufijodelarchivousadoporExcelalguardarundocumentocomopginaweb.
PixelsPerInch
Enterolargo.Densidad(cantidaddepxelesporpulgada)delasimgenesyceldasdetablasdeuna
pginaweb.
ScreenSize
Constante.Tamaomnimodepantallaptimo(anchoporalto,enpxeles)quesedebeutilizaralver

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

290

- 3-

eldocumentoconunexploradorweb(ejemplo:msoScreenSize800x600,msoScreenSize1024x
768,etc.).

PropiedadesdelobjetoDefaultWebOptions
AlwaysSaveInDefaultEncoding
Booleano.Indicasiseusalacodificacinpredeterminadaalguardarunapginaweb.

2.MtododelobjetoWebOptions
UseDefaultFolderSuffix
Estableceelsufijodecarpetaparaellibroespecificado,correspondientealidiomaquehaya
seleccionadooinstalado.

- 4-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

291

Importar,exportaryasignararchivosXML
ElmodelodeobjetodeExcelXMLpresentadoaqudescribelosnuevosobjetosquepermitencargardatosenformato
XMLenloslibrosdeExcel.

1.Colecciones
ListObjects
ColeccindelaslistasdeunahojadeclculodeExcel.EstaslistaspuedencontenerdatosXML.
ListColumns
ColeccindelascolumnasdeunalistadeExcel.
XmlMaps
ColeccindelosobjetosXMLdeunlibro.Estosobjetosseusanparacontrolarlarelacinentrelos
rangosdeceldasdeExcelyloselementosdeunesquemaXML.
XmlSchemas
ColeccindelosesquemasXMLcontenidosenunobjetoXML.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

292

- 1-

XmlNamespaces
ColeccindelosespaciosdenombresXMLincluidosenellibroespecificado.

2.MtodosdelobjetoWorkbook
XmlImport
ImportaunarchivodedatosXML.
Ejemplo:

Sub ImportXML()
Dim oMapEmpleados As XmlMap

Importa el archivo empleados.xml en la hoja activa

ActiveWorkbook.XmlImport Url:=ActiveWorkbook.Path _
& "\Empleados.xml", ImportMap:=MapEmpleados, _
Overwrite:=True, Destination:=Range("A1")
oMapEmpleados.Name = "Empleados"
End Sub

SaveAsXMLData
ExportalosdatosdeunobjetoXMLMapaunarchivoXML.
Ejemplo:

Sub ExportXML()

Exporta el XMLMap al archivo Clientes2.xml

ActiveWorkbook.SaveAsXMLData _
Filename:=ActiveWorkbook.Path & "\Clientes2.xml", _
Map:=ActiveWorkbook.XmlMaps(1)
End Sub

3.EventosdelobjetoWorkbook
AfterXmlExport
OcurredespusdeexportarunarchivoXML.
AfterXmlImport
OcurredespusdeimportarunarchivoXML.
BeforeXmlExport

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

293

OcurreantesdeexportarunarchivoXML.
BeforeXmlImport
OcurreantesdeimportarunarchivoXML.
Ejemplo:

Private Sub Workbook_AfterXmlImport(ByVal Map As XmlMap, _


ByVal IsRefresh As Boolean, ByVal Result As XlXmlImportResult)
If Result = xlXmlImportSuccess Then
MsgBox "Importacin exitosa"
Else
MsgBox "Problema con la importacin del archivo " & Map.Name
End If
End Sub
_______________________________________________________________________
Private Sub Workbook_BeforeXmlImport(ByVal Map As XmlMap, _
ByVal Url As String, ByVal IsRefresh As Boolean, Cancel As Boolean)
If MsgBox("Desea importar el archivo " & Url & "?", _
vbQuestion + vbYesNo) = vbNo Then
MsgBox "Importacin cancelada", vbExclamation
Cancel = True
End If
End Sub

4.MtodosdelobjetoXmlMap
Delete
PermitequitarunXMLMap.
Ejemplo:ActiveWorkbook.XmlMaps(1).Delete
Import
PermiteactualizarunmapeoXMLapartirdeunarchivoXML.
Ejemplo:ActiveWorkbook.XmlMaps(1).Import"C:\Empleados.xml"
Export
ExportaaunarchivodedatosXMLelcontenidodelasceldasasignadasalobjetoXmlMap
especificado.
Ejemplo:ActiveWorkbook.XmlMaps(1).Export"C:\Empleados.xml"

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

294

- 3-

ElobjetoHyperLink
ElobjetoHyperLinkrepresentaunhipervnculocontenidoenunahojadeclculo,unrangodeceldasoungrfico.
ElobjetoHyperLinkpertenecealacoleccinHyperLinksdelosobjetoscontenedoresRange,WorkbookyChart.

1.Propiedades
Address
Cadenadecaracteres.Direccindelaceldaquecontieneelhipervnculoespecificado.
EmailSubject
Cadenadecaracteres.Textodelalneadelasuntodelcorreoelectrnicodelhipervnculoespecificado
(propiedadusadaconloshipervnculosdelosmensajesdecorreoelectrnico).
Name
Cadenadecaracteres.Nombredelhipervnculo.
Range
ObjetoRange.Rangovinculadoalhipervnculo.
ScreenTip
Cadenadecaracteres.Textodelaetiquetainformativadelhipervnculoespecificado.
Shape
ObjetoShape.Formavinculadaalhipervnculoespecificado.
SubAddress
Cadenadecaracteres.Ubicacindentrodeldocumentoalaquehacereferenciaelhipervnculo.
TextToDisplay
Cadenadecaracteres.Textoquesemostrarparaelhipervnculoespecificado.
Type
Enterolargo.Tipodelhipervnculoespecificado.

2.Mtodos
AddToFavorites
AgregaunaccesodirectoalhipervnculoenlacarpetaFavoritos.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

295

- 1-

CreateNewDocument
Creaunnuevodocumentovinculadoalhipervnculoespecificado.
Delete
Eliminaelhipervnculoespecificado.
Follow
Cargaeldocumentodedestinoasociadoalhipervnculoespecificadoymuestraeldocumentoenla
aplicacinapropiada.

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

296

PresentacindelasAPI
La interfaz de programacin de Windows API (Application Programming Interface) ofrece funciones que le permiten
controlarlosaspectosmsnfimosdelsistema.PuedeextenderypersonalizarsusaplicacionesdeExcelllamandoa
funciones de Windows API desde VBA. Si bien Excel contina evolucionando y su lenguaje de programacin nativo
(VBA)integracadavezmsfuncionesdesistema,paraciertastareassedebenusarlasfuncionesAPI.
Una API es una serie de funciones que se pueden usar para trabajar con un componente, una aplicacin o un
sistema operativo. Se compone generalmente de uno o ms archivos DLL (Dynamic Link Library o biblioteca de
vnculosdinmicos).
La API ms usada es la API de Windows, que incluye las DLL que forman el sistema operativo Windows. Cada
aplicacindeWindowsinteractadirectaoindirectamenteconlaAPIdeWindows.Estogarantizauncomportamiento
coherentedetodaslasaplicacionesquefuncionanbajoWindows.
LasDLLdelaaplicacinWindowsmsusadassonlassiguientes:

Kernel32.dll

Funcionesdebajoniveldelsistemaoperativo,talescomolaadministracindememoria
yderecursos.

User32.dll

Funciones de administracin de Windows, tales como el tratamiento de mensajes,


relojes,mensycomunicacin.

GDI32.dll

Biblioteca GDI (GraphicsDeviceInterface), que contiene las funciones de salida hacia los
perifricos(grficos,contextodevisualizacinyadministracindefuentes).

Existen otras API, como por ejemplo la interfaz MAPI (Mail Application Programming Interface), que permite escribir
aplicacionesdecorreoelectrnico.
ParaobtenermsdatossobrelasfuncionesdelaAPIdeWindows,existendosfuentesdeinformacin:

El Visor de API (archivo ejecutable ApiLoad.exe, incluido en Microsoft Office 2007 Developer y en Microsoft Visual
Basic) permite mostrar las constantes, las declaraciones y los tipos de API. Los elementos seleccionados se pueden
copiar del Visor de API hacia las aplicaciones VBA. La informacin del Visor de API se almacena en archivos de texto
(win32api.txt,mapi32.txt,etc.)queluegosepuedenexportaraunabasededatosdeAccessparafacilitarlaconsulta
posterior.

LaplataformaMicrosoftSDK (SoftwareDevelopmentKit)contieneladocumentacincompletadelaAPIdeWindows
yestdisponiblegratuitamenteenelsitioMicrosoftDeveloperNetwork.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

297

- 1-

LlamaraunafuncindelaAPIdeWindows
Para llamar a una funcin de la API de Windows, se debe declarar con la instruccin Declare en la seccin
Declaracionesdeunmdulodelproyecto(generalmenteunmduloespecficodelosprocedimientosgeneralesdela
aplicacin).

1.SintaxisdelainstruccinDeclare
En las versiones de 32 bits de Visual Basic, se deben respetar las minsculas y maysculas en los nombres de
funcionesyprocedimientosdelasDLL.

[Public|Private] Declare Sub <nom_proc> Lib "<nom_DLL>"_


[Alias "<nom_alias>"] [([lista_argumentos])]
[Public|Private] Declare Function <nom_fonc> Lib "<nom_DLL>"_
[Alias "<nom_alias>"] [([lista_argumentos])] [As <type>]

nom_proc,nom_fonc

NombredelprocedimientoodelafuncinusadaenVisualBasic.

nom_DLL

NombredelaDLL.

nom_alias

NombredelprocedimientoodelafuncinenlaDLL.

lista_argumentos

[Optional][ByVal | ByRef][ParamArray] nomvariable[()][As type] (ver


captuloEllenguajeVBA).

CiertasDLLnoproveenunnombreparasusprocedimientosyfunciones,sinounnmeroordinal.Ladeclaracinde
estosprocedimientosofuncionesusalamismasintaxis,perosedebedefinirelnmeroordinalaniveldelaliascon
uncarcternumeral(#),seguidodelnmero(ejemplo:Alias"#52").

2.Pasodeargumentos
Las funciones y procedimientos de las DLL estn escritos principalmente en lenguaje C y hacen, por lo tanto,
referenciaasusintaxis.Poreso,elpasodeargumentosaunprocedimientoounafuncindeunaDLLdesdeVisual
Basicnosiempreessimple.AniveldelasDLLqueusanlasintaxisdelenguajeC,todoslosargumentossepasan
porvalor,salvolasmatrices.
LascadenasenlenguajeCseconsiderancomomatricesdecaracteres.
Ciertos argumentos de procedimientos de DLL pueden aceptar distintos tipos de datos (a semejanza de los
Variant) se deben declarar como tipo Any (ejemplo:variable As Any).Paraestetipodeargumento,VisualBasic
consideraquelmismosepasasistemticamenteporreferenciasihayquepasarloporvalor,sedebeexplicitara
niveldelallamada(ynodeladeclaracin),delprocedimientoodelafuncinconlamencinByVal.
Pordefecto,VisualBasicpasalosargumentosporreferencia.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

298

- 1-

ListadefuncionesAPIdeWindows
Esta lista incluye las funciones de la API de Windows usadas habitualmente. Los ejemplos de uso de algunas de
estasfuncionessedescribenenlasiguienteseccin.
GetWindowsDirectory
DevuelvelarutacompletadeldirectoriodeWindows.
GetSystemDirectory
DevuelvelarutacompletadeldirectoriodesistemadeWindows.
GetSystemInfo
Devuelveunaseriededatossobreelsistema.Estosdatossealmacenanenunaestructuradetipo
SYSTEM_INFO.
GetActiveWindow
Devuelveelidentificadordelaventanaactiva.
FindExecutable
Retornaelnombreylarutadelaaplicacinasociadosaunarchivo(aplicacinasociadaalaextensin
delarchivo).
FindWindow
Devuelveelidentificadordelaventanaenfuncindesunombreydelaclaseapartirdelacualse
defini.
GetPrivateProfileString
DevuelveunaopcindeunarchivoIniapartirdeunnombredeseccinydeclave.
GetTempPath
Devuelvelarutaalacarpetatemporaldelsistema.
GetUserName
Devuelveelnombredelusuario.
WNetGetUser
Devuelveelnombredelogindered.
SetFocus
Poneelfocodeentradaenlaventanareferenciadaporsuidentificador.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

299

- 1-

EjemplosdeusodefuncionesAPIdeWindows
1.RecuperareldirectorioWindows
DeclaracindelafuncinAPI:

Esta funcin API devuelve el directorio Windows


Private Declare Function GetWindowsDirectory _
Lib "kernel32" Alias "GetWindowsDirectoryA" _
(ByVal lpWindowsDir As String, _
ByVal lpWindowsHeight As Long) _
As Long

LlamadadelafuncinAPI:

Function GetWinPath() As String


Esta funcin VBA devuelve el directorio Windows
Dim StrResult As String
Dim StrProfile As String
StrResult = String(255, " ")
StrProfile = GetWindowsDirectory(StrResult, 255)
Corta la cadena al primer carcter nulo
If StrProfile <> "" Then
StrResult = Trim(StrResult)
GetWinPath = Left(StrResult, InStr(1, StrResult, vbNullChar) - 1)
Else
GetWinPath = ""
End If
End Function

2.AbrirlacalculadoradeWindows
EsteejemplopruebasilacalculadoradeWindowsestactiva,ylainiciasinoloest.
Aqu se usan dos funciones API: la primera, FindWindow, busca la ventana "Calculadora" la segunda,
FindExecutable,buscalaubicacindelarchivoCalc.exe.
DeclaracindelafuncinAPI:

Esta funcin API busca una ventana

Public Declare Function FindWindow Lib "user32" Alias _ "FindWindowA" (ByVal lpClassName As String, ByVal

lpWindowName As String) As Long

Esta funcin API busca un archivo ejecutable

Public Declare Function FindExecutable Lib "shell32.dll" _

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

300

- 1-

Alias "FindExecutableA" (ByVal lpFile As String, _


ByVal lpDirectory As String, ByVal lpResult As String) As Long

LlamaralasfuncionesAPI:

Private Function Calculadora() As Boolean


Dim strClassName As String
Dim strWindowName As String
Dim Hwnd As Long
Dim blnExe As Boolean
Dim strRepCalc As String
Dim strResult As Long

Inicializacin

Calculadora = False

Busca una ventana "Calculadora" activa

strClassName = vbNullString
strWindowName = "Calculadora"
Hwnd = FindWindow(strClassName, strWindowName)

Si no la encuentra, busca el directorio

de Calc.exe y ejecuta la aplicacin

If Hwnd = 0 Then
strRepCalc = String$(255, 0)
strResult = FindExecutable("Calc.exe", "C:\", strRepCalc)
If strResult = 0 Then
MsgBox "Aplicacin Calculadora no encontrada"
Exit Function
End If
blnExe = Shell(strRepCalc, vbNormalFocus)
If Not blnExe Then
MsgBox "No se pudo ejecutar la aplicacin"
Exit Function
End If
Else
MsgBox "La aplicacin Calculadora ya est activa"
Exit Function
End If
Calculadora = True
MsgBox "Se inici la aplicacin Calculadora"
End Function

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

301

ElobjetoFileSystemObject
ElobjetoFileSystemObjectproporcionaaccesoalsistemadearchivosdeunequipo.Permiteespecialmentebuscar,
crear,eliminarymoverarchivosocarpetas.

1.Mtodos
Mtodosrelativosalosarchivos
CopyFile
Copiaunoomsarchivosdeunlugaraotro.
CreateTextFile
CreaunnombredearchivoespecificadoydevuelveunobjetoTextStreamquesepuedeutilizarpara
leeroescribirenunarchivo.
DeleteFile
Eliminaunarchivoespecificado.
FileExists
Devuelveunvalorbooleanoqueindicasiexisteelarchivoespecificado.
MoveFile
Mueveunoomsarchivosdeunlugaraotro.
OpenTextFile
AbreelarchivoespecificadoydevuelveunobjetoTextStreamquesepuedeutilizarparaleerel
archivooagregardatos.

Mtodosrelativosalascarpetas
CopyFolder
Copiaunacarpetadeunlugaraotro.
CreateFolder
Creaunacarpeta.
DeleteFolder
Eliminaunacarpetaespecificadajuntoconsucontenido.
FolderExists
Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

302

- 1-

Devuelveunvalorbooleanoqueindicasiexistelacarpetaespecificada.
MoveFolder
Mueveunaomscarpetasdeunlugaraotro.

Mtodosrelativosalasunidadesdedisco
DriveExists
Devuelveunvalorbooleanoqueindicasiexistelaunidadespecificada.
GetDrive
DevuelveunobjetoDrivequecorrespondealaunidadparalarutaespecificada.
GetDriveName
Devuelveunacadenaquecontieneelnombredelaunidadparaunarutaespecificada.

2.Propiedades
Drives
DevuelveunacoleccinformadaporlosobjetosDrivedisponiblesenelequipolocal.

3.Ejemplo:copiadearchivosdeExcel
ElsiguienteejemplobuscatodoslosarchivosdeExcelquehayenlamismacarpetaqueellibroactivoyloscopiaen
eldirectorio"C:\ArchivosExcel".

Sub CopiaArchivos()
Dim oFso As Object
Dim strFile As String

Crea un nuevo directorio (salvo que ya exista)

Set oFso = CreateObject("Scripting.FileSystemObject")


If Not oFso.folderExists("C:\Archivos Excel") Then
oFso.createfolder ("C:\Archivos Excel")
End If

Busca los archivos de Excel y los copia en el directorio

strFile = Dir(ThisWorkbook.Path & "\*.xls*", vbNormal)


Do While strFile <> ""
oFso.copyfile ThisWorkbook.Path & "\" & strFile, "C:\Archivos Excel\"

Archivo siguiente

strFile = Dir
Loop
End Sub

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

303

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

304

- 3-

Presentacingeneral
LaaplicacindeExcelpresentadaenestecaptulopermiteadministrarpresupuestosrealizadosconExcel.
Lasprincipalesfuncionalidadesdeestaaplicacinson:

Creacindeunnuevopresupuestoapartirdeunmodelo.

Bsqueda de presupuestos en funcin de criterios (cliente, fecha), con la posibilidad de abrir o de eliminar uno o ms
presupuestos.

Creacindenuevosclientesybsquedadeclientes.

Todoslosarchivosnecesariosparalaaplicacinsedebeninstalarenelmismodirectorio.Estosarchivosseentregan
conlosejemplosdellibroysonlossiguientes:

ElarchivoquecontieneelcdigodelaaplicacindeExcel:GestPresupuesto.xlsm.

LabasededatosdeAccessqueincluyelatabladeclientesylosformulariosdebsquedaydecreacindeuncliente:
Clientes.accdb.

LaplantilladeExcelquesirvedebaseparalageneracindepresupuestos:Presupuesto.xltx.

Los presupuestos generados se presentan como archivos de Excel denominados de la siguiente manera: fecha de
creacinenlaformaAAAAMMDDyextensinxlsx(ejemplo:20130410.xlsx).Estossegeneranenunsubdirectoriode
laaplicacinquellevaelnombredelcliente.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

305

- 1-

DescripcindelaaplicacinGestPresupuesto
AlabrirelarchivoGestPresupuesto.xlsm,lapresentacingeneraldelaaplicacineslasiguiente:

Estaaplicacincomprendelossiguienteselementos:

UnacintadeOfficepersonalizadacreadaapartirdelautilidadCustomUIEditor(encontrarunadescripcindetallada
deestautilidadenelcaptuloMejoras enlainterfazdeusuario).

UnanicahojadeclculollamadaGestindepresupuestosqueconstituyelapantalladebienvenidadelaaplicacin:
ttulodelaaplicacin,menespecficodelaaplicacin.Elmdulodeclase GestPresupuestoasociadoaestahojano
contieneningncdigo.

Dos formularios, BuscarPresupuesto y NuevoPresupuesto, permiten, respectivamente, buscar y crear un nuevo


presupuesto.

Dosmdulosestndares:elmduloProcCintacontienelosprocedimientosllamadosdesdelosbotonesdecomandode
lacintaelmduloProcGenecontienelasvariablespblicasylosprocedimientosgeneralesdelaaplicacin.

Estaaplicacinnecesitaqueseseleccionenlassiguientesreferencias:

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

306

- 1-

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

307

CintadeOffice2013personalizada
1.Presentacin

La cinta personalizada est formada por la pestaa GESTIN DE PRESUPUESTOS, que contiene los siguientes
elementos:

UngrupoPRESUPUESTOSqueincluyedosbotonesdecomando:NuevopresupuestoyBuscarpresupuesto.

UngrupoCLIENTESqueincluyedosbotonesdecomando:NuevoClienteyBuscarCliente.

2.CdigoXMLdelacintapersonalizada

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

308

- 1-

MduloThisWorbook
1.Presentacin
Estemdulopermite:

ModificarlapresentacindeExcel:ocultalabarradefrmulasylosencabezadosdefilasycolumnas.

RestablecerelentornodeExcelcuandosedesactivaellibro:muestralabarradefrmulasylosencabezadosdefilas
ycolumnas.

2.CdigoVBAdelmduloThisWorkbook

Option Explicit
Dim TabMenu() As String
________________________________________________________________
Private Sub Workbook_Open()

Ruta de la aplicacin

strFolder = ThisWorkbook.Path & "\"


End Sub
Private Sub Workbook_Activate()

Oculta la barra de frmulas y los encabezados

Application.DisplayFormulaBar = False
Application.ActiveWindow.DisplayHeadings = False
End Sub
________________________________________________________________
Private Sub Workbook_Deactivate()

Muestra la barra de frmulas y los encabezados

With Application
.DisplayFormulaBar = True
.ActiveWindow.DisplayHeadings = True
End With
End Sub

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

309

- 1-

FormularioNuevoPresupuesto
1.Presentacin
Estemdulopermite:

Crear un nuevo presupuesto a partir del modelo Presupuesto.xltx y guardar el presupuesto en el subdirectorio del
cliente.

Mostrarlosdatosdelclienteenlasceldasconnombre(CodCli,Empresa,Direccin, etc.)dellibro.

Aplicarallibroeltemaseleccionadoenelformulario.

2.Listadecontroles

N.

Nombredelcontrol

Descripcin

1.

cboClient

Cuadrodelistadesplegable

2.

txtFecha

Cuadrodetexto

3.

spinDate

Permiteincrementarodecrementarlafechaenunda

4.

cboTema

Cuadrodelistadesplegable

5.

cmdCrear

Botndecomando

3.ListadeceldasconnombredelmodeloPresupuesto.xltx

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

310

- 1-

1.Presupuesto

5.Direccion

2.Contacto

6.CPostal

3.Fecha

7.Ciudad

4.Empresa

8.Pais

4.CdigoVBAdelformularioNuevoPresupuesto

Option Explicit
___________________________________________________________________
Private Sub UserForm_Initialize()

Muestra la lista de los clientes

Lista_Clientes ("NuevoPresupuesto")

Muestra los temas de Microsoft Office

Muestra_Temas_Office

Fecha por defecto

txtFecha = Format(Date, "DD/MM/YYYY")


End Sub
___________________________________________________________________
Private Sub txtDate_BeforeUpdate(ByVal Cancel As _
MSForms.ReturnBoolean)

Controla la fecha introducida

If txtFecha <> "" Then Cancel = Not Ctrl_Fecha(txtFecha)


End Sub
___________________________________________________________________
Private Sub Muestra_Temas_Office()
Dim strPath As String
Dim strfile As String

Muestra la lista de los temas de Microsoft Office

cboTheme.Clear

Ruta de acceso a los temas

strPath = Left(Application.Path, Len(Application.Path) - 9) _


& "\Document Themes 16\"
strfile = Dir(strPath & "*.thmx")

Muestra el nombre del archivo sin la extensin

Do While strfile <> ""


cboTema.AddItem Left(strfile, Len(strfile) - 5)

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

311

strfile = Dir
Loop
End Sub
___________________________________________________________________
Private Sub CmdCrear_Click()
Dim wbk As Workbook
Dim wbkName As String
Dim fso As Object
Dim strTheme As String

Controla la introduccin de datos

If cboCliente = "" Or txtFecha = "" Then


MsgBox "Cliente y fecha obligatorios", vbExclamation
Exit Sub
End If

Cierra los libros (excepto ThisWorkbook)

For Each wbk In Workbooks


If wbk.Name <> ThisWorkbook.Name Then
wbk.Close
End If
Next wbk

Comprueba que el libro no exista

wbkName = strFolder & cboCliente & "\" & Right(txtFecha, 4) & _


Mid(txtFecha, 4, 2) & Left(txtFecha, 2) & ".xlsx"
If Dir(wbkName) <> "" Then
MsgBox "El libro " & wbkName & " ya existe", vbExclamation
Exit Sub
End If

Abre un nuevo libro basado en la plantilla Presupuesto.xltx

Set wbk = Workbooks.Add(Template:=strFolder & "Presupuesto.xltx")

Crear el subdirectorio del cliente si no existe

If Dir(strFolder & cboCliente, vbDirectory) = "" Then


Set fso = CreateObject("Scripting.FileSystemObject")
fso.createfolder (strFolder & cboCliente)
End If

Guarda el libro en este directorio

wbkName = Right(txtFecha, 4) & Mid(txtFecha, 4, 2) & Left(txtFecha, 2) _


& ".xlsx"
wbk.SaveAs strFolder & cboCliente & "\" & wbkName
wbk.Activate

Asigna las celdas del libro a partir de la tabla clientes

(Procedimiento del mdulo ProcGene)

Muestra_Cliente wbk, cboCliente


wbk.ActiveSheet.Range("A9").Activate

Muestra el tema de Office seleccionado

strTheme = Left(Application.Path, Len(Application.Path) - 9) _


& "\Document Themes 16\" & cboTema & ".thmx"
wbk.ApplyTheme strTheme

Cierra el formulario

Unload Me
End Sub
________________________________________________________________
Private Sub SpinDate_SpinDown()

Da anterior

If IsDate(txtFecha) Then txtFecha = DateValue(txtFecha) - 1


End Sub

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

312

- 3-

________________________________________________________________
Private Sub SpinDate_SpinUp()

Da siguiente

If IsDate(txtFecha) Then txtFecha = DateValue(txtFecha) + 1


End Sub

Despus de ejecutar este mdulo, se habr creado un nuevo presupuesto y se muestra en Excel para que el
usuariolocomplete:

- 4-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

313

FormularioBuscarPresupuesto
1.Presentacin
Estemdulopermite:

Buscar presupuestos en funcin del cdigo de cliente o la fecha del presupuesto (si no se indica ningn criterio, se
muestrantodoslospresupuestosdisponibles).

Abriroeliminarunoomspresupuestosenlalistadepresupuestosobtenida.

2.Listadecontroles

N.

Nombredelcontrol

Descripcin

1.

cboCliente

Cuadrodelistadesplegablemodificable.

2.

cboOpe

Cuadrodelistadesplegablemodificablequecontiene
losoperadoresdecomparacin(>=o<=).

3.

txtFecha

Cuadrodetexto.

4.

cmdBuscar

Botndecomando.

5.

cmdSupr

Botndecomando.

6.

cmdAbrir

Botndecomando.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

314

- 1-

7.

lstPresup

Cuadrodelistadesplegable.

3.CdigoVBAdelformularioBuscarPresupuesto

Option Explicit
Private Sub UserForm_Initialize()

Operador para el campo Fecha

cboOpe.AddItem ">="
cboOpe.AddItem "<="

Permite seleccionar varios presupuestos

lstPresupuestos.MultiSelect = fmMultiSelectMulti

Casilla de verificacin para seleccionar los presupuestos

lstPresupuestos.ListStyle = fmListStyleOption

Muestra los clientes en la lista desplegable

Lista_Clientes ("BuscaPresupuesto")
End Sub
_________________________________________________________________________
Private Sub txtFecha_BeforeUpdate _
(ByVal Cancel As MSForms.ReturnBoolean)
Controla la fecha introducida
If txtFecha <> "" Then Cancel = Not Ctrl_Fecha(txtFecha)
End Sub
_________________________________________________________________________
Private Sub CmdAbrir_Click()
Dim wbk As Workbook
Dim sPath As String
Abrir los presupuestos seleccionados
On Error GoTo Err:
For j = 0 To lstPresupuestos.ListCount - 1
If lstPresupuestos.Selected(j) Then

Ruta del presupuesto

sPath = ThisWorkbook.Path & "\" & lstPresupuestos.List(j, 0) _


& "\" & Format(DateValue(lstPresupuestos.List(j, 1)), "YYYYMMDD")
Set wbk = Workbooks.Open(sPath)
wbk.Activate
End If
Next j
On Error GoTo 0
Unload Me
Exit Sub
Err:
No se pueden abrir dos presupuestos con el mismo nombre
en la misma aplicacin de Excel
If Err.Number = 1004 Then
MsgBox Err.Description
End If
Resume Next
End Sub
_________________________________________________________________________
Private Sub cmdBuscar_Click()
Dim strCli As String

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

315

Dim i As Integer
Modifica el puntero del ratn
Application.Cursor = xlWait
Controla los datos introducidos
If (cboOpe <> "" And txtFecha = "") _
Or (cboOpe = "" And txtFecha <> "") Then
MsgBox "Debe introducir un operador y una fecha", vbExclamation
Exit Sub
End If
Muestra los presupuestos de un cliente o de todos los clientes
lstPresupuestos.Clear
If cboCliente = "" Then
For i = 0 To cboCliente.ListCount - 1
strCli = cboCliente.List(i)
MuestraPresupuestos (strCli)
Next i
Else
MuestraPresupuestos (cboCliente)
End If
Modifica el puntero del ratn
Application.Cursor = xlDefault
End Sub
_________________________________________________________________________
Private Sub MuestraPresupuestos(strCli As String)
Dim strRep As String
Dim strPresupuestos As String
Muestra la lista de presupuestos de un cliente
strRep = ThisWorkbook.Path & "\" & strCli & "\"
strPresupuestos = Dir(strRep & "*.*")
Do While strPresupuestos <> ""
If Ctrl_Presupuestos(strPresupuestos) Then
lstPresupuestos.AddItem strCli
lstPresupuestos.List(lstPresupuestos.ListCount - 1, 1) =
FechaPresupuesto(Left(strPresupuestos, 8))
i = i + 1
End If
strPresupuestos = Dir
Loop
End Sub
Function FechaPresupuesto(zPresupuesto)

Transforma el nmero de presupuesto en fecha

FechaPresupuesto = Right(zPresupuesto, 2) & "/" & Mid(zPresupuesto, 5, 2) _


& "/" & Left(zPresupuesto, 4)
End Function
__________________________________________________________________________
Private Function Ctrl_Presupuestos(strFileName As String) As Boolean
Dim dte
Controla la fecha del presupuesto
Ctrl_Presupuestos = False
If cboOpe <> "" And txtFecha <> "" Then
strFileName = Left(strFileName, Len(strFileName) - 5)
dte = Right(strFileName, 2) & "/" _
& Mid(strFileName, 5, 2) & "/" & Left(strFileName, 4)

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

316

- 3-

If Not IsDate(dte) Then Exit Function


If cboOpe = ">=" And DateValue(dte) < DateValue(txtFecha) _
Then Exit Function
If cboOpe = "<=" And DateValue(dte) > DateValue(txtFecha) _
Then Exit Function
End If
Ctrl_Presupuestos = True
End Function
__________________________________________________________________________
Private Sub cmdEliminar_Click()
Dim strLista As String
Dim fso As Object
Dim strfile As String

Muestra los presupuestos seleccionados

For i = 0 To lstPresupuestos.ListCount - 1
If lstPresupuestos.Selected(i) Then
strLista = strLista & vbCr _
& lstPresupuestos.List(i, 0) & " de " & lstPresupuestos.List(i, 1)
End If
Next i

Eliminar los presupuestos seleccionados despus de pedir confirmacin

If MsgBox("Quiere eliminar los siguientes presupuestos? " & strLista, _


vbQuestion & vbYesNo) = vbYes Then
Set fso = CreateObject("Scripting.FileSystemObject")
For i = 0 To lstPresupuestos.ListCount - 1
If lstPresupuestos.Selected(i) Then
strfile = ThisWorkbook.Path & "\" & lstPresupuestos.List(i, 0) _
& "\" & Format(DateValue(lstPresupuestos.List(i, 1)), "YYYYMMDD")
& ".XLSX"
fso.Deletefile strfile
End If
Next i
End If
Vuelve a actualizar la lista de presupuestos
cmdBuscar_Click
End Sub

- 4-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

317

MdulosProcCintayProcGene
1.CdigoVBAdelmduloProcCinta

Option Explicit
________________________________________________________________________
Variables de mdulos
Dim blnAccess As Boolean
Dim appAccess As Access.Application
________________________________________________________________________
Sub Aadir_cliente(control As IRibbonControl)

Abre Access si no lo est y abre el formulario

de introduccin de clientes en modo aadir

If AccessActivo Then
appAccess.DoCmd.OpenForm "Ficha_Cliente"
appAccess.DoCmd.GoToRecord , "", acNewRec
Application.ActivateMicrosoftApp xlMicrosoftAccess
Else
MsgBox "No se puede acceder a Access", vbExclamation
End If
End Sub
________________________________________________________________________
Sub Buscar_Cliente(control As IRibbonControl)

Abre Access si no lo est y abre el formulario

de introduccin de clientes

If AccessActivo Then
appAccess.DoCmd.OpenForm "Ficha_Cliente"
Application.ActivateMicrosoftApp xlMicrosoftAccess
Else
MsgBox "No se puede acceder a Access", vbExclamation
End If
End Sub
________________________________________________________________________
Private Function AccessActivo() As Boolean

Comprueba si se ha abierto Access

On Error GoTo Err:


If blnAccess Then

Comprueba si la base de datos Clientes est abierta

Else

Ejecuta Access y abre la base Clientes.accdb

ejecutaAccess:
On Error GoTo Err2:
Set appAccess = CreateObject("Access.application")
appAccess.OpenCurrentDatabase (ThisWorkbook.Path & "\Clientes.accdb")
appAccess.Visible = True
blnAccess = True
End If
AccessActivo = True
Exit Function
Err:
blnAccess = False
GoTo ejecutaAccess:
Exit Function
Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

318

- 1-

Err2:
AccessActivo = False
End Function
________________________________________________________________________
Sub Nuevo_Presupuesto(control As IRibbonControl)

Muestra el formulario de entrada de presupuestos

NuevoPresupuesto.Show
End Sub
________________________________________________________________________
Sub Buscar_Presupuesto(control As IRibbonControl)

Muestra el formulario de bsqueda de presupuestos

BuscaPresupuesto.Show
End Sub
________________________________________________________________________

2.CdigoVBAdelmduloProcGene

Option Explicit
___________________________________________________________________
Variables pblicas
Public i As Integer
Public j As Integer
Directorio de la aplicacin
Public strFolder As String
Objetos ADO
Private cnnCli As ADODB.Connection
Private rstCli As ADODB.Recordset
___________________________________________________________________
Public Sub Lista_Clientes(FormName As String)
Apertura de la base Clientes.accdb
If Not AbreBase Then Exit Sub
Apertura de la tabla Clientes
Set rstCli = New ADODB.Recordset
With rstCli
.ActiveConnection = cnnCli
.CursorType = adOpenForwardOnly
.LockType = adLockOptimistic
.Open ("Clientes")
End With
Muestra la lista de clientes extrados de la tabla
Clientes de la base de Access Clientes.accdb
Do While Not rstCli.EOF
Select Case UCase(FormName)
Case "BUSCAPRESUPUESTO"
BuscaPresupuesto.cboCliente.AddItem rstCli("Sociedad")
Case "NUEVOPRESUPUESTO"
NuevoPresupuesto.cboCliente.AddItem rstCli("Sociedad")
End Select
rstCli.MoveNext
Loop
Cierre de los objetos de Access
rstCli.Close
- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

319

cnnCli.Close
End Sub
___________________________________________________________________
Public Sub Muestra_Cliente(wbk As Workbook, strCli As String)
Apertura de la base Clientes.accdb
If Not AbreBase Then Exit Sub
Apertura de la tabla Clientes
Set rstCli = New ADODB.Recordset
With rstCli
.ActiveConnection = cnnCli
.CursorType = adOpenForwardOnly
.LockType = adLockOptimistic
.Open ("SELECT * FROM Clientes WHERE Sociedad = " & strCli & "")
End With
Muestra datos del cliente en las celdas
del libro Presupuestos
If Not rstCli.EOF Then
With wbk.Sheets(1)
.Range("PRESUPUESTO") = Left(wbk.Name, Len(wbk.Name) - 4)
.Range("FECHA") = NuevoPresupuesto.txtFecha
.Range("PRESUPUESTO") = Left(wbk.Name, Len(wbk.Name) - 4)
.Range("SOCIEDAD") = rstCli("Sociedad")
.Range("DIRECCION") = rstCli("Direccion")
.Range("CPOSTAL") = rstCli("Codigo Postal")
.Range("CIUDAD") = rstCli("Ciudad")
.Range("PAIS") = UCase(rstCli("Pais"))
.Range("CONTACTO") = UCase(rstCli("Apellido")) & " " & UCase(rstCli("Nombre"))
End With
End If
Cierre de los objetos de Access
rstCli.Close
cnnCli.Close
Set rstCli = Nothing
Set cnnCli = Nothing
End Sub
___________________________________________________________________
Public Function AbreBase() As Boolean
Apertura de la base Clientes.accdb
On Error GoTo Err:
Set cnnCli = New ADODB.Connection
With cnnCli
.Provider = "Microsoft.ACE.OLEDB.16.0"
.Open ThisWorkbook.Path & "\Clientes.accdb"
End With
On Error GoTo 0
AbreBase = True
Exit Function
Err:
On Error GoTo 0
AbreBase = False
MsgBox "Problema en la apertura de la base Clientes.accdb", _
vbExclamation
End Function
___________________________________________________________________
Function Ctrl_Fecha(zFecha As control) As Boolean
Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

320

- 3-

Control de la fecha

If zFecha <> "" Then

Sustituye los . por /

zFecha = Replace(zFecha, ".", "/")


If IsDate(zFecha) Then
zFecha = Format(DateValue(zFecha), "DD/MM/YYYY")
Ctrl_Fecha = True
Else
MsgBox "Debe introducir una fecha en formato DD/MM/AAAA", _
vbExclamation
Ctrl_Fecha = False
End If
End If
End Function

- 4-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

321

Listadeinstrucciones
1.Cadenasdecaracteres
LSet
Alineaalaizquierdaunacadenadecaracteresdentrodeunavariabletipocadena.
Mid
Reemplazaunacantidadespecificadadecaracteresdentrodeunavariablecadenaporloscaracteres
extradosdeotracadena.
RSet
Alineaaladerechaunacadenadecaracteresdentrodeunavariabletipocadena.

2.FechaHora/Matemticas
Date
Devuelvelafechadelsistemaencurso.
Randomize
Inicializaelgeneradordenmerosaleatorios.
Time
Devuelvelahoradelsistema.

3.Declaracin
Const
Declaralasconstantesquehayqueutilizarenlugardevaloresfijos.
Declare
Seutilizaaniveldemduloparadeclararlasreferenciasaprocedimientosexternosenunabiblioteca
DLLounrecursodecdigoMacintosh.
DefType
DefinelostiposdedatospordefectodelasvariablesyvaloresdevueltosporprocedimientosFunction
cuyosnombrescomienzanconloscaracteresespecificados(DefBool, DefInt, ..., DefStr).
Dim

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

322

- 1-

Declaravariablesylesreservaespaciodealmacenamientoenlamemoria.
Enum
Declarauntipoparaunaenumeracin.
Event
Declarauneventodefinidoporelusuario.
Function
Declaraelnombre,losargumentosyelcdigoqueformaelcuerpodeunprocedimientoFunction.
Let
Asignaelvalordeunaexpresinaunavariableoaunapropiedad(equivalealsigno=).
OptionBase
Defineelmenorvalordelndiceparalasmatrices:0o1.
OptionCompare
Defineelmododecomparacindecadenas:BinaryoText.
OptionExplicit
Obligaladeclaracinexplcitadetodaslasvariablesdelmdulo.
OptionPrivateModule
Declaraelmdulocompletocomoprivado.
Private
Declaralasvariablesprivadasyreservasuespaciodealmacenamientoenlamemoria.
PropertyGet
Declaraelnombre,losargumentosyelcdigodeunprocedimientoProperty quepermiteleerelvalor
deunapropiedad.
PropertyLet
Declaraelnombre,losargumentosyelcdigodeunprocedimientoProperty queleasignaunvalora
unapropiedad.
PropertySet
Declaraelnombre,losargumentosyelcdigodeunprocedimientoProperty queasignauna
referenciaaunobjeto.
- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

323

Public
Declaralasvariablespblicasylesreservaespaciodealmacenamientoenlamemoria.
ReDim
Dimensionavariablesdetipotabladinmicaylesreservaespaciodealmacenamientoenlamemoria.
Set
Asignaunareferenciaaunobjeto.
Static
Definelasvariablesestticasylesreservaespaciodealmacenamientoenlamemoria.
Sub
Declaraelnombre,losargumentosyelcdigodeunprocedimientoSub.
Type
Defineuntipodedatosdefinidoporelusuario.

4.Error
Error
Simulalaocurrenciadeunerror.
OnError
Activaunarutinadetratamientodeerroresyespecificasuubicacindentrodeunprocedimiento.
Tambinpermitedesactivarunarutinadetratamientodeerrores.
Resume
Restablecelaejecucindelcdigocuandoterminaunarutinadetratamientodeerrores.

5.Archivo
Close
Finalizalasoperacionesdeentradaysalidaenunarchivoabiertoconlainstruccin Open.
FileCopy
Copiaunarchivo.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

324

- 3-

Get
Leelosdatosdeunarchivoabiertoylosguardaenunavariable.
Input#
Leelosdatosapartirdeunarchivosecuencialabiertoylosasignaavariables.
Kill
Eliminalosarchivosdeldisco.
LineInput#
Leeunalneadedatosapartirdeunarchivosecuencialabiertoylaasignaaunavariabledetipo
cadena.
Lock...Unlock
Controlaelaccesoporpartedeotrosprocesosatodoopartedeunarchivoabiertomediantela
instruccinOpen.
Open
Permiteejecutarunaoperacindeentradaysalidaenunarchivo.
Print#
Escribelosdatosconformatoenunarchivosecuencial.
Put
Escribeelcontenidodeunavariableenunarchivodedisco.
Reset
CierratodoslosarchivosdediscosabiertosconlainstruccinOpen.
Seek
DefinelaposicindelaprximalecturayescrituraenunarchivoabiertoconlainstruccinOpen.
SetAttr
Definelosatributosdeunarchivo.
Width#
AsignalalongituddelalneadesalidaaunarchivoabiertoconlainstruccinOpen.
Write#

- 4-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

325

Escribedatosenunarchivosecuencial.
Ejemplo
ElsiguienteprocesopermiteleerunarchivodetextoeimportarlosvaloresenceldasdeExcel.

Sub ImportaArchivoTexto()
Dim oSht As Worksheet
Dim sNomArchivo As String
Dim iNumArchivo As Integer
Dim sLinea As String
Dim Tabla() As String
Dim iRow As Long
Dim iCol As Long
Dim i As Long

Archivo import existe?

sNomArchivo = ThisWorkbook.Path & "\Clientes.txt"


If Dir(sNomArchivo, vbNormal) = "" Then
MsgBox "Archivo " &sNomArchivo & " inexistente"
Exit Sub
End If

Hoja de destino

Set oSht = ThisWorkbook.Sheets(1)


oSht.Cells.Clear

Apertura de archivo de texto

iNumArchivo = FreeFile
iRow = 1
Open sNomArchivo For Input As #iNumArchivo

Recorre las lneas del archivo de texto

Do While Not EOF(iNumArchivo)


iCol = 1
Line Input #iNumArchivo, sLinea
Tabla = Split(sLinea, ";")

Copia los campos de la lnea en las celdas de Excel

For i = LBound(Tabla) To UBound(Tabla)


oSht.Cells(iRow, iCol) = Replace(Tabla(i), Chr(34), "")
iCol = iCol + 1
Next
iRow = iRow + 1
Loop
Close #iNumArchivo
End Sub

ElsiguienteprocedimientopermitecrearunarchivodetextoyescribirlosdatosdelasceldasdeExcel.

Sub ExportaArchivoTexto()
Dim oSht As Worksheet

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

326

- 5-

Dim sNomArchivo As String


Dim iNumArchivo As Integer
Dim sLinea As String
Dim oRngExport As Range
Dim iNbRows As Long
Dim iNbCols As Long
Dim i, j As Integer
Dim vCelda As Variant

Archivo Export existe?

sNomArchivo = ThisWorkbook.Path & "\Clientes.txt"


If Dir(sNomArchivo, vbNormal) <> "" Then
Kill sNomArchivo
End If

Seleccin de celdas de Excel

Set oSht = ThisWorkbook.Sheets(1)


oSht.Range("A1").CurrentRegion.Select
Set oRngExport = Application.Selection
iNbRows = oRngExport.Rows.Count
iNbCols = oRngExport.Columns.Count

Creacin del archivo de texto

iNumArchivo = FreeFile
Open sNomArchivo For Output As #iNumArchivo

Recorre las lneas y columnas de la hoja

For i = 1 To iNbRows
For j = 1 To iNbCols
vCelda = Trim(oRngExport.Cells(i, j).Value)
If IsNumeric (vCelda) Then vCelda = Val(vCelda)
If IsEmpty(oRngExport.Cells(i, j).Value) Then
vCelda = Chr(32)
End If

Escritura en el archivo de texto

If j = iNbCols Then
sLinea = sLinea & vCell
Write #iNumArchivo, sLinea
sLinea = ""
Else
sLinea = sLinea & vCelda & ";"
End If
Next j
Next i
Close #1
End Sub

6.Estructuracin
Call
TransfiereelcontrolaunprocedimientoSub,Function,DLLoaunprocedimientoderecursosde

- 6-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

327

cdigoMacintosh.
Do...Loop
Repiteunbloquedeinstruccionesmientrassecumpleunacondicinohastaquelacondicinsehace
verdadera.
End
Terminaunprocedimientoounbloque.
Exit
SaledeunbloquedecdigoDo...Loop,For...Next,Function,SuboProperty.
ForEach...Next
Repiteungrupodeinstruccionesparacadaelementodeunamatrizodeunacoleccin.
For...Next
Repiteunbloquedeinstruccionesundeterminadonmerodeveces.
GoTo
Realizaunabifurcacinincondicionalhaciaunalneadeterminadadeunprocedimiento.
GoSub...Return
Realizaunabifurcacinhaciaunasubrutinadentrodeunprocedimientoyluegoretornaalainstruccin
inmediatamenteposterioralabifurcacin.
OnGoSubyOnGoTo
Realizaunabifurcacinhaciaunadelaslneasespecificadas,segnelvalordeunaexpresindada.
Rem
Permitelaentradadecomentarios(equivalealapstrofo).
SelectCase
Ejecutaunoomsgruposdeinstruccionessegnelvalordeunaexpresindada.
Stop
Interrumpelaejecucindeunprocedimiento.
If...Then...,ElseIf...yElse...EndIf
Permitelaejecucincondicionaldeungrupodeinstruccionessegnelresultado deunaexpresin
dada.
Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

328

- 7-

While...Wend
Ejecutaunaseriedeinstruccionesmientrassecumplaunacondicindada.
With
Ejecutaunaseriedeinstruccionessobreunnicoobjetoountipodefinidoporelusuario.

7.Sistema
Beep
Emiteunasealsonora.
ChDir
Cambiaeldirectorioolacarpetaactual.
ChDrive
Cambialaunidaddediscoactual.
MkDir
Creaunnuevodirectorioonuevacarpeta.
Name
Modificaelnombredeunarchivo,deundirectorioodeunacarpeta.
RmDir
Eliminaundirectorioounacarpetaexistente.

8.Diversas
AppActivate
Activaunaventanadeaplicacin.
DeleteSetting
EliminaelvalordeunaseccinodeunaclaveenlabasederegistrodeWindows.
Erase
Reinicialoselementosdematricesdetamaofijoyliberaelespaciodealmacenamientoasignadoa
matricesdinmicas.

- 8-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

329

Implements
Especificaunainterfazounaclasequeseimplementarenelmdulodeclasedondeaparece.
Load
Cargaunobjetoperonolomuestra.
RaiseEvent
Eliminauneventodeclaradoenelniveldemdulodentrodeunaclase,formularioodocumento.
SaveSetting
GuardaocreaunaentradaparaunaaplicacinenlabasederegistrodeWindows.
SendKeys
Envaunaomspulsacionesdeteclasalaventanaactiva,comosisehubieranpresionadodesdeel
teclado.NodisponibleenMacintosh.
Unload
Eliminaunobjetodelamemoria.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

330

- 9-

Listadefunciones
Lasfuncionescuyonombreterminaconelsigno$devuelvenvaloresenvariablesdetipoString,ynodetipoVariant.

1.Conversiones
CBool
ConvierteunaexpresinadatosdetipoBoolean.
CByte
ConvierteunaexpresinadatosdetipoByte.
CCur
ConvierteunaexpresinadatosdetipoCurrency.
CDate
ConvierteunaexpresinadatosdetipoDate.
CDbl
ConvierteunaexpresinadatosdetipoDouble(dobleprecisin).
CDec
ConvierteunaexpresinadatosdetipoDecimal.
CInt
ConvierteunaexpresinadatosdetipoInteger(nombreentero).
CLng
ConvierteunaexpresinadatosdetipoLong(enterolargo).
CSng
ConvierteunaexpresinadatosdetipoSingle(simpleprecisin).
CStr
ConvierteunaexpresinadatosdetipoString.
CVar
ConvierteunaexpresinadatosdetipoVariant.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

331

- 1-

CVErr
DevuelveuntipoVariantdeunsubtipoErrorquecontieneunnmerodeerrorespecificadoporel
usuario.
Format,Format$
Aplicaunformatoaunaexpresinsegnlasinstruccionescontenidasenunaexpresindetipo
formato.
FormatCurrency
DevuelveunaexpresinconformatoenformadevalordetipoCurrencyusandoelsmbolomonetario
definidoenelpaneldecontroldelsistema.
FormatDateTime
Devuelveunaexpresinconformatodefechauhora.
FormatNumber
Devuelveunaexpresinconformatodenmero.
FormatPercent
Devuelveunaexpresinconformatodeporcentaje(multiplicadopor100)conelcarcter%alfinal.
Hex,Hex$
Devuelveunacadenadecaracteresquerepresentaelvalordeunnmeroescritoenforma
hexadecimal.
Oct,Oct$
Devuelveunacadenaquerepresentaelvaloroctaldeunnmero.
QBColor
DevuelveunvalorqueindicaelcdigodecolorRGBcorrespondientealnmerodecolorindicado.
RGB
DevuelveunnmeroenteroquerepresentaelvalordeuncolorRGB.
Str,Str$
Devuelveunacadenadecaracteresquerepresentaelnmeroespecificado.
StrConv
Devuelveunvalorconvertidoalformatoindicado.

- 2-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

332

Val
Devuelveelvalornumricocontenidoenunacadenadecaracteres.

2.Cadenasdecaracteres
Asc
Devuelveelcdigodecarctercorrespondientealprimercarcterdeunacadena.
Chr,Chr$
Devuelveelcarctercorrespondientealcdigodecarcterespecificado.
InStr
Devuelvelaposicindelaprimeraocurrenciadeunacadenadentrodeotracadena.
InStrRev
Devuelvelaposicindelaocurrenciadeunacadenadentrodeotra,apartirdelfindelacadena.
LCase,LCase$
Devuelveunacadenaconsuscaracterespasadosaminsculas.
Left,Left$
Devuelveunnmeroespecificadodecaracteresdeunacadena,comenzandodesdelaizquierda.
Len
Devuelvelacantidaddecaracterescontenidosenunacadenaolacantidaddebytesnecesariospara
almacenarunavariable.
LTrim,LTrim$
Devuelveunacopiadeunacadenaeliminandolosespaciosalaizquierda.
Mid,Mid$
Devuelveunnmeroespecificadodecaracteresextradosdeunacadenadecaracteres.
Replace
Devuelveunacadenaenlaqueunasubcadenaespecificadasereemplazaporotrasubcadena.
Right,Right$
Devuelveunnmeroespecificadodecaracteresdeunacadena,comenzandodesdeladerecha.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

333

- 3-

RTrim,RTrim$
Devuelveunacopiadeunacadenaeliminandolosespaciosaladerecha.
Space,Space$
Devuelveunacadenaformadaporunnmerodeespaciosespecificado.
StrComp
Devuelveunvalorqueindicaelresultadodelacomparacindecadenas.
String,String$
Creaunacadenaconstituidaporunacadenadecaracteresqueserepiteconlalongitudespecificada.
StrReverse
Devuelveunacadenaquecontienelosmismoscaracteresquelacadenadada, peroenordeninverso.
Trim,Trim$
Devuelveunacopiadeunacadenaeliminandolosespaciosalaizquierdayaladerecha.
UCase,UCase$
Devuelveunacadenaconsuscaracterespasadosamaysculas.
Ejemplo
Esteprocedimientopermiteasignaruncdigodeidentificacinsegnelsexo,apellidoynombreyelaodenacimiento.

Sub CalculaIdentificador()
Dim i As Integer
Dim codigo As String
Recorre las filas de la hoja
i = 2

- 4-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

334

With ThisWorkbook.Sheets(1)
Do While .Cells(i, 2) <> ""
cdigo 1 o 2 segn el sexo
seguido de las tres primeras letras del apellido en maysculas,
ms la inicial del nombre y el ao de nacimiento
If .Cells(i, 2) = "F" Then
codigo = "2-"
Else
codigo = "1-"
End If
codigo = codigo & UCase(Left(.Cells(i, 3), 3) & "-" _
& UCase(Left(.Cells(i, 4), 1)) & "-" _
& Right(.Cells(i, 5), 4))
.Cells(i, 1) = codigo
i = i + 1
Loop
End With
End Sub

3.Matemticas
Lasfuncionesmatemticassellamanfuncionesintrnsecas.
Abs
Devuelveelvalorabsolutodeunnmero.
Atn
Devuelveelarcotangentedeunnmero.
Cos
Devuelveelcosenodeunngulo.
Exp
Devuelvee(labasedeloslogaritmosneperianos),elevadoaunapotenciadada.
Fix
Devuelvelaparteenteradeunnmero.
Int
Devuelvelaparteenteradeunnmero.LadiferenciaconlafuncinFixconsisteenque,sielvalordel
argumento"nmero"esnegativo,Intdevuelveelprimerenteronegativomenoroigualalargumento,
mientrasqueFixdevuelveelprimerenteronegativomayoroigualalargumento.
Log

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

335

- 5-

Devuelveellogaritmoneperianodeunnmero.
Rnd
Devuelveunnmeroaleatorio.
Round
Devuelveunnmeroredondeadoaunacantidadespecificadadeposicionesdecimales.
Sgn
Devuelveunnmeroenteroqueindicaelsignodelargumento.
Sin
Devuelveelsenodeunngulo.
Sqr
Devuelvelarazcuadradadeunnmero.
Tan
Devuelvelatangentedeunngulo.
Ejemplo

Sub FctsCalculos()
Diferencia entre Int y Fix
nb1 = -125.45
Muestra -126
MsgBox Int(nb1)
Muestra -125
MsgBox Fix(nb1)
Devuelve un nmero aleatorio comprendido entre 1 y 49
nb2 = Int(49*Rnd)+1
MsgBox nb2
End Sub

Otrasfunciones,sibiennosonintrnsecas,sepuedenobtenerapartirdefuncionesintrnsecas.
Algunosejemplos:
Secante=1/Cos(X).
Cosecante=1/Sin(X).
Cotangente=1/Tan(X).

- 6-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

336

4.Financieras
DDB
Devuelveunvalorqueindicalaamortizacindeunbienalolargodeunperodoespecificado(utilizael
mtododeamortizacindecrecienteatasadobleuotromtodoprecisado).
FV
Devuelveunvalorqueindicaelimportefuturodeunaanualidadbasadaenpagosconstantesy
peridicosyconunatasadeintersfija.
IPmt
Devuelveunvalorqueindicaelimporte,paraunperododado,deunaanualidadbasadaenpagos
constantesyperidicosyconunatasadeintersfija.
IRR
Devuelveunvalorqueindicalatasainternaderetornodeunaseriedemovimientosdefondos
peridicos(pagosycobros).
MIRR
Devuelveunvalorqueindicalatasainternaderetornomodificadadeunaseriedemovimientosde
fondosperidicos(pagosycobros).
NPer
Devuelveunvalorqueindicalacantidaddeperodosdeunaanualidadbasadaenmovimientos
constantesyperidicosyconunatasadeintersfija.
NPV
Devuelveunvalorqueindicaelvaloractualnetodeunainversin,calculadaenfuncindeunaseriede
movimientosdefondosperidicos(pagosycobros)ysegnunatasadedescuento.
Pmt
Devuelveunvalorqueindicaelimportedeunaanualidadbasadaenmovimientosconstantesy
peridicosyconunatasadeintersfija.
PPmt
Devuelveunvalorqueindicaelreembolsocorrespondienteaunperododeterminadodeuna
anualidadbasadaenpagosperidicosyconstantesconunatasadeintersfija.
PV
Devuelveunvalorqueindicaelimporteactualdeunaanualidadbasadaenpagosperidicos
constantesquesevanarealizarenelfuturo,conunatasadeintersfija.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

337

- 7-

Rate
Devuelveunvalorqueindicalatasadeintersporperodoparaunaanualidad.
SLN
Devuelveunvalorqueindicalaamortizacindeunbienparaunperododadosegnelmtodolineal.
SYD
Devuelveunvalorqueindicalaamortizacinglobaldeunbienparaunperododado.

5.Fechasyhoras
Date,Date$
Devuelvelafechadelsistemaencurso.
DateAdd
Devuelveunvalorquerepresentalafechacorrespondienteaunafechadada,msunintervalode
tiempoespecificado.
DateDiff
Devuelveunvalorqueindicalacantidaddeintervalosdetiempoentredosfechasdadas.
DatePart
Devuelveunvalorquecontieneelelementoespecificadodeunafechadada.
DateSerial
Devuelvelafechacorrespondienteaunao,unmesyundaespecificados.
DateValue
Devuelveunafecha.
Day
Devuelveunnmeroenterocomprendidoentre1y31querepresentaeldadelmes.
Hour
Devuelveunnmeroenterocomprendidoentre0y23querepresentalahoradelda.
Minute
Devuelveunnmeroenterocomprendidoentre0y59querepresentalosminutos.

- 8-

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

338

Month
Devuelveunnmeroenterocomprendidoentre1y12querepresentaelmesdelao.
MonthName
Devuelveunacadenaqueindicaelmesespecificado.
Now
Devuelvelafechaylahoraactualestomadasdelrelojdelsistema.
Second
Devuelveunnmeroenterocomprendidoentre0y59querepresentalossegundos.
Time,Time$
Devuelvelahoraactual.
Timer
Devuelvelacantidaddesegundostranscurridosdesdelamedianoche.
TimeSerial
Devuelveunafechaquecontienelahoraexacta(horas,minutosysegundos).
TimeValue
Devuelveunahora.
WeekDay
Devuelveunnmeroenteroquerepresentaeldadelasemana.
WeekdayName
Devuelveunacadenaqueindicaeldadelasemanaespecificada.
Year
Devuelveunnmeroenteroquerepresentaelao.
Ejemplo
Diversosclculosconfechasyhoras:

Sub CalcFechasyHoras ()

Muestra la fecha del da

MsgBox "Hoy es " & Date

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

339

- 9-

Muestra la cantidad de segundos transcurridos desde medianoche

MsgBox "Medianoche fue hace " & _


Timer & " segundos"

Calcula y muestra el tiempo que resta de trabajo,

suponiendo que la jornada termina a las 17 h 30

Resto = TimeSerial(17 - Hour(Time), _


30 - Minute(Time), 0 - Second(Time))
MsgBox "Finalizando a las 17h30, falta " & Resto & _
" horas de trabajo"

Calcula y muestra el ltimo da del mes en curso

Final = DateSerial(Year(Now), Month(Now) + 1, 1) - 1


MsgBox "el ltimo da del mes en curso es " & Final

Muestra el nombre del da de la semana de esa fecha

(- 1 porque para Excel la semana empieza el domingo)

MsgBox "Ser un " & WeekdayName(Weekday(Final) - 1)


End Sub

6.Archivos,Sistema
CurDir,CurDir$
Devuelvelarutadeaccesoactual.
Dir,Dir$
Devuelveelnombredeunarchivo,deundirectorioodeunacarpetaquecoincideconunaplantillao
unatributodearchivoespecificadoodevuelvelaetiquetadevolumendeunaunidaddedisco.
EOF
Devuelveunvalorqueindicasisehallegadoalfinaldeunarchivo.
FileAttr
Devuelveunvalorquerepresentaelmododelarchivoparalosarchivosabiertosusandolainstruccin
Open.

FileDateTime
Devuelvelafechaylahoradecreacinodelaltimamodificacindeunarchivo.
FileLen
Devuelveeltamaodeunarchivoenbytes.
FreeFile
Devuelveunnmeroqueindicaelsiguientenmerodearchivodisponibleparasuusoenlainstruccin
Open.

GetAttr

- 10 -

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

340

Devuelveunnmeroquerepresentalosatributosdeunarchivo,directorioocarpetaolaetiquetade
unvolumen.
Input,Input$
Devuelveloscaracteres(bytes)ledosapartirdeunarchivosecuencialabierto.
Loc
Devuelvelaposicindelecturayescrituraactualesenunarchivoabierto.
LOF
DevuelvelalongitudenbytesdeunarchivoabiertoconlainstruccinOpen.
Seek,Seek$
DevuelvelaposicindelecturayescrituraactualesenunarchivoabiertoconlainstruccinOpen.
Ejemplo
Procedimiento para mostrar los nombres, las fechas de ltima modificacin y los tamaos de los cinco primeros archivos
encontradosenlacarpetaactual.

Sub ListaArchivos ()
Dim strPath As String
Dim strFile As String
strPath = CurDir() & "\"
strFile = Dir(strPath)
For i = 1 To 5
If i = 1 Then
strFile = Dir(strPath)
Else
strFile = Dir()
End If
If strFile <> "" Then
MsgBox "Archivo: " & strFile & Chr(13) & _
"Fecha: " & FileDateTime(strFile) & Chr(13) & _
"Tamao: " & Format(FileLen(strFile), "# ##0")
End If
Next i
End Sub

7.Verificacindevariables
IsArray
Devuelveunvalorqueindicasiunavariableesonounamatriz.

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

341

- 11 -

IsDate
Devuelveunvalorqueindicasiunaexpresinsepuedeconvertirafecha.
IsEmpty
Devuelveunvalorqueindicasiunavariablehasidoonoiniciada.
IsError
Devuelveunvalorqueindicasiunaexpresinesonounvalordeerror.
IsMissing
Devuelveunvalorqueindicasiselepasaunprocedimientounargumentoopcional.
IsNull
Devuelveunvalorqueindicasiunaexpresincontieneonounvalorvlido.
IsNumeric
Devuelveunvalorqueindicasiunaexpresinsepuedeinterpretarcomounnmero.
IsObject
Devuelveunvalorqueindicasiunidentificadorrepresentaunavariableobjeto.
TypeName
Devuelveunacadenaqueproporcionainformacinacercadeunavariable.
VarType
Devuelveunvalorqueindicaelsubtipodeunavariable.

8.Interaccin
CreateObject
CreaunobjetoOLEAutomation.
GetObject
RecuperaunobjetoOLEAutomationenunarchivo.
InputBox
Muestrauncuadrodedilogoconunainvitacin,esperaqueelusuarioescriba untextoopulseun
botnyluegodevuelveelcontenidodelcuadrodetexto.

- 12 -

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

342

MsgBox
Muestraunmensajeenuncuadrodedilogo,esperaqueelusuariopulseunbotnyluegodevuelve
unvalorqueindicaelbotnpulsadoporelusuario.
Shell
Ejecutaunprogramaejecutable.

9.Matrices
Array
DevuelveundatodetipoVariantquecontieneunamatriz.
Filter
Devuelveunamatrizdebaseceroquecontieneunsubconjuntodeunamatrizdecadenasbasadoen
loscriteriosdefiltradoespecificados.
Joint
Devuelveunacadenacreadaporlaunindevariassubcadenascontenidasenunamatriz.
LBound
Devuelveelmenorvalordelndicedisponibleparaladimensinindicadaenunamatriz.
Split
Devuelveunamatrizdeunadimensin,basadaencero,quecontienelacantidadespecificadade
subcadenas.
UBound
Devuelveelmayorvalordelndicedisponibleparaladimensinindicadaenunamatriz.

10.SQL
SQLBind
EspecificadndeseencuentranlosresultadosdelaextraccinconlafuncinSQLRetrieve.
SQLClose
Cierraunaconexinconunorigendedatosexternos.
SQLError
Devuelveinformacindeerrordetalladacuandoseutilizadespusdequeseproduzcaunerroren
Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

343

- 13 -

otradelasfuncionesODBC.
SQLExecQuery
EjecutaunaconsultaenunorigendedatosconunaconexinestablecidaconlainstruccinSQLOpen.
SQLGetSchema
Devuelveinformacinacercadelaestructuradelorigendedatosdeunaconexinenparticular.
SQLOpen
Estableceunaconexinconunorigendedatos.
SQLRequest
Conectaconunorigendedatosexternoyejecutaunaconsultadesdeunahojadeclculoa
continuacin,devuelveelresultadodelaconsultaenformadematrizVisualBasic.
SQLRetrieve
Recuperatodoslosresultados,opartedeellos,deunaconsultaejecutadaconanterioridad.
SQLRetrieve,ToFile
Devuelvetodoslosresultadosdeunaconsultaejecutadaconanterioridadylosguardaenunarchivo.

11.Diversas
CallByName
Ejecutaunmtododeunobjeto,oestableceodevuelveunapropiedaddeunobjeto.
Choose
Seleccionaydevuelveunvalorapartirdeunalistadeargumentos.
DoEvents
Detienemomentneamentelaejecucinycedeelcontrolalsistemaoperativo,paraqueestepueda
procesarotroseventos.
Environ
Devuelveelvalorasociadoaunavariabledeentornodelsistemaoperativo.
GetAllSettings
Devuelveunalistadeclavesysusvaloresrespectivos(originalmentecreadosconlainstruccin
SaveSetting)apartirdelaentradadeunaaplicacinenlabasederegistrodeWindows.

- 14 -

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

344

GetSetting
DevuelveelvalordeclavedeunaentradadeaplicacinenlabasederegistrodeWindows.
Iif
Devuelveunouotrodedosargumentossegnlaevaluacindeunaexpresin.
Spc
FuncinutilizadaconlainstruccinPrint #oelmtodoPrintparaposicionarlasalida.
Switch
Evalaunalistadeexpresionesydevuelveunvalorounaexpresinasociadaalaprimeraexpresin
delalistaquetieneelvalorTrue.
Tab
FuncinutilizadaconlainstruccinPrint #oelmtodoPrintparaposicionarlasalida.

12.Solver
SolverAdd
Agregaunarestriccinalproblemaactual.
SolverChange
Modificaunarestriccinalproblemaactual.
SolverDelete
Eliminaunarestriccinalproblemaactual.
SolverFinish
IndicaaExcelqudebehacerconlosresultadosyquclasedeinformedebecrearalfinalizarel
procesoderesolucin.
SolverFinishDialog
EsigualalafuncinSolverFinish,perotambinmuestraelcuadrodedilogoResultadosdeSolver
despusderesolverelproblema.
SolverGet
DevuelvelainformacinrelativaalaconfiguracindeSolver.
SolverLoad

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

345

- 15 -

Cargalaconfiguracindeunmodeloexistente.
SolverOK
DefineunmodelobsicodeSolver.
SolverOKDialog
EsigualaSolverOKperotambinmuestraelcuadrodedilogoSolver.
SolverOptions
Especificalasopcionesavanzadasdeunmodelo.
SolverReset
Reiniciatodalaconfiguracin.
SolverSave
Guardalaconfiguracindeunmodelo.
SolverSolve
Procedeconlaresolucindeunmodelo.

- 16 -

Editions ENI Tous droits rservs Copie personnelle de RODOLFO MONTES VALDIVIA

346