tag:blogger.com,1999:blog-82535251747333563002024-03-19T09:48:41.518+01:00témporaExcelEl blog sobre Microsoft Excel para profesionales y empresasTémpora Consultoreshttp://www.blogger.com/profile/09000632812723289961noreply@blogger.comBlogger164125tag:blogger.com,1999:blog-8253525174733356300.post-55351085365140279312019-11-27T13:59:00.000+01:002019-11-27T17:11:30.424+01:00Actualizar consultas Excel mediante código VBA<div class="separator" style="clear: both; text-align: left;">
Actualizar una consulta generada en Excel por Power Query (Obtener y transformar datos) es sencillo, sea cual sea el método que queramos utilizar: interfaz de usuario o VBA.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjT35AF1lzpgT2UGP8IWf0B1Bpwc9cWwFxxLGpWE9xBShOzX8vYtoebMirVIu9KRXBP8P_R11oawtWlXcFPVZmHZBjznlMSNytHxLXtu2IrvC9EGasn6VmexQ_eHm_LXyUX8XmRFSv3vTQW/s1600/Obtener+y+transformar2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="392" data-original-width="518" height="302" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjT35AF1lzpgT2UGP8IWf0B1Bpwc9cWwFxxLGpWE9xBShOzX8vYtoebMirVIu9KRXBP8P_R11oawtWlXcFPVZmHZBjznlMSNytHxLXtu2IrvC9EGasn6VmexQ_eHm_LXyUX8XmRFSv3vTQW/s400/Obtener+y+transformar2.png" width="400" /></a></div>
<br />
Si recopilamos los métodos más habituales son:<br />
<br />
<ol>
<li><b>Actualizar mediante interfaz de usuario</b>, manualmente:</li>
<ul>
<li>Desde el botón desplegable "<b>Actualizar todo</b>" de la ficha <b>Datos</b></li>
</ul>
</ol>
<ol><ul><ul>
<li>Opción<b> Actualizar todo </b>(se actualizan todas las consultas y tablas dinámicas del libro)</li>
<li>Opción <b>Actualizar </b>(se actualiza solo la tabla activa)</li>
</ul>
<li><b>Desde la lista de consultas</b> (Ficha Datos/Consultas y conexiones/Botón derecho sobre la consulta/Actualizar)</li>
</ul>
</ol>
<ol>
<li><b>Actualizar automáticamente</b> la consulta configurando la actualización automática desde sus propiedades (Ficha Datos/Consultas y conexiones/Botón derecho sobre la consulta/Propiedades/Actualizar al abrir el archivo o Actualizar cada....x minutos)</li>
<li><b>Actualizar mediante una macro</b> con código VBA:</li>
<ul>
<li>Para una consulta sería:</li>
</ul>
</ol>
<ul><ul><ul>
<li> ActiveWorkbook.Connections("Consulta - <i><span style="color: blue;">nombreConsulta</span></i>").Refresh</li>
</ul>
</ul>
</ul>
<div>
<ol><ul>
<li>Para todas las consultas sería:</li>
</ul>
</ol>
<div>
<ul><ul><ul>
<li>ActiveWorkbook.RefreshAll</li>
</ul>
</ul>
</ul>
</div>
</div>
<br />
<b>Como comentario para usuarios avanzados</b>, tenemos que decir que en este último caso, a veces, ocurre un problema de sincronización entre el tiempo de actualización de la consulta y el tiempo de ejecución del código VBA.<br />
<br />
<span style="color: #b45f06; font-size: large;"><b>Problema</b></span><br />
Esto es, si una consulta se ejecuta mediante código VBA e inmediatamente después del código VBA de actualización de la consulta hay otro código VBA, este último código NO SE EJECUTA DESPUÉS DE FINALIZADA LA ACTUALIZACIÓN de la consulta, sino que se ejecuta inmediatamente después de INICIADA la actualización de la consulta. En otras palabras:<br />
<br />
Cuando se ejecuta la consulta, esta comienza a ejecutarse y tarda un cierto tiempo, pero el código siguiente se ejecuta inmediatamente después y podría ocurrir que la consulta terminara después de que el código siguiente termine. Un ejemplo sería la macro:<br />
<br />
<i><span style="color: blue;">Sub miMacro()</span></i><br />
<i><span style="color: blue;"> ActiveWorkbook.Connections("Consulta - REV").Refresh</span></i><br />
<div>
<div>
<i><span style="color: blue;"> ActiveSheet.ListObjects("tbl_REV").Range.AutoFilter Field:=5, Criteria1:="="</span></i></div>
</div>
<div>
<i><span style="color: blue;">End Sub</span></i></div>
<div>
<br /></div>
Con el código anterior:<br />
<br />
<ol>
<li>La primera línea de código inicia la actualización de la consulta REV</li>
<li>La segunda línea de código aplica un filtro a la tabla donde se carga la consulta REV</li>
<li>La consulta termina de actualizarse y se carga sobre la tabla REV, eliminando el filtro aplicado en la línea anterior</li>
</ol>
<br />
Con todo lo anterior, se evidencia <b>el problema: la segunda línea de código queda inutilizada</b>.<br />
<br />
<span style="color: #b45f06; font-size: large;"><b>Solución</b></span><br />
Es simple. Configurar la consulta de forma distinta a como está configurada por defecto: (Ficha Datos/Consultas y conexiones/Botón derecho sobre la consulta/Propiedades/Desactivar la opción <b>Habilitar actualización en segundo plano</b>)<br />
<br />
<br />
<br />
<div style="text-align: justify;">
<div style="text-align: start;">
José Manuel Pomares Medrano</div>
<div style="text-align: start;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9KQqil0ZjeEhnSJppa1gv6cCqaS4_Jlfk1qvaG8K70bJy6ZqHG6XIWzi7sWyC4EGBHgfWkhpjCUlAWaFtYMddo5w-AjylCcn8AWIvacdSJbPx1u50Zlc7A0B7FUyiaYX6HrOZt3gJedN/s1600/Cabecera+t%25C3%25A9mporaExcel.PNG" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="96" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9KQqil0ZjeEhnSJppa1gv6cCqaS4_Jlfk1qvaG8K70bJy6ZqHG6XIWzi7sWyC4EGBHgfWkhpjCUlAWaFtYMddo5w-AjylCcn8AWIvacdSJbPx1u50Zlc7A0B7FUyiaYX6HrOZt3gJedN/s640/Cabecera+t%25C3%25A9mporaExcel.PNG" width="640" /></a></div>
<div>
<br /></div>
</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<br />
<div style="text-align: justify;">
</div>
<br />
<div style="font-family: "times new roman"; text-align: justify;">
<div style="margin: 0px;">
<br /></div>
</div>
<br />
<br />
<br />
<br />Témpora Consultoreshttp://www.blogger.com/profile/09000632812723289961noreply@blogger.com12tag:blogger.com,1999:blog-8253525174733356300.post-87110540356291148822018-12-02T13:06:00.000+01:002018-12-02T13:25:46.646+01:00Novedades en Office 2019 y 365 (Capítulo 2: PowerPoint)<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlmp9jAbbPzNofizDRS3jrj8oSJUfv-5NNh70q-AK2xJBQPR9Mlmm7TC9tP4DG7nMTyDRzhyphenhyphenGvIM9wxPMpMB3Cj8IilnggIX1l-XLKK5QuzCXsQ5I0VJlWoQwz5FVdwlfaX2QnB3cLNmar/s1600/Captura.PNG" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="464" data-original-width="352" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlmp9jAbbPzNofizDRS3jrj8oSJUfv-5NNh70q-AK2xJBQPR9Mlmm7TC9tP4DG7nMTyDRzhyphenhyphenGvIM9wxPMpMB3Cj8IilnggIX1l-XLKK5QuzCXsQ5I0VJlWoQwz5FVdwlfaX2QnB3cLNmar/s400/Captura.PNG" width="303" /></a></div>
<div style="text-align: justify;">
Continuamos con la serie de artículos dedicados a las novedades de la <b>versiones 2019 y 365 de la suite ofimática de Microsoft</b>. Aunque este es un blog sobre Excel, remitimos al usuario a nuestro blog de presentaciones para ver el dossier completo de novedades. Podemos afirmar que casi cualquier usuario o usuaria que utiliza <b>Excel</b>, alguna vez (o quizá muchas), utiliza también <b>PowerPoint</b>.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Al igual que en el caso de <b>Excel</b>, lo primero que debemos decir es que no todas las novedades están disponibles para usuarios de <b>PowerPoint 2019</b> (la versión de pago único). Sin embargo, los suscriptores de <b>Office 365</b> si podrán disfrutar de un <b>PowerPoint </b>con todas las nuevas funcionalidades.</div>
<div style="text-align: justify;">
<br /></div>
Aquí os dejo el enlace para que veáis todas las novedades de PowerPoint:<br />
<br />
<br />
<a href="http://temporapresentaciones.blogspot.com/2018/12/novedades-en-powerpoint-2019-y-365.html" target="_blank"><b>Novedades en PowerPoint 2019 y 365</b></a><br />
<br />
<br />
<br />
<div>
<br />
<div style="text-align: justify;">
<div style="text-align: justify;">
Si queréis ver más sobre novedades de <b>Office</b>, podéis hacer clic en el siguiente enlace y tenéis todo un curso gratuito grabado por mí para <b>LinkedIn Learning</b>:</div>
</div>
<div style="text-align: justify;">
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<span style="color: #1d2129; font-family: "helvetica" , "arial" , sans-serif;"><span style="background-color: white; font-size: 14px; white-space: pre-wrap;"><a href="https://www.linkedin.com/learning/novedades-de-office-2019/presentacion-de-novedades-de-office-2019" target="_blank"><b>Novedades Office 2019</b></a></span></span></div>
<div style="text-align: left;">
<span style="color: #1d2129; font-family: "helvetica" , "arial" , sans-serif;"><span style="background-color: white; font-size: 14px; white-space: pre-wrap;"><br /></span></span></div>
<br /></div>
<div style="text-align: justify;">
<div style="text-align: start;">
José Manuel Pomares Medrano</div>
<div style="text-align: start;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9KQqil0ZjeEhnSJppa1gv6cCqaS4_Jlfk1qvaG8K70bJy6ZqHG6XIWzi7sWyC4EGBHgfWkhpjCUlAWaFtYMddo5w-AjylCcn8AWIvacdSJbPx1u50Zlc7A0B7FUyiaYX6HrOZt3gJedN/s1600/Cabecera+t%25C3%25A9mporaExcel.PNG" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="96" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9KQqil0ZjeEhnSJppa1gv6cCqaS4_Jlfk1qvaG8K70bJy6ZqHG6XIWzi7sWyC4EGBHgfWkhpjCUlAWaFtYMddo5w-AjylCcn8AWIvacdSJbPx1u50Zlc7A0B7FUyiaYX6HrOZt3gJedN/s640/Cabecera+t%25C3%25A9mporaExcel.PNG" width="640" /></a></div>
<div>
<br /></div>
</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<br />
<div style="text-align: justify;">
</div>
<br />
<div style="-webkit-text-stroke-width: 0px; color: black; font-family: "Times New Roman"; font-size: medium; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: justify; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">
<div style="margin: 0px;">
<br /></div>
</div>
<br /></div>
Témpora Consultoreshttp://www.blogger.com/profile/09000632812723289961noreply@blogger.com1tag:blogger.com,1999:blog-8253525174733356300.post-64790523006125193972018-11-01T17:41:00.001+01:002018-12-02T19:15:31.673+01:00Novedades en Office 2019 y 365 (Capítulo 1: Excel )<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjn7c82bvTsf9ZxIVtbpf-7biJcaevams1NaGXux1i5NVE3IzSVUJLAlwcPc9OcGjaAuOpl_1vr2w6X0idA8X43coticIUiIBjF80cpTeHPUtFK7_GZhss_RMKa1FqQpC9hP8fizH46NOdz/s1600/Logo+Excel+2019+Office+365.PNG" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="537" data-original-width="373" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjn7c82bvTsf9ZxIVtbpf-7biJcaevams1NaGXux1i5NVE3IzSVUJLAlwcPc9OcGjaAuOpl_1vr2w6X0idA8X43coticIUiIBjF80cpTeHPUtFK7_GZhss_RMKa1FqQpC9hP8fizH46NOdz/s400/Logo+Excel+2019+Office+365.PNG" width="277" /></a><br />
<div style="text-align: justify;">
Comenzamos una serie de artículos que describen de una forma más o menos exhaustiva las <b>novedades</b> aparecidas en Septiembre de 2018 <b>en la versión 2019 de Office</b> (versión de pago único), así como las novedades que podemos encontrar <b>en la versión de suscripción, Office 365</b>. Este primer artículo lo dedicamos a <b>Microsoft Excel</b>.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b>Excel </b>es una de las aplicaciones estrella de la suite ofimática de Microsoft y no ha decepcionado en cuanto a novedades. Destacan las relativas al análisis de datos en sus distintas formas: <b>funciones</b>, <b>gráficos </b>y la nueva última utilidad incorporada para los suscriptores de Office 365, <b>Ideas</b>.</div>
<br />
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Lo primero que hay que comentar es que no todas las novedades están disponibles para usuarios de <b>Excel 2019 (la versión de pago único)</b>. Sin embargo, los suscriptores de <b>Office 365</b> si podrán disfrutar en su Excel de todas las nuevas funcionalidades.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b><span style="color: #e69138; font-size: large;">NOVEDADES EN LA INTERFAZ</span></b></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b>Nuevo backstage (para <span style="color: #38761d;">Office 2019</span> y <span style="color: #e06666;">Office 365</span>)</b></div>
<div style="text-align: justify;">
Desde la ficha Archivo se accede a lo que llamamos backstage. Este es un espacio dedicado a todas las acciones referidas a los archivos de Excel (abrir, nuevo, guardar, guardar como, exportar, cerrar, etc.). Ahora, tiene un nuevo aspecto. También se ha renovado la pantalla de bienvenida de Excel (la que se obtiene nada más arrancar la aplicación).<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuvMVEbDg61B8etT_cCfyvPE1Zk2b48FC4DlNoG7AHfF7SkGAnOAQpNothHfnE1IzZgbesBXjiHtm8NJiUk72cFPkuskPSQOGZU_fyOucXRWVfMtR1O9C1ETszxpNtXYbSu71N_ZTvwTZZ/s1600/Interfaz.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="430" data-original-width="552" height="311" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuvMVEbDg61B8etT_cCfyvPE1Zk2b48FC4DlNoG7AHfF7SkGAnOAQpNothHfnE1IzZgbesBXjiHtm8NJiUk72cFPkuskPSQOGZU_fyOucXRWVfMtR1O9C1ETszxpNtXYbSu71N_ZTvwTZZ/s400/Interfaz.PNG" width="400" /></a></div>
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b>Ausencia de pestañas </b><b>(solo para <span style="color: #e06666;">Office 365</span>)</b></div>
<div style="text-align: justify;">
Los suscriptores de Office 365 dicen adiós a las pestañas que veíamos en la parte superior de la cinta de opciones. Mediante estas pestañas activábamos cada una de las fichas de la cinta de opciones. Ahora, tan solo sabemos que tenemos una ficha activa mediante un subrayado que aparece en el nombre de la ficha. En cualquier caso, los usuarios de Office 2019 seguirán disponiendo de estas pestañas.</div>
<div style="text-align: justify;">
<b><br /></b></div>
<div style="text-align: justify;">
<b>Tema Negro </b><b>(para <span style="color: #38761d;">Office 2019</span> y <span style="color: #e06666;">Office 365</span>)</b></div>
<div style="text-align: justify;">
Desde la ficha Archivo > Cuenta, disponemos de un nuevo tema con el que configurar nuestro Office para que tenga un aspecto oscuro y de esta forma conseguir un doble propósito: ahorrar batería en ordenadores portátiles y hacer que nuestra vista trabaje más relajada.</div>
<div style="text-align: justify;">
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRSxCqoVuu1tCdz1-F2rf_uymugSQlt81dXolGrkkLJrjqeduq48UXkrSFY8FIRfchyphenhyphendXFgOPHgf7EDZ2ZADnazpXfKy3s6Vp3iEAzqOl0DVTKVKM9KbTb12du1hpAKEbI9E7MLlBu-QFB/s1600/Tema+negro.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="442" data-original-width="559" height="316" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRSxCqoVuu1tCdz1-F2rf_uymugSQlt81dXolGrkkLJrjqeduq48UXkrSFY8FIRfchyphenhyphendXFgOPHgf7EDZ2ZADnazpXfKy3s6Vp3iEAzqOl0DVTKVKM9KbTb12du1hpAKEbI9E7MLlBu-QFB/s400/Tema+negro.PNG" width="400" /></a></div>
<br />
<br /></div>
<div style="text-align: justify;">
<b><span style="color: #e69138; font-size: large;">NOVEDADES EN GRÁFICOS, ICONOS Y DISEÑO</span></b></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b>Gráficos</b></div>
<div style="text-align: justify;">
Desde la ficha Insertar > Grupo gráficos, podemos encontrar nuevos tipos de gráficos: <b>gráficos de embudo y gráficos de mapas 2D</b>.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b>Iconos y elementos 3D </b><b>(para <span style="color: #38761d;">Office 2019</span> y <span style="color: #e06666;">Office 365</span>)</b></div>
<div style="text-align: justify;">
Desde la ficha Insertar > Grupo ilustraciones es posible ahora insertar nuevos elementos:</div>
<div style="text-align: justify;">
</div>
<ul>
<li><b>Iconos</b>, desde una galería gratuita que incluye multitud de iconos clasificados por categorías.</li>
<li><b>Imágenes 3D</b>, desde una galería que también clasifica todo por categorías</li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9AwzG-vt0aIAbsBxtuIFC_QT5oT2m9oRi6-m209Rt0r7kclgrX1Ahh0OSKLAycREoS54oHR8W0snHmoalWCVlOIxs21Tz6WrUUPfn7lwLRWtKRS-7TI5Xqj-AZPOvM2dxuH0bkfjQ_gte/s1600/Iconos.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="400" data-original-width="512" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9AwzG-vt0aIAbsBxtuIFC_QT5oT2m9oRi6-m209Rt0r7kclgrX1Ahh0OSKLAycREoS54oHR8W0snHmoalWCVlOIxs21Tz6WrUUPfn7lwLRWtKRS-7TI5Xqj-AZPOvM2dxuH0bkfjQ_gte/s1600/Iconos.PNG" /></a></div>
<br />
<br />
<div style="text-align: justify;">
<b><span style="color: #e69138; font-size: large;">NOVEDADES EN HERRAMIENTAS DE TEXTO</span></b></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b>Accesibilidad mejorada </b><b>(para <span style="color: #38761d;">Office 2019</span> y <span style="color: #e06666;">Office 365</span>)</b></div>
<div style="text-align: justify;">
Ahora, Office ha mejorado la accesibilidad con un comprobador que encontramos en la ficha Revisar</div>
<div style="text-align: justify;">
y también con la posibilidad de generar automáticamente texto alternativo si lo configuramos desde la ficha Archivo > Opciones > Accesibilidad.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b>Color de hipervínculos </b><b>(para <span style="color: #38761d;">Office 2019</span> y <span style="color: #e06666;">Office 365</span>)</b></div>
<div style="text-align: justify;">
Si bien antes los hipervínculos siempre los veíamos de color azul, ahora podemos cambiar el color desde la herramienta Color de fuente (la misma que el texto o los números).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b><span style="color: #e69138; font-size: large;">ENTRADAS DE LÁPIZ MEJORADAS</span></b></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Ahora, podemos activar voluntariamente la ficha llamada <b>Dibujar </b>desde Archivo > Opciones > Personalizar la cinta de opciones > Activar casilla de verificación <b>Dibujar</b>. Una vez hecho esto, disponemos de una ficha con comandos mejorados:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b>Reproducción de entrada de lápiz </b><b>(solo para <span style="color: #e06666;">Office 365</span>)</b></div>
<div style="text-align: justify;">
Esta herramienta hace posible visualizar una animación de cómo hemos ido escribiendo un texto.</div>
<div style="text-align: justify;">
<b><br /></b></div>
<div style="text-align: justify;">
<b>Entrada de lápiz a forma </b><b>(para <span style="color: #38761d;">Office 2019</span> y <span style="color: #e06666;">Office 365</span>)</b></div>
<div style="text-align: justify;">
Esta utilidad permite dibujar a mano alzada cualquier figura geométrica con ciertas imperfecciones y posteriormente convierte nuestro dibujo en una figura geométrica perfecta.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b>Entrada de lápiz a matemáticas </b><b>(para <span style="color: #38761d;">Office 2019</span> y <span style="color: #e06666;">Office 365</span>)</b></div>
<div style="text-align: justify;">
Esta herramienta ya estaba disponible desde la ficha Insertar > Ecuación, pero ahora está incorporada también a esta renovada ficha dedicada al dibujo a mano alzada. Lo que hace es convertir números y ecuaciones escritas a mano alzada con un lápiz digital en números y ecuaciones perfectas.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b>Selección de lazo </b><b>(para <span style="color: #38761d;">Office 2019</span> y <span style="color: #e06666;">Office 365</span>)</b></div>
<div style="text-align: justify;">
Es una útil herramienta para seleccionar todos aquellos elementos que vamos dibujando a mano alzada desde la ficha Dibujar. Solo tenemos que "arrastrar" el cursor con el ratón... como intentando rodear el elemento que será seleccionado.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b><span style="color: #e69138; font-size: large;">INTELIGENCIA Y ANÁLISIS DE DATOS</span></b></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b>Publicar </b><b>(para <span style="color: #38761d;">Office 2019</span> y <span style="color: #e06666;">Office 365</span>)</b></div>
<div style="text-align: justify;">
Desde la ficha Archivo > Publicar es posible, desde Excel, cargar y exportar datos a Power BI.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b>Ideas de Excel </b><b>(solo para <span style="color: #e06666;">Office 365</span>)</b></div>
<div style="text-align: justify;">
Esta es una de las novedades incorporadas en Octubre de 2018 a Excel. Se trata de un "analizador" de datos automático que proporciona estadísticas inteligentes sobre una tabla cualquiera sin que el usuario necesite tener conocimientos estadísticos y sin que deba realizar ninguna acción (tan solo hacer clic en un botón).<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0sqtyYJl8bZ1V1GVzWmD_So6kXm2_ZRzaS2ep5pvaII0jz-jkD60d345usKZxGBPLgZ2eLDHCpJOnFokRR0ZcxGgQIhojuQinU30ZCEMuhEBhBu8Y4kdRiKzRTyfgiUQKYdxmpj6SrYiD/s1600/Ideas.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="407" data-original-width="497" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0sqtyYJl8bZ1V1GVzWmD_So6kXm2_ZRzaS2ep5pvaII0jz-jkD60d345usKZxGBPLgZ2eLDHCpJOnFokRR0ZcxGgQIhojuQinU30ZCEMuhEBhBu8Y4kdRiKzRTyfgiUQKYdxmpj6SrYiD/s1600/Ideas.PNG" /></a></div>
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b>Nuevas funciones de Excel </b><b>(para <span style="color: #38761d;">Office 2019</span> y <span style="color: #e06666;">Office 365</span>)</b></div>
<div style="text-align: justify;">
Excel ha incorporado una buena batería de nuevas funciones. Algunas, son funciones lógicas que evitan tener que utilizar largas y complicadas funciones anidadas. También hay algunas funciones de texto. La lista de las funciones nuevas es: SI.CONJUNTO, MAX.SI.CONJUNTO, MIN.SICONJUNTO, CAMBIAR, CONCAT Y UNIRCADENAS (las dos últimas son funciones de texto que perfeccionan el funcionamiento de la antigua función CONCATENAR).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b><span style="color: #e69138; font-size: large;">TRABAJO COLABORATIVO</span></b></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b>Coautoría </b><b>(solo para <span style="color: #e06666;">Office 365</span>)</b></div>
<div style="text-align: justify;">
Los suscriptores a Office 365 podrán disfrutar de un trabajo con Excel compartido en tiempo real. Es decir, los cambios se producen instantáneamente, cuando cada uno de los usuarios que trabajan sobre un mismo libro de Excel, los realizan. El libro debe estar alojado en OneDrive o en SharePoint.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b>Chat para trabajo en coautoría </b><b>(solo para <span style="color: #e06666;">Office 365</span>)</b></div>
<div style="text-align: justify;">
Para complementar el propio trabajo colaborativo, Excel añade un chat para poder intercambiar mensajes entre los usuarios que están compartiendo un mismo libro.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<div style="text-align: justify;">
Si queréis ver más sobre novedades de Office, podéis hacer clic en el siguiente enlace y tenéis todo un curso gratuito grabado por mí para LinkedIn Learning:</div>
</div>
<div style="text-align: justify;">
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<span style="color: #1d2129; font-family: "helvetica" , "arial" , sans-serif;"><span style="background-color: white; font-size: 14px; white-space: pre-wrap;"><a href="https://www.linkedin.com/learning/novedades-de-office-2019/presentacion-de-novedades-de-office-2019" target="_blank">Novedades Office 2019</a></span></span></div>
<div style="text-align: left;">
<span style="color: #1d2129; font-family: "helvetica" , "arial" , sans-serif;"><span style="background-color: white; font-size: 14px; white-space: pre-wrap;"><br /></span></span></div>
<br /></div>
<div style="text-align: justify;">
<div style="text-align: start;">
José Manuel Pomares Medrano</div>
<div style="text-align: start;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9KQqil0ZjeEhnSJppa1gv6cCqaS4_Jlfk1qvaG8K70bJy6ZqHG6XIWzi7sWyC4EGBHgfWkhpjCUlAWaFtYMddo5w-AjylCcn8AWIvacdSJbPx1u50Zlc7A0B7FUyiaYX6HrOZt3gJedN/s1600/Cabecera+t%25C3%25A9mporaExcel.PNG" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="96" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9KQqil0ZjeEhnSJppa1gv6cCqaS4_Jlfk1qvaG8K70bJy6ZqHG6XIWzi7sWyC4EGBHgfWkhpjCUlAWaFtYMddo5w-AjylCcn8AWIvacdSJbPx1u50Zlc7A0B7FUyiaYX6HrOZt3gJedN/s640/Cabecera+t%25C3%25A9mporaExcel.PNG" width="640" /></a></div>
<div>
<br /></div>
</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
Témpora Consultoreshttp://www.blogger.com/profile/09000632812723289961noreply@blogger.com6tag:blogger.com,1999:blog-8253525174733356300.post-52641862535659565982018-08-21T11:31:00.004+02:002018-08-21T11:38:32.342+02:00Extraer la última palabra o parte de un texto de una celda de Excel<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div style="text-align: justify;">
Muchos usuarios conocen algunas funciones de Excel como <b>IZQUIERDA, DERECHA, EXTRAE, ENCONTRAR, LARGO</b>, etc. Estas funciones, ya sea en solitario o actuando coordinadamente entre ellas, pueden conseguir con más o menos dificultad extraer cualquier palabra o cadena de texto desde la parte izquierda, central o derecha de un texto que pueda haber en una celda.</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbHThlT_m9A9NdNASTkZHaYT_Hdo9Z0uVRjD1zVLMRa1Ii7K_3FdcWN53NcqpAH_fis8z_pHgriZEEFqzOZIod2KvYt7GD1oyqUgh1qCCknG2Wd3XlXs0sHwwxUpHEax1uVy3_sFgnqzLu/s1600/UDF.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="202" data-original-width="290" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbHThlT_m9A9NdNASTkZHaYT_Hdo9Z0uVRjD1zVLMRa1Ii7K_3FdcWN53NcqpAH_fis8z_pHgriZEEFqzOZIod2KvYt7GD1oyqUgh1qCCknG2Wd3XlXs0sHwwxUpHEax1uVy3_sFgnqzLu/s1600/UDF.PNG" /></a></div>
<br />
<br />
<div style="text-align: justify;">
La cuestión se complica si lo que queremos extraer no tiene un ancho fijo (un número fijo de caracteres). Pero tiene también solución si, como hemos comentado antes, ponemos a trabajar juntas a varias funciones anidadas. Por ejemplo, para extraer la palabra de la izquierda (la primera palabra) de un texto que tiene varias palabras, podríamos utilizar la siguiente fórmula:</div>
<br />
<span style="color: blue;">=IZQUIERDA(A1;ENCONTRAR(" ";A1))</span><br />
<br />
<span style="font-size: x-small;"><i>Donde A1 es la celda donde se encuentra el texto</i></span><br />
<br />
<div style="text-align: justify;">
Pero, <b>¿y si necesitamos extraer la última palabra de una frase, el último apellido de una persona, la última parte de un código o el dominio de un email?</b> Esto sería algo más difícil y deberíamos anidar también varias funciones, dando como resultado una función relativamente compleja.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Una cómoda y elegante solución podría ser la creación de un <b>complemento de Excel </b>(<b>addin</b>) que contuviera una <b>UDF</b> (User Defined Function) o <b>Función Definida por el Usuario</b>. La creación de una UDF se realiza mediante unas líneas de código VBA. Esas líneas de código las vamos a alojar en un libro de Excel que convertiremos a complemento mediante <b>Guardar como...</b>. Una vez completado el proceso, tendremos a nuestra disposición, en nuestro Excel, una función más dentro de todas las funciones que ya teníamos propias de Excel. Además, <b>tendríamos la ventaja añadida de poder elegir el carácter que separa lo que queremos extraer del resto de la cadena</b>.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Para crear una <b>UDF </b>dentro de un <b>addin </b>que esté listo para ser usado, debemos:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: #b45f06;"><span style="font-size: large;"><b>PASO 1)</b></span></span></div>
<div style="text-align: justify;">
<b>Crear un libro de Excel nuevo</b>, presionar <b>ALT+F11</b> e insertar un módulo estándar en el proyecto <b>Libro1 </b>(si el libro nuevo se llama Libro1). Así pues, una vez ya hemos presionado <b>ALT+F11</b>, tenemos que hacer...</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMjc0Ox11m4zCwXMtDZhFgJThhYbjolAPnez25D5cuoN70SWbVwbo1Vik5d4exl-TEYt4XEElMUJoyJWUZIEzFwUvSlE7wbsjMxASBqeiYrQlNzTo3kbqh4IdyTZnHLUIvmpRPpnOJMkPC/s1600/Insertar+m%25C3%25B3dulo.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="260" data-original-width="477" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMjc0Ox11m4zCwXMtDZhFgJThhYbjolAPnez25D5cuoN70SWbVwbo1Vik5d4exl-TEYt4XEElMUJoyJWUZIEzFwUvSlE7wbsjMxASBqeiYrQlNzTo3kbqh4IdyTZnHLUIvmpRPpnOJMkPC/s1600/Insertar+m%25C3%25B3dulo.PNG" /> </a></div>
<br />
<span style="color: #b45f06;"><span style="font-size: large;"><b>PASO 2)</b></span></span><br />
Pegar en la ventana que se ha abierto a la derecha el código siguiente:<br />
<br />
<span style="color: blue;">Function ULTIMA_PALABRA(strTexto As String, Optional strSeparador As String) As String<br /><br /> <span style="color: #6aa84f;"> 'UTILIDAD: extrae de un texto los caracteres que hay después del último separador<br /> 'SINTAXIS: =ULTIMA_PALABRA(texto;[separador])<br /> <br /> 'Texto: un texto, número o ref. a la celda de donde tenemos que extraer<br /> '[separador]: uno o varios caracteres de texto (debe ir entre comillas)<br /> <br /> 'Si no se especifica, [separador] es un espacio</span><br /> <br /> If strSeparador = "" Then strSeparador = " "<br /> Dim bytLargo As String: bytLargo = Len(strTexto)<br /> Dim bytEncontrar As Integer: bytEncontrar = InStr(strTexto, strSeparador)<br /> <br /> ULTIMA_PALABRA = Right(strTexto, bytLargo - bytEncontrar)<br /><br />End Function</span><span style="color: blue;"></span><br />
<br />
<br />
<br />
Una vez pegado el código, debe verse así en la ventana de código:<br />
<br />
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPE74nOU7-IzI7XfC0-P7iwK8XcHTVbZSQTTNX5eWbpVhlwGiqRHgXoslSLia7DRbG7Mm5Ky4vds5QONsXXHfJdQ39EiFQZ3fdG7zggWKLrHBNrfUFIi5GfsH0AI_n6rJU7gYP-DCHMOsm/s1600/Ventana+c%25C3%25B3digo3.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="305" data-original-width="720" height="169" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPE74nOU7-IzI7XfC0-P7iwK8XcHTVbZSQTTNX5eWbpVhlwGiqRHgXoslSLia7DRbG7Mm5Ky4vds5QONsXXHfJdQ39EiFQZ3fdG7zggWKLrHBNrfUFIi5GfsH0AI_n6rJU7gYP-DCHMOsm/s400/Ventana+c%25C3%25B3digo3.PNG" width="400" /></a></div>
<br />
<br />
<br />
<div style="text-align: justify;">
<span style="color: #b45f06;"><span style="font-size: large;"><b>PASO 3)</b></span></span></div>
<div style="text-align: justify;">
<b>Guardar el Libro1 como...</b> Tipo de archivo: <b>Complemento de Excel </b>(tan solo con elegir la opción Complemento de Excel, la ruta de guardado para el archivo cambia automáticamente y es conveniente respetarla). En cuanto al nombre del archivo, escribimos el que deseemos. Por ejemplo, <b>MisComplementos</b>.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
<span style="color: #b45f06;"><span style="font-size: large;"><b>PASO 4)</b></span></span></div>
<div style="text-align: justify;">
Ahora, debemos asegurarnos de que Excel cargue el complemento cada vez que se inicie. Para ello, hacemos clic en... <i><b>ficha Archivo / Opciones / Complementos / Complementos de Excel / Ir...</b></i></div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHcFKyghGw7rXRm27IW5Wgc7Oxty-ys4NXDwE5iCEVu_gv3FKHyfUjhWEJZRbiAOQyMvbBcq2Vf3oHWk_sxQFpQejqlvAlmOd_630uhaT4kbUc-nApfaC18N0U81IAagV45Lv4iL7j2qd4/s1600/Complementos.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="472" data-original-width="619" height="305" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHcFKyghGw7rXRm27IW5Wgc7Oxty-ys4NXDwE5iCEVu_gv3FKHyfUjhWEJZRbiAOQyMvbBcq2Vf3oHWk_sxQFpQejqlvAlmOd_630uhaT4kbUc-nApfaC18N0U81IAagV45Lv4iL7j2qd4/s400/Complementos.PNG" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<span style="color: #b45f06;"><span style="font-size: large;"><b>PASO 5)</b></span></span><br />
<b>Activar </b>el complemento (lo veremos en la lista con el nombre que dimos en el paso 3) y <b>Aceptar</b>.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1wGgcgbPuX3l-gE-t9iYwZhy040AmsQ5oYFbu6gJsJddXdp8JTfV6YO_y02c3jXbUwFosrM6PJJ_lGqAIV0mCix_UF_ZPBnB5UJV6dBW4Npro7xN3_pVMjpcBP6aiic-OYB3IO3lCF1dL/s1600/Instalar+complemento.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="178" data-original-width="353" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1wGgcgbPuX3l-gE-t9iYwZhy040AmsQ5oYFbu6gJsJddXdp8JTfV6YO_y02c3jXbUwFosrM6PJJ_lGqAIV0mCix_UF_ZPBnB5UJV6dBW4Npro7xN3_pVMjpcBP6aiic-OYB3IO3lCF1dL/s1600/Instalar+complemento.PNG" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
<div style="text-align: justify;">
<span style="color: #b45f06;"><span style="font-size: large;"><b>PASO 6)</b></span></span></div>
<div style="text-align: justify;">
<b>Una vez hecho lo anterior, cerramos Excel</b> SIN GUARDAR Libro1 (puesto que ya lo guardamos antes convirtiéndolo a complemento de Excel) <b>y lo abrimos de nuevo</b>.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Ya podemos utilizar la función <b>ULTIMA_PALABRA</b> como si fuera otra función de Excel:</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLZbpq6ewSpBgwgIAHrsKPdzlx5PLiDHhEq00JOmhiAd4_G789CN8R2xy3N1i-ge7vGtA1MttzkRl4bYzO3WE4mVk0iNxOVw04YM1duZ4Y9ovtm6itiZOagcNS4rdYtHROIYndtJ9i1CWK/s1600/Funcion+probar.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="160" data-original-width="428" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLZbpq6ewSpBgwgIAHrsKPdzlx5PLiDHhEq00JOmhiAd4_G789CN8R2xy3N1i-ge7vGtA1MttzkRl4bYzO3WE4mVk0iNxOVw04YM1duZ4Y9ovtm6itiZOagcNS4rdYtHROIYndtJ9i1CWK/s1600/Funcion+probar.PNG" /></a></div>
<br />
Podemos comprobar que la sintaxis de nuestra nueva función es:<br />
<br />
<span style="color: blue;">=ULTIMA_PALABRA(texto;[separador])</span><br />
<br />
<div style="text-align: justify;">
<span style="font-size: x-small;"><i>texto: un texto, número o ref. a la celda de donde tenemos que extraer<br />[separador]: uno o varios caracteres de texto (debe ir entre comillas). Si no se especifica, [separador] es un espacio</i></span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Por lo tanto, podemos deducir que<b> también podemos extraer la última parte de una cadena de texto que tenga cualquier separador</b>. Por ejemplo, en la imagen de abajo tenemos unos códigos que tienen una última parte separada siempre por un guion. Pues con nuestra nueva función <b>ULTIMA_PALABRA</b> podemos extraer esa parte final del código utilizando como segundo argumento un guion (siempre debemos poner nuestro separador entre comillas, al ser una cadena de texto):</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilQXYsbpQRhnxj-tHF91-nqjj5yKeFE3sukKJkorjN1IdkGeoIui6OPKPDO4uNYShZBu22avPwtSzYuxWFLkfMolYty6g6zXEQ_HB6yUlBITHzyNsaqDRDOT7vafdyPmCtaf6in89e3c3q/s1600/Segundo+ejemplo.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="153" data-original-width="432" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilQXYsbpQRhnxj-tHF91-nqjj5yKeFE3sukKJkorjN1IdkGeoIui6OPKPDO4uNYShZBu22avPwtSzYuxWFLkfMolYty6g6zXEQ_HB6yUlBITHzyNsaqDRDOT7vafdyPmCtaf6in89e3c3q/s1600/Segundo+ejemplo.PNG" /></a></div>
<br />
<br />
<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGS3RkG7YJbocvLKD87ocrWJGPGWtPAOlIZdKj0hfxswHcRA81GiMDtJccsTsk_94Sa0jmXrz0xhiQFBiLK9sHyO5uAzSYm_Mve942v7N5wv7ZCWwPtGS4AvQOtWC878UACQQPYUY2obY/s1600/El+espacio+de+Mac.PNG" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGS3RkG7YJbocvLKD87ocrWJGPGWtPAOlIZdKj0hfxswHcRA81GiMDtJccsTsk_94Sa0jmXrz0xhiQFBiLK9sHyO5uAzSYm_Mve942v7N5wv7ZCWwPtGS4AvQOtWC878UACQQPYUY2obY/s1600/El+espacio+de+Mac.PNG" /></a><br />
<br />
<br />
<br />
<br />
En Mac, el proceso es prácticamente idéntico y solo cambian algunas imágenes y algunos detalles. Lo que exponemos a continuación son los cambios que podemos apreciar, respecto del trabajo en Windows:<br />
<br />
<span style="color: #b45f06;"><span style="font-size: large;"><b>PASO 1)</b></span></span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAwrXf7Fdj3esEsaFohXEKJ4d0SP5K6QSaJSLBg93uUrZNQwQAbdXUNcwJiaJnUxEczn8-MLszAH2uk2Na_CAIUJX_mncyXBSbrEIFkwLj1k23de0Pzb4eoufiGBE3Xpd35PjQcX6onLgW/s1600/Insertar+m%25C3%25B3dulo+MAC.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="248" data-original-width="426" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAwrXf7Fdj3esEsaFohXEKJ4d0SP5K6QSaJSLBg93uUrZNQwQAbdXUNcwJiaJnUxEczn8-MLszAH2uk2Na_CAIUJX_mncyXBSbrEIFkwLj1k23de0Pzb4eoufiGBE3Xpd35PjQcX6onLgW/s1600/Insertar+m%25C3%25B3dulo+MAC.PNG" /></a></div>
<br />
<div style="text-align: justify;">
<span style="color: #b45f06;"><span style="font-size: large;"><b>PASO 3)</b></span></span></div>
<b>En Mac, Excel no establece una ruta conveniente de guardado</b> de forma automática, sino que debemos elegir una (la que queramos) para saber dónde tenemos alojado nuestro <b>addin</b>.<br />
<br />
<span style="color: #b45f06;"><span style="font-size: large;"><b>PASOS 4) y 5)</b></span></span><br />
En Mac, para activar un complemento debemos ir al menú <i><b>Excel / Preferencias... / Barra de herramientas y cinta de opciones</b></i><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnfHfNtgu5tO7K_VLqzMz-tCW-Qx7RYQJQYSDQ2cPOp6T91Fl13sZ0Gw9OT1hoBmsqw7Ki880ARwhnbikBWgP-eAGtNuFU5Zxgckt9hWMz7EXovy26TYJOCCX6l0C3yt7HHP8sqkK2rfTb/s1600/pREFERENCIAS+maC.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="156" data-original-width="378" height="132" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnfHfNtgu5tO7K_VLqzMz-tCW-Qx7RYQJQYSDQ2cPOp6T91Fl13sZ0Gw9OT1hoBmsqw7Ki880ARwhnbikBWgP-eAGtNuFU5Zxgckt9hWMz7EXovy26TYJOCCX6l0C3yt7HHP8sqkK2rfTb/s320/pREFERENCIAS+maC.PNG" width="320" /></a></div>
<br />
... y activar la casilla de <b>Ficha Programador</b><br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG3gieiNjevyvSv1c4Xc3PFvXxJlQi8qtDES_ar-BDHA-djiWZlRw9XwJUGMnD6lXsUdDBwu3hcXOX8zAQ4TtVaJ1zxJK_T3xmAZrAM7PnqfUD4sWE_bb9w0sF0k_mYu4LZTj8KKq__BU2/s1600/Activar+Ficha+programador+Mac.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="98" data-original-width="252" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG3gieiNjevyvSv1c4Xc3PFvXxJlQi8qtDES_ar-BDHA-djiWZlRw9XwJUGMnD6lXsUdDBwu3hcXOX8zAQ4TtVaJ1zxJK_T3xmAZrAM7PnqfUD4sWE_bb9w0sF0k_mYu4LZTj8KKq__BU2/s1600/Activar+Ficha+programador+Mac.PNG" /></a></div>
<br />
...salimos aceptando cambios y <b>ya tenemos una nueva Ficha o Pestaña llamada Programador.</b> En ella, debemos hacer clic en <b>Complementos de Excel.</b><br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWySyMUfRefxQSdCK3_RPXrH9xrzzawJoYPX7Zv3lxcdghgcqUKvopUJ8jvDfHEBuo36-dDsVLVoKcjjkN7oS031wzO2i-OmAbv-85TR_G306MX7Qwn6X9mbKfl8fxML_Ri_2fno9EHv36/s1600/Activar+complemento+Mac.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="235" data-original-width="433" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWySyMUfRefxQSdCK3_RPXrH9xrzzawJoYPX7Zv3lxcdghgcqUKvopUJ8jvDfHEBuo36-dDsVLVoKcjjkN7oS031wzO2i-OmAbv-85TR_G306MX7Qwn6X9mbKfl8fxML_Ri_2fno9EHv36/s1600/Activar+complemento+Mac.PNG" /></a></div>
<br />
<br />
<br />
<br />
<br />
José Manuel Pomares Medrano<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9KQqil0ZjeEhnSJppa1gv6cCqaS4_Jlfk1qvaG8K70bJy6ZqHG6XIWzi7sWyC4EGBHgfWkhpjCUlAWaFtYMddo5w-AjylCcn8AWIvacdSJbPx1u50Zlc7A0B7FUyiaYX6HrOZt3gJedN/s1600/Cabecera+t%25C3%25A9mporaExcel.PNG" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="96" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9KQqil0ZjeEhnSJppa1gv6cCqaS4_Jlfk1qvaG8K70bJy6ZqHG6XIWzi7sWyC4EGBHgfWkhpjCUlAWaFtYMddo5w-AjylCcn8AWIvacdSJbPx1u50Zlc7A0B7FUyiaYX6HrOZt3gJedN/s640/Cabecera+t%25C3%25A9mporaExcel.PNG" width="640" /></a><br />
<br />Témpora Consultoreshttp://www.blogger.com/profile/09000632812723289961noreply@blogger.com2tag:blogger.com,1999:blog-8253525174733356300.post-40887640277341809452018-08-01T13:43:00.000+02:002019-10-21T10:23:31.978+02:00PDF con 62 mini lecciones de VBA para Excel. Serie #SabíasQueEnVBAAl igual que hiciera con los 62 trucos de Excel de la serie gratuita #SabíasQueEnExcel, también con la serie #SabíasQueEnVBA voy a ofrecer a mis lectores y seguidores, en este mismo artículo, un eBook con 62 mini-lecciones de VBA para Excel:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLdtsvF6Y2-EUvD237qEqQzww2UeP_mwrmqF4gZV8eS7atBhEQFqaemnjFUSGTi4jKwSo5SSG-J31Oa0GYGY0COon6ITtWJowgcvWgA7CndqJjz6pt_tQDeFiv2wabyBuTtIRQb8qUxUsc/s1600/Portada+SabiasQueEnVBA.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="815" data-original-width="596" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLdtsvF6Y2-EUvD237qEqQzww2UeP_mwrmqF4gZV8eS7atBhEQFqaemnjFUSGTi4jKwSo5SSG-J31Oa0GYGY0COon6ITtWJowgcvWgA7CndqJjz6pt_tQDeFiv2wabyBuTtIRQb8qUxUsc/s400/Portada+SabiasQueEnVBA.PNG" width="292" /></a></div>
<br />
<br />
<br />
Este trabajo es la recopilación, en PDF, de la serie que he ido publicando a diario en Facebook, Twitter y LinkdeIn, bajo el hashtag #SabíasQueEnVBA.<br />
<br />
Según he podido comprobar con los comentarios, puedo decir que he quedado muy satisfecho de la utilidad ofrecida por este curso gratuito. Ha sido un placer compartir con la comunidad de usuarios y usuarias de Excel estos conocimientos.<br />
<br />
Sin más dilación, ahí va el enlace para la descarga:<br />
<br />
<span style="color: blue;"><a href="https://www.dropbox.com/s/ri2ctbyqk4ga1fs/ebook_PDF%20Sab%C3%ADasQueEnVBA.pdf?dl=0" target="_blank">eBook PDF #SabíasQueEnVBA</a></span><br />
<br />
Gracias por la acogida y preparaos para el próximo #SabíasQue...<br />
<br />
<br />
José Manuel Pomares Medrano<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9KQqil0ZjeEhnSJppa1gv6cCqaS4_Jlfk1qvaG8K70bJy6ZqHG6XIWzi7sWyC4EGBHgfWkhpjCUlAWaFtYMddo5w-AjylCcn8AWIvacdSJbPx1u50Zlc7A0B7FUyiaYX6HrOZt3gJedN/s1600/Cabecera+t%25C3%25A9mporaExcel.PNG" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="96" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9KQqil0ZjeEhnSJppa1gv6cCqaS4_Jlfk1qvaG8K70bJy6ZqHG6XIWzi7sWyC4EGBHgfWkhpjCUlAWaFtYMddo5w-AjylCcn8AWIvacdSJbPx1u50Zlc7A0B7FUyiaYX6HrOZt3gJedN/s640/Cabecera+t%25C3%25A9mporaExcel.PNG" width="640" /></a><br />
<br />
<br />
<br />
<br />
<br />
<br />Témpora Consultoreshttp://www.blogger.com/profile/09000632812723289961noreply@blogger.com6tag:blogger.com,1999:blog-8253525174733356300.post-69874187324782844612018-07-14T11:27:00.000+02:002018-08-01T13:44:52.111+02:00La nueva función SI.CONJUNTO en ExcelCuando un usuario traspasa cierta línea y nivel en su utilización de Excel, descubre que la función SI es sumamente práctica para obtener un valor en una celda. Ese valor que obtenemos está condicionado a que se cumpla una prueba lógica del tipo A1 = 5 (por ejemplo). Pero también es posible obtener un valor condicionado a que se cumplan dos pruebas o tres pruebas... y así sucesivamente. De hecho, hay posibilidad de anidar 64 funciones SI para condicionar con 64 pruebas lógicas.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfey5th5x2o_7m5bWmsesS-ndGEac_9oc0QXiPw3yACYquufUZmgx9U-KPvU7vyIi7lwapIT0IzHVR7qTzp7vIH98z8ZpyilDkOW_nkEOnryDTlUAPNc5E9WJ5FYuYsN25FhGuKNmEltSF/s1600/FUNCI%25C3%2593N+SI.CONJUNTO.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="195" data-original-width="378" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfey5th5x2o_7m5bWmsesS-ndGEac_9oc0QXiPw3yACYquufUZmgx9U-KPvU7vyIi7lwapIT0IzHVR7qTzp7vIH98z8ZpyilDkOW_nkEOnryDTlUAPNc5E9WJ5FYuYsN25FhGuKNmEltSF/s1600/FUNCI%25C3%2593N+SI.CONJUNTO.PNG" /></a></div>
<br />
El problema es que anidar demasiadas funciones requiere una cuidada planificación para no errar en la lógica. En el caso de que algo haya ido mal en esa planificación (o en el caso de que necesitemos modificar a posteriori la fórmula), cuando tenemos más de 5 o 6 funciones SI anidadas, todo se complica de forma extrema.<br />
<br />
Microsoft ha sido sensible a ello y ha creado una función que soluciona este problema con una función que realiza interiormente esos anidamientos. Tan solo tenemos que ordenar convenientemente las pruebas lógicas y los resultados requeridos.<br />
<br />
Por ejemplo, si queríamos anidar 7 funciones SI para determinar el día de la semana en función del número que hay en la celda A1 (del 1 al 7), hasta ahora podíamos hacerlo así:<br />
<br />
<span style="color: blue;">=SI(A1 =1;"Lunes";SI(A1=2;"Martes";SI(A1=3;"Miércoles";SI(A1=4;"Jueves";SI(A1=5;"Viernes";SI(A1=6;"Sábado";SI(A1=7;"Domingo";"")))))))</span><br />
<br />
(Este es un ejemplo relativamente sencillo, pero la fórmula puede complicarse muchísimo más)<br />
<br />
La cuestión es que, ahora, con la nueva función SI.CONJUNTO de Excel, la fórmula puede quedar así:<br />
<br />
<span style="color: blue;">=SI.CONJUNTO(A1=1;"Lunes";A1=2;"Martes";A1=3;"Miércoles";A1=4;"Jueves";A1=5;"Viernes";A1=6;"Sábado";A1=7;"Domingo")</span><br />
<br />
Además de que es algo más corta la fórmula, hay algo que determina de forma importantísima la mayor facilidad de manejo: <b><span style="color: #cc0000;">solo hay una función con sus dos únicos paréntesis de apertura y cierre.</span></b><br />
<br />
Por lo tanto, la sintaxis de la función SI.CONJUNTO es:<br />
<br />
<span style="color: blue;"><b>SI.CONJUNTO (prueba_lógica_1; valor_si_verdad_1, prueba_lógica_2;</b><b><b>valor_si_verdad_2....</b>)</b></span><br />
<br />
<i><span style="font-size: x-small;">Donde:</span></i><br />
<i><span style="font-size: x-small;"><br /></span></i>
<i><span style="font-size: x-small;"><b>prueba_lógica_1</b> es la primera comparación utilizada (con operadores del tipo >, <, =, >=, <=, <>, etc.)</span></i><br />
<i><span style="font-size: x-small;"><b>valor_si_verdad_1</b> es el primer valor que exigimos si prueba_lógica_1 resulta VERDADERO</span></i><br />
....<br />
<i><span style="font-size: x-small;"><b>prueba_lógica_127</b> es la primera comparación utilizada (con operadores del tipo >, <, =, >=, <=, <>, etc.)</span></i><br />
<i><span style="font-size: x-small;"><b>valor_si_verdad_127</b> es el primer valor que exigimos si prueba_lógica_1 resulta VERDADERO</span></i><br />
<br />
<b>Podemos incluir 127 pruebas lógicas</b> con sus respectivas 127 opciones de <b>valor_si_verdad</b>.<br />
<br />
También es necesario comentar que <b>si la función SI.CONJUNTO no encuentra ninguno de los valores que se le proponen, devuelve un error del tipo #N/A</b>.<br />
<br />
La función SI.CONJUNTO está disponible también en Excel Online, como podemos observar a continuación:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYSYVkd8JgQmjoJ36X39gjuXMxNqEYgVN5BmUD0sXeAXs4QyHNstG9f4vyFlfLE9hLA86okFqKyV9XzGufDg2c5gYAErxeuD8vcQoeKemRfqDrE3dcgLQe75PsUAQHY4aXQpbAk0eXL-kd/s1600/FUNCI%25C3%2593N+SI.CONJUNTO+office+online.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="303" data-original-width="374" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYSYVkd8JgQmjoJ36X39gjuXMxNqEYgVN5BmUD0sXeAXs4QyHNstG9f4vyFlfLE9hLA86okFqKyV9XzGufDg2c5gYAErxeuD8vcQoeKemRfqDrE3dcgLQe75PsUAQHY4aXQpbAk0eXL-kd/s1600/FUNCI%25C3%2593N+SI.CONJUNTO+office+online.PNG" /></a></div>
<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGS3RkG7YJbocvLKD87ocrWJGPGWtPAOlIZdKj0hfxswHcRA81GiMDtJccsTsk_94Sa0jmXrz0xhiQFBiLK9sHyO5uAzSYm_Mve942v7N5wv7ZCWwPtGS4AvQOtWC878UACQQPYUY2obY/s1600/El+espacio+de+Mac.PNG" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGS3RkG7YJbocvLKD87ocrWJGPGWtPAOlIZdKj0hfxswHcRA81GiMDtJccsTsk_94Sa0jmXrz0xhiQFBiLK9sHyO5uAzSYm_Mve942v7N5wv7ZCWwPtGS4AvQOtWC878UACQQPYUY2obY/s1600/El+espacio+de+Mac.PNG" /></a><br />
<br />
<br />
<br />
<br />
<br />
En Office 365 para Macintosh la función SI.CONJUNTO también está disponible, como podemos ver:<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBWwMfoB38K2CDWa_8F9QeSmNdKaJnH73ZcfKZhyAK2J62Ikzba4P0x_7AvX4wa7neGKfTQTF4WjjACONc4egxAuuPDBYxLUylofA5WKPK2Q1tXrAA_XBrxVV5gWknQaII9nIQ1xp_BLjp/s1600/La+Funci%25C3%25B3n+SI.CONJUNTO+en+Mac.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="850" data-original-width="393" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBWwMfoB38K2CDWa_8F9QeSmNdKaJnH73ZcfKZhyAK2J62Ikzba4P0x_7AvX4wa7neGKfTQTF4WjjACONc4egxAuuPDBYxLUylofA5WKPK2Q1tXrAA_XBrxVV5gWknQaII9nIQ1xp_BLjp/s1600/La+Funci%25C3%25B3n+SI.CONJUNTO+en+Mac.png" /></a></div>
<br />
<br />
<br />
<br />
José Manuel Pomares Medrano<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9KQqil0ZjeEhnSJppa1gv6cCqaS4_Jlfk1qvaG8K70bJy6ZqHG6XIWzi7sWyC4EGBHgfWkhpjCUlAWaFtYMddo5w-AjylCcn8AWIvacdSJbPx1u50Zlc7A0B7FUyiaYX6HrOZt3gJedN/s1600/Cabecera+t%25C3%25A9mporaExcel.PNG" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="96" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9KQqil0ZjeEhnSJppa1gv6cCqaS4_Jlfk1qvaG8K70bJy6ZqHG6XIWzi7sWyC4EGBHgfWkhpjCUlAWaFtYMddo5w-AjylCcn8AWIvacdSJbPx1u50Zlc7A0B7FUyiaYX6HrOZt3gJedN/s640/Cabecera+t%25C3%25A9mporaExcel.PNG" width="640" /></a><br />
<br />
<br />
<br />
<br />
<br />Témpora Consultoreshttp://www.blogger.com/profile/09000632812723289961noreply@blogger.com1tag:blogger.com,1999:blog-8253525174733356300.post-36554163469255590922018-06-13T11:08:00.000+02:002019-10-21T10:22:46.543+02:00PDF con 62 trucos de Excel. Serie #SabíasQueEnExcelDurante varios meses he estado lanzando todos los días laborales un truco de Excel, de forma gratuita y simultánea en tres plataformas distintas: <b>Facebook, Twitter y LinkedIn</b>. Lo hacía bajo una etiqueta o "hashtag" llamada <span style="color: #38761d;"><b>#SabíasQueEnExcel</b></span> y, lo que en un principio se convirtió en una prueba para ver la aceptación, la verdad es que ha ido calando en mis seguidores hasta el punto de que, muchos de ellos, cuando me veían personalmente me felicitaban y me animaban a continuar con la serie declarándose "fans" de la misma.<br />
<br />
<br />
Así las cosas, darle continuidad a algo que satisfacía a tantos usuarios de Excel no ha sido difícil, puesto que sabía que cada día, lo que escribía no caería en saco roto.<br />
<br />
Una vez terminada la serie, me planteé hacer una recopilación. El motivo
es claro: muchos seguidores no habrán podido guardar todos los trucos
en algún lugar apto para ser consultado frecuentemente. El resultado es un ebook en formato <b>PDF que recoge todos los trucos con algunos consejos extra que no aparecían en cada truco diario</b>. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiInnIfE9f7T59ZgYmu9efwPJ-9C5hXEL9vsnZjL-DEN82NjpH4Cx9r_0wjHyylYxcqHnKmopFehH5H5s-vGxXZyA5TFbuoz2S5ya4tGqGM3GcbDgR95DMKUlWMrgTIDwvQ9jsuqXfpG3pI/s1600/Portada.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="533" data-original-width="379" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiInnIfE9f7T59ZgYmu9efwPJ-9C5hXEL9vsnZjL-DEN82NjpH4Cx9r_0wjHyylYxcqHnKmopFehH5H5s-vGxXZyA5TFbuoz2S5ya4tGqGM3GcbDgR95DMKUlWMrgTIDwvQ9jsuqXfpG3pI/s320/Portada.PNG" width="227" /></a></div>
<br />
El <span style="color: #38761d;"><b>enlace para descargar el ebook</b></span> es:<br />
<br />
<a href="https://www.dropbox.com/s/5837fzwaokughzq/ebook_PDF%20Sab%C3%ADasQueEnExcel.pdf?dl=0" target="_blank">eBook PDF #SabíasQueEnExcel</a><br />
<br />
Gracias por la buenísima acogida y por haber compartido el PDF de forma masiva en las RRSS.<br />
¿Estáis preparados para el próximo #SabíasQueEnVBA ?<br />
<br />
<br />
José Manuel Pomares Medrano<br />
<br />
<br />
<br />
<br />Témpora Consultoreshttp://www.blogger.com/profile/09000632812723289961noreply@blogger.com6tag:blogger.com,1999:blog-8253525174733356300.post-42415939899538809822018-04-29T18:47:00.000+02:002018-08-01T09:57:24.796+02:00La instrucción Resume para control de errores en VBA - Excel<div style="text-align: justify;">
Cuando se produce un error en Excel, se genera un objeto llamado <b>Err </b>que contiene un número de error. La instrucción Resume (en cualquiera de sus formas) reinicia el valor de <b>Err </b>a 0 (cero) y Excel deja de estar bajo una situación de excepción. Resume tiene tres formas sintácticas: <b>Resume</b>, <b>Resume Next</b> y <b>Resume <span style="color: #38761d;"><i>Etiqueta</i></span></b>.</div>
<div style="text-align: justify;">
<br />
<span style="font-size: large;"><span style="color: #e69138;"><b>Resume</b></span></span><br />
</div>
<div style="text-align: justify;">
La instrucción <b>Resume </b>lleva la línea de ejecución al punto donde se produjo el error. Debe utilizarse fuera de la línea de código donde está la instrucción <b>On Error</b>. Como podemos ver en el ejemplo siguiente, esto se utiliza para dar una nueva oportunidad a la línea que produjo el error:</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPxoVZTSMHlVMFdEmxEAHr3S1M3lt658o-hJVTEd67-2fzkjrS70NQkir4ugBGyvp7L0xlFP0-FEdel-AjT3w94Mk_GVg7v5VuTIQO9klKPlCkQ7pJPZ5ZHCD1iSD9Ug6pPRXRPKRA-gEi/s1600/Resume.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="182" data-original-width="506" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPxoVZTSMHlVMFdEmxEAHr3S1M3lt658o-hJVTEd67-2fzkjrS70NQkir4ugBGyvp7L0xlFP0-FEdel-AjT3w94Mk_GVg7v5VuTIQO9klKPlCkQ7pJPZ5ZHCD1iSD9Ug6pPRXRPKRA-gEi/s1600/Resume.png" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Debemos interpretar en el código que si no existe una hoja llamada <b>NuevaHoja</b>, se producirá un error y la línea de ejecución salta a la etiqueta <b>Error</b>. Entonces, se comprueba el número de error y si, efectivamente, ha sido por culpa de la inexistencia de la hoja, se crea una nueva. La instrucción <b>Resume </b>se encarga de devolver la línea de ejecución al lugar donde se produjo el error y, por lo tanto, todo continuará correctamente.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-size: large;"><span style="color: #e69138;"><b>Resume Next</b></span></span><br />
<br />
La instrucción <b>Resume Next</b> Se utiliza siempre inmediatamente después de <b>On Error</b>, Por lo tanto, hablamos de <b>On Error Resume Next</b>. Esta modalidad de <b>Resume </b>omite la línea que provoca el error y enruta la ejecución a la línea siguiente a la que provocó el error. La utilización de esta instrucción debe hacerse cuando ya sabemos que el procedimiento no provoca errores en condiciones normales y queremos que el programa no se detenga y no muestre ningún error bajo una eventualidad que no podemos conocer a priori.</div>
<div style="text-align: justify;">
<br /></div>
<span style="font-size: large;"><span style="color: #e69138;"><b>Resume <span style="color: #38761d;"><i>Etiqueta</i></span></b></span></span><br />
<br />
La instrucción <b>Resume <span style="color: #38761d;"><i>Etiqueta</i></span></b> lleva la línea de ejecución a una etiqueta que podemos situar en cualquier parte del código. Esto se utiliza si no tenemos intención de solucionar el problema que causó el error y lo que deseamos es continuar con la ejecución en algún punto concreto. Utilizando <b>On Error Resume <span style="color: #38761d;"><i>Etiqueta</i></span></b><span style="color: #38761d;"><i> </i></span>reinciamos <b>Err = 0</b>, a diferencia del uso de <b>On Error GoTo</b>.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjm36wKWbvRsTJnY3tonU__pIjnv0k6ea2EEI0lHXftMmmYJitls2JWaIOjQ5mxMHhQX20ogEXnMzymOOYwkapQg2Nj1FH2KaJoTjLYrmnnCZtH4t4031B08OI0GiT5KXmbibRfSzff8lFp/s1600/Resume+etiqueta.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="230" data-original-width="546" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjm36wKWbvRsTJnY3tonU__pIjnv0k6ea2EEI0lHXftMmmYJitls2JWaIOjQ5mxMHhQX20ogEXnMzymOOYwkapQg2Nj1FH2KaJoTjLYrmnnCZtH4t4031B08OI0GiT5KXmbibRfSzff8lFp/s1600/Resume+etiqueta.png" /></a></div>
<br />
<br />
<br />
José Manuel Pomares Medrano<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9KQqil0ZjeEhnSJppa1gv6cCqaS4_Jlfk1qvaG8K70bJy6ZqHG6XIWzi7sWyC4EGBHgfWkhpjCUlAWaFtYMddo5w-AjylCcn8AWIvacdSJbPx1u50Zlc7A0B7FUyiaYX6HrOZt3gJedN/s1600/Cabecera+t%25C3%25A9mporaExcel.PNG" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="96" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9KQqil0ZjeEhnSJppa1gv6cCqaS4_Jlfk1qvaG8K70bJy6ZqHG6XIWzi7sWyC4EGBHgfWkhpjCUlAWaFtYMddo5w-AjylCcn8AWIvacdSJbPx1u50Zlc7A0B7FUyiaYX6HrOZt3gJedN/s640/Cabecera+t%25C3%25A9mporaExcel.PNG" width="640" /></a></div>
<br />
<br />
<br />
<br />Témpora Consultoreshttp://www.blogger.com/profile/09000632812723289961noreply@blogger.com1tag:blogger.com,1999:blog-8253525174733356300.post-43869124446944943632018-01-08T19:34:00.000+01:002018-01-08T19:34:23.035+01:00Mantener siempre actualizada una Tabla Dinámica en Excel (2)<div style="text-align: justify;">
Hace más de cinco años, en este mismo blog, escribí un artículo donde explicaba la forma de "<a href="http://temporaexcel.blogspot.com.es/2012/05/mantener-siempre-actualizada-una-tabla.html" target="_blank">Mantener actualizada constantemente una tabla dinámica</a>". En esa ocasión, el artículo estaba referido a que la tabla refleje constantemente los datos de la tabla origen, pero se asumía que el rango de datos no cambiaba de tamaño. Pero, ¿qué ocurre si el rango de datos de la tabla - origen de datos crece o decrece?. Esta es una pregunta que me han hecho muchas veces últimamente y, además, desde varios ámbitos (empresarial y académico). Así pues, aquí propongo un par de soluciones para este problema, pero para casos distintos.</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgL8BgMMVz4GiO-PdwYzQnjB7xsXQmOUXSeHvYk3nHYk5pwEch59ELuhZYRmgDmv-Ux1-17d0Y-39vsGdGDFEnsbCvLcnA3sHel_7p1ZIuY2Wr3-MlGmGVAMevOWl3dDXPAD-yMVru8oKz9/s1600/Actualizar+TDs.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="383" data-original-width="391" height="313" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgL8BgMMVz4GiO-PdwYzQnjB7xsXQmOUXSeHvYk3nHYk5pwEch59ELuhZYRmgDmv-Ux1-17d0Y-39vsGdGDFEnsbCvLcnA3sHel_7p1ZIuY2Wr3-MlGmGVAMevOWl3dDXPAD-yMVru8oKz9/s320/Actualizar+TDs.PNG" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<span style="color: #e69138;"><span style="font-size: large;"><b>CASO 1: la tabla origen de datos puede tener formato de Tabla de Excel.</b></span></span><br />
<br />
<div style="text-align: justify;">
Si la tabla donde están los datos de origen puede tener formato de Tabla de Excel y esto no causa ningún inconveniente, el problema ya no lo es, puesto que tan solo aplicando ese formato a la tabla-origen (y haciendo que nuestra tabla dinámica está basada en ella), la tabla dinámica siempre tendrá como origen de datos la totalidad de datos, aunque hayan crecido o disminuido.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Para aplicar un formato de Tabla de Excel a un rango de celdas donde hay datos, tenemos que asegurarnos de que no hay celdas combinadas y de que cada columna tiene un título de encabezado. Después, desde la ficha Inicio, hacemos clic en "Dar formato como tabla":</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6jDgF7aK-s-O1hI1jVjoE4V4V0sth5YydjDVUc1gAFcqRTI0KmM4ixE30LlESxARTLcYpyWjGkZBqMSlP0QKDdNos9KzK1_lSLz7yfCglgZMZpWuIF7nuDPMZ8413MyqkFAc4NeeI2Y0U/s1600/Dar+formato+tabla.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="175" data-original-width="289" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6jDgF7aK-s-O1hI1jVjoE4V4V0sth5YydjDVUc1gAFcqRTI0KmM4ixE30LlESxARTLcYpyWjGkZBqMSlP0QKDdNos9KzK1_lSLz7yfCglgZMZpWuIF7nuDPMZ8413MyqkFAc4NeeI2Y0U/s1600/Dar+formato+tabla.PNG" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Ahora, veremos que aparece una galería de estilos donde tenemos que elegir el que más nos guste. Posteriormente, debemos confirmar los datos del cuadro de diálogo que aparece... y .... ya está.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Por último, sería recomendable dar un nombre a la nueva Tabla de Excel. Lo podemos hacer desde la ficha Diseño (la ficha contextual que aparece cuando tenemos seleccionada una celda de la nueva Tabla). Podemos ver a la izquierda un campo para editar el nombre de la Tabla de Excel.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Una vez hecho todo esto, debemos tener en cuenta que...</div>
<ul>
<li><b>Si ya teníamos la tabla dinámica construida</b> y basada en el antiguo rango de datos, debemos decirle a Excel ahora que la tabla dinámica debe basarse en nuestra nueva Tabla de Excel. Para ello, debemos ir a la ficha Analizar (teniendo alguna celda de la tabla dinámica seleccionada), hacer clic en "Cambiar origen de datos..." y seleccionar la nueva tabla completamente.</li>
</ul>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdlm7dIZzF2_JOg8L_cOURk4Xj1ZtdBa0qJh759bCk_dUUR9DgnvTdy3_fCcsyWxtAQeB5G2mLJqEbHUPhpfKVKh8ADbQGeooiY7GYN2j7DC0wqi9zjALFhx4O06_aSugMLGrsNoso9b74/s1600/Cambiar+origen+de+datos.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="181" data-original-width="426" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdlm7dIZzF2_JOg8L_cOURk4Xj1ZtdBa0qJh759bCk_dUUR9DgnvTdy3_fCcsyWxtAQeB5G2mLJqEbHUPhpfKVKh8ADbQGeooiY7GYN2j7DC0wqi9zjALFhx4O06_aSugMLGrsNoso9b74/s1600/Cambiar+origen+de+datos.PNG" /></a></div>
<br />
<ul>
<li><b>Si tenemos que construir "desde cero" nuestra tabla dinámica</b>, tan solo tenemos que hacerlo normalmente, seleccionando como origen de datos nuestra Tabla de Excel.</li>
</ul>
<span style="color: #e69138;"><span style="font-size: large;"><b>CASO 2: la tabla origen de datos NO puede tener formato de Tabla de Excel.</b></span></span><br />
<br />
Si nuestra tabla - origen de datos no puede tener formato de Excel (por cualquier motivo), la solución debe ser radicalmente distinta y debemos recurrir a las macros. Aunque... ¡tranquilos!, tan solo son unas líneas de código.<br />
<br />
El proceso sería el siguiente:<br />
<br />
<ul>
<li>Hacemos clic con el botón derecho en la pestaña de la hoja donde está la tabla dinámica que debe estar actualizada constantemente. Acto seguido, se abrirá el editor de VBA con una ventana grande a la derecha. Ahí debemos escribir lo siguiente:</li>
</ul>
<span style="color: blue;"><i> Private Sub Worksheet_Activate()<br /> ActiveSheet.PivotTables("<span style="color: #cc0000;"><b>MiTD</b></span>").ChangePivotCache _<br /> ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _<br /> SourceData:=Sheets("<span style="color: #cc0000;"><b>MiHoja</b></span>").Range("<span style="color: #cc0000;"><b>B8</b></span>").CurrentRegion)<br /> End Sub</i></span><br />
<br />
<i><span style="font-size: x-small;"> Donde <span style="color: #cc0000;"><b>MiTD</b> </span>debe ser sustituido por el nombre de la tabla dinámcia (el nombre de una TD lo podemos ver si tenemos una celda de la misma seleccionada, hacemos clic en la ficha Analizar y miramos a la izquierda).</span></i><br />
<br />
<i><span style="font-size: x-small;"> Donde <span style="color: #cc0000;"><b>MiHoja </b></span>debe ser sustituido por el nombre de la hoja donde está la tabla - origen de datos.</span></i><br />
<br />
<i><span style="font-size: x-small;"> Y donde <span style="color: #cc0000;"><b>B8</b> </span>es un ejemplo, pero cada usuario debe escribir ahí la referencia de la primera celda de la tabla - origen de datos (por ejemplo, el primer título de los encabezados). Una condición a tener en cuenta es que la tabla - origen de datos no debe tener filas completas vacías.</span></i><br />
<ul>
<li> Cerramos el editor de VBA, cerramos Excel y aceptamos Guardar los cambios.</li>
</ul>
Y ya lo tenemos. <br />
<br />
La clave de este código la expresión "CurrentRegion", que es la que, de forma automática, detecta cuál es el rango de datos de la tabla, siempre que la referencia de ejemplo B8 sea una celda de la tabla. Por otro lado, comentar que el código se ha introducido en el evento WorkSheet_Activate, por lo tanto, la actualización del rango se realiza cada vez que seleccionamos la hoja de la tabla dinámica. <br />
<br />
<br />
José Manuel Pomares Medrano <br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9KQqil0ZjeEhnSJppa1gv6cCqaS4_Jlfk1qvaG8K70bJy6ZqHG6XIWzi7sWyC4EGBHgfWkhpjCUlAWaFtYMddo5w-AjylCcn8AWIvacdSJbPx1u50Zlc7A0B7FUyiaYX6HrOZt3gJedN/s1600/Cabecera+t%25C3%25A9mporaExcel.PNG" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="96" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9KQqil0ZjeEhnSJppa1gv6cCqaS4_Jlfk1qvaG8K70bJy6ZqHG6XIWzi7sWyC4EGBHgfWkhpjCUlAWaFtYMddo5w-AjylCcn8AWIvacdSJbPx1u50Zlc7A0B7FUyiaYX6HrOZt3gJedN/s640/Cabecera+t%25C3%25A9mporaExcel.PNG" width="640" /></a><br />
<br />
<br />
<br />
Témpora Consultoreshttp://www.blogger.com/profile/09000632812723289961noreply@blogger.com3tag:blogger.com,1999:blog-8253525174733356300.post-70306816959604240462017-12-06T11:30:00.000+01:002017-12-06T12:45:32.292+01:00Cómo hacer en Excel un moderno gráfico de anillo en 3 pasos<b><i><span style="color: #990000;"> Artículo actualizado el 06 / Dic. / 2017 </span></i></b><br />
<b><i><span style="color: #990000;">(Ver al final: Gráfico de anillo que cambia de color, según los valores de origen) </span></i></b><br />
<br />
No hay dashboard (cuadro de mando) que se precie hoy en día sin gráfico de anillo. Es una realidad y, sinceramente, creo que está justificada si pensamos que es un tipo de gráfico que expresa de forma práctica, limpia y rotunda un porcentaje.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyYvS9cwkPn_vIrYwKzkaV2G5aOqmLR2wV6DkNgL_vyabUMKe4u0dyl4G-ouH7d0Pi_QMeqZ7mWk71JZcTdinXD2JNHi1SFZh3BoYEb9Mf7fwu1TqhGRmNI-pgS7duN2BaPfoj2jwuraYx/s1600/Gr%25C3%25A1fico+de+anillo+terminado.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyYvS9cwkPn_vIrYwKzkaV2G5aOqmLR2wV6DkNgL_vyabUMKe4u0dyl4G-ouH7d0Pi_QMeqZ7mWk71JZcTdinXD2JNHi1SFZh3BoYEb9Mf7fwu1TqhGRmNI-pgS7duN2BaPfoj2jwuraYx/s1600/Gr%25C3%25A1fico+de+anillo+terminado.PNG" /></a></div>
<br />
<div style="text-align: justify;">
Este tipo de gráficos es adecuado para expresar lo "alcanzado" comparado con lo que nos falta por alcanzar. Esto, como es entendible, es aplicable a multitud de situaciones en el mundo económico - financiero y también en otras.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Vamos a aprender a hacer un gráfico de este tipo intentando agregar alguna particularidad que lo haga más atractivo, si cabe. Tomaremos como ejemplo, el realizado para la imagen anterior.</div>
<br />
<span style="color: #e69138;"><span style="font-size: large;"><b>PASO 1 (creación del gráfico de anillo)</b></span></span><br />
<br />
<div style="text-align: justify;">
Partimos de unos datos, que son los que proporcionan el valor a representar, de los cuales seleccionamos las dos cantidades que vemos a continuación:</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUfFPlpVTBncuDgJWfVcA1mMEgUxSKuPxTAjkWG_jwL4-vS1oNLiXK_n4VVc8q8EF_wl8sxjjP831W9lwGMQUfzqZJaUOx-I4_Vbi5Td3asrxxHfmzO74p_oRBq0vvRZhLKUkI96L-TEFY/s1600/Datos+a+representar.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUfFPlpVTBncuDgJWfVcA1mMEgUxSKuPxTAjkWG_jwL4-vS1oNLiXK_n4VVc8q8EF_wl8sxjjP831W9lwGMQUfzqZJaUOx-I4_Vbi5Td3asrxxHfmzO74p_oRBq0vvRZhLKUkI96L-TEFY/s1600/Datos+a+representar.PNG" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
Activamos la ficha INSERTAR y después elegimos "Gráfico de anillo"<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidSmKyGreM6zPhL-HcR_DWMEYRYD5jHJRI7viWcDMSTZujMXXIjHUGv9A6xD507IBnfP3qDgN6_0uP-zo9nEaOhi2ErhpwviozPpnZve9UhphK1hJY0bTUkFCLylUdubpO-1fhNBLM5FkG/s1600/Elegir+gr%25C3%25A1fico+de+Anillo.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidSmKyGreM6zPhL-HcR_DWMEYRYD5jHJRI7viWcDMSTZujMXXIjHUGv9A6xD507IBnfP3qDgN6_0uP-zo9nEaOhi2ErhpwviozPpnZve9UhphK1hJY0bTUkFCLylUdubpO-1fhNBLM5FkG/s1600/Elegir+gr%25C3%25A1fico+de+Anillo.PNG" /></a></div>
<br />
<span style="color: #e69138;"><span style="font-size: large;"><b>PASO 2 (personalización del gráfico de anillo)</b></span></span><br />
<br />
<div style="text-align: justify;">
Hacemos clic con el botón derecho del ratón en cualquier parte del anillo del gráfico y seleccionamos la opción "Dar formato a serie de datos". Al hacerlo obtenemos un panel a la derecha (si trabajamos con Excel 2013) o un cuadro de diálogo (si trabajamos con Excel 2007/10) en el que podemos ajustar el "<b>Tamaño del agujero del anillo</b>", así como el ángulo de giro y la separación de secciones:</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRW0yGnTqr1ZB3uLzsRpsf1PNtLCwt3nRp8Iu6RXxZVj3srly0fnP1trUh_0Ff-OBBdTj2-B6JyoPrwk9auQI06urqQ1e8UUOc9jm-YAUF_IpszQUjMZdZcvcN3mTzot-Iiy25_SscPU3z/s1600/Ajustar+ancho+de+gr%25C3%25A1fico+de+anillo.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRW0yGnTqr1ZB3uLzsRpsf1PNtLCwt3nRp8Iu6RXxZVj3srly0fnP1trUh_0Ff-OBBdTj2-B6JyoPrwk9auQI06urqQ1e8UUOc9jm-YAUF_IpszQUjMZdZcvcN3mTzot-Iiy25_SscPU3z/s1600/Ajustar+ancho+de+gr%25C3%25A1fico+de+anillo.PNG" /></a></div>
<br />
Hasta ahora tenemos...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj084DsCDktqMr3OO9aA8BQ_ptQUH-tZXCN1B0X0ZS-EVxJ9XEWjr0IQ7lRtjFDJuZ3igI0DdEVevGv2S70Rmj9xcy4GsO_Ywn92SBjTpPyLYQ70uo_dFU2sNMK95pK-2Jm_cBpv1tO0Vle/s1600/Gr%25C3%25A1fico+de+anillo+hasta+ahora.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj084DsCDktqMr3OO9aA8BQ_ptQUH-tZXCN1B0X0ZS-EVxJ9XEWjr0IQ7lRtjFDJuZ3igI0DdEVevGv2S70Rmj9xcy4GsO_Ywn92SBjTpPyLYQ70uo_dFU2sNMK95pK-2Jm_cBpv1tO0Vle/s1600/Gr%25C3%25A1fico+de+anillo+hasta+ahora.PNG" /></a></div>
<br />
<div style="text-align: justify;">
... pero nenesitamos deshacernos del título y de la leyenda haciendo clic con el botón izquierdo del ratón en cada uno de esos elementos (para seleccionarlos) y después presionando la tecla "Supr".</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
También sería conveniente seleccionar desde el borde todo el gráfico y eliminar el relleno (que es blanco hasta ahora) y el propio borde que viene por defecto. Para cambiar estas dos características, debemos tener el gráfico seleccionado y activar la ficha FORMATO para después utilizar las herramientas de "Relleno de forma " y "Contorno de forma" eligiendo, respectivamente las opciones "Sin relleno" y "Sin contorno":</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTIs1QBS-_l7YFGsUZu-PiRTG0RLgq2ztWNMMfRx7SbLDuLfoDPyvOSzmNI6R2y6bDOH7oi-Tw5JG3HqPef6APQd9iGA6WjagKfRo7S2F56TLL0SnXhcYHIZvas2_kn15w2knAGRk9zAXy/s1600/Eliminar+fondo+y+borde+a+gr%25C3%25A1fico+de+anillos.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTIs1QBS-_l7YFGsUZu-PiRTG0RLgq2ztWNMMfRx7SbLDuLfoDPyvOSzmNI6R2y6bDOH7oi-Tw5JG3HqPef6APQd9iGA6WjagKfRo7S2F56TLL0SnXhcYHIZvas2_kn15w2knAGRk9zAXy/s1600/Eliminar+fondo+y+borde+a+gr%25C3%25A1fico+de+anillos.PNG" /></a></div>
<br />
Has aquí tendremos esto...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg26hog7MHEnvJJiU0_U-ydvaRgCBLi2d0YSZamsqYIsbMa6ZMngD1f_aIBT3otPNIu1ayV_vmI43ooiv35KuuImfXWPAn5R2BRMnmsniJ5uuEeUggHm35Wa3X4T8FBhEhzGt3qfNxyFbKe/s1600/Hasta+ahora%252C+el+gr%25C3%25A1fico+de+anillo.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg26hog7MHEnvJJiU0_U-ydvaRgCBLi2d0YSZamsqYIsbMa6ZMngD1f_aIBT3otPNIu1ayV_vmI43ooiv35KuuImfXWPAn5R2BRMnmsniJ5uuEeUggHm35Wa3X4T8FBhEhzGt3qfNxyFbKe/s1600/Hasta+ahora%252C+el+gr%25C3%25A1fico+de+anillo.PNG" /></a></div>
<br />
<div style="text-align: justify;">
... pero sería más estético si elimináramos la cuadricula de Excel desde la ficha VISTA (NO teniendo seleccionado el gráfico y después desactivando la casilla de verificación "Líneas de cuadrícula") y también si redujéramos el tamalo del gráfico desde cualquier manija de las esquinas.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
También podemos personalizar el color de las secciones del gráfico. Basta con seleccionar cada una de ellas con dos clics separados (para que quede seleccionada una sección sola) y elegir el color desde la herramienta "Relleno de forma" que conocemos de pasos anteriores.</div>
<br />
<span style="color: #e69138;"><span style="font-size: large;"><b>PASO 3 (título y círculo central del gráfico)</b></span></span><br />
<br />
<div style="text-align: justify;">
Para el título, elegimos una celda que esté situada en la parte inferior del lugar que elijamos para el gráfico y simplemente lo escribimos y aplicamos el formato deseado.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Para el círculo central, debemos activar la ficha INSERTAR, después elegir "Elipse" y a continuación extender el cursor en diagonal PRESIONANDO AL MISMO TIEMPO LA TECLA "MAYÚS" para que la elipse sea un círculo perfecto.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Una vez hecho esto, y asegurándonos de que aún está seleccionado el círculo, ponemos el cursor en la barra de fórumulas y escribimos una fórmula que haga referencia a la celda donde tenemos el porcentaje (INTRO cuando ya esté escrita la fórmula):</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPGFMPx41UmQP8BUyVBnXDJVp02KMqbWcg45bL2mOZjBuzbMehoURIAl_6ZovhkX6goyRFdiJDeV-R2Fa2fkbSd6-fVus5lHUhc-89hhlAFxASOdVhtL2nTPsledMgkyn8wg5U27LBsfXh/s1600/Hacer+c%25C3%25ADrculo+para+gr%25C3%25A1fico+de+anillos.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPGFMPx41UmQP8BUyVBnXDJVp02KMqbWcg45bL2mOZjBuzbMehoURIAl_6ZovhkX6goyRFdiJDeV-R2Fa2fkbSd6-fVus5lHUhc-89hhlAFxASOdVhtL2nTPsledMgkyn8wg5U27LBsfXh/s1600/Hacer+c%25C3%25ADrculo+para+gr%25C3%25A1fico+de+anillos.PNG" /></a></div>
<br />
<div style="text-align: justify;">
Ahora, con el círculo seleccionado aún, y desde la ficha INICIO, podemos:</div>
<ul style="text-align: justify;">
<li>Utilizar las herramientas de tamaño y color de fuente para personalizar el porcentaje</li>
<li>Eliminar el borde del círculo (teniéndolo seleccionado, desde la ficha FORMATO / Relleno de formato)</li>
<li>Alinear el porcentaje correctamente (centrado vertical y horizontalmente) desde los botones siguientes de la ficha INICIO:</li>
</ul>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfpWr2hW1GiQeOhwUoKXDuDc1o0ZfIDPPPuy025poCgeaeH0J4Zn8otIEUgFawJQZyoi8l_rLge0tATp6lcAVGIdGIn9bTvo5sb71V0v55Mgy69P00xdVq7huweKuBAu2z0t5Y7851OfWU/s1600/Alinear+porcentaje+gr%25C3%25A1fico+de+anillo.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfpWr2hW1GiQeOhwUoKXDuDc1o0ZfIDPPPuy025poCgeaeH0J4Zn8otIEUgFawJQZyoi8l_rLge0tATp6lcAVGIdGIn9bTvo5sb71V0v55Mgy69P00xdVq7huweKuBAu2z0t5Y7851OfWU/s1600/Alinear+porcentaje+gr%25C3%25A1fico+de+anillo.PNG" /></a></div>
<br />
<br />
<div style="text-align: justify;">
Una vez hecho lo anterior, solo queda centrar el círculo sobre el gráfico y también colocar todo encima de una celda que contenga el título deseado:</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTClxpyMNNfY8NV8I6obQtp_Mobqm0lQ2iM6BP9jv1411QuDfgX7o6af1oUHvZ23c-isIqvTF68S9I1TbEy18o2O4tjc_IWOhHPzePWi-853Rlvt7jTD5_xVybqYO1qcGkBFKVYwgUavOF/s1600/Gr%25C3%25A1fico+de+anillos+2.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTClxpyMNNfY8NV8I6obQtp_Mobqm0lQ2iM6BP9jv1411QuDfgX7o6af1oUHvZ23c-isIqvTF68S9I1TbEy18o2O4tjc_IWOhHPzePWi-853Rlvt7jTD5_xVybqYO1qcGkBFKVYwgUavOF/s1600/Gr%25C3%25A1fico+de+anillos+2.PNG" /></a></div>
<br />
<br />
<span style="color: #e69138;"><span style="font-size: large;"><b>El espacio de Mac</b></span></span><br />
<br />
<div style="text-align: justify;">
En cuanto a las diferencias en Mac respecto de todo lo dicho hasta ahora, diremos que:<br />
<br />
<ul>
<li>Para crear el gráfico debemos ir al siguiente menú (eligiendo la opción "Anillos"):</li>
</ul>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirI4P4zcheWy5ZR2yfBPtL9miGPL00r6Y7lFC1niItKHfax0FRD7F303511alPLZDW9CL3GTwxp1QlbN4z0BkKtjrcZ3B0AQs9gVROcYsM12uJwq7trlw63D1OFyHw3GZB7sJca6gK0JEM/s1600/Captura+de+pantalla+2015-09-15+04.15.54.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirI4P4zcheWy5ZR2yfBPtL9miGPL00r6Y7lFC1niItKHfax0FRD7F303511alPLZDW9CL3GTwxp1QlbN4z0BkKtjrcZ3B0AQs9gVROcYsM12uJwq7trlw63D1OFyHw3GZB7sJca6gK0JEM/s1600/Captura+de+pantalla+2015-09-15+04.15.54.png" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div>
<ul>
<li>Para crear el círculo central, podemos ir al botón (que vemos a la izquierda de la imagen) que activa el cuadro de diálogo "Multimedia"...</li>
</ul>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIcgvYAqhsGBLVdQ9_QU2pNrKbN-jtkvhiwrkLmJDaJXMf5avJ9VLvU7XYQhk6CKbDtaR8wgQ7hHTwF6n3xd-Y2J4aDr3ePsdwftVXFUuqMTjErggJSPcBr0pGBFZ6m1IG0GN3NnBQydlN/s1600/Captura+de+pantalla+2015-09-15+04.28.17.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIcgvYAqhsGBLVdQ9_QU2pNrKbN-jtkvhiwrkLmJDaJXMf5avJ9VLvU7XYQhk6CKbDtaR8wgQ7hHTwF6n3xd-Y2J4aDr3ePsdwftVXFUuqMTjErggJSPcBr0pGBFZ6m1IG0GN3NnBQydlN/s1600/Captura+de+pantalla+2015-09-15+04.28.17.png" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
</div>
<div>
<br /></div>
<div>
... el resultado es, por supuesto, similar:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlBbl8lWF627dGPgG324BdWThNlocUByNAhcfecNUZw6rO5VY_QgXZJUU0Aj2RaYhP3aNmiLvCu-px5S-z6ZUVecygtCgYd3NGKmoYEY5fGRztKwbYhFz_zjeEFm7QpJrWxgqhL_rCQ9pk/s1600/Captura+de+pantalla+2015-09-15+04.38.49.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlBbl8lWF627dGPgG324BdWThNlocUByNAhcfecNUZw6rO5VY_QgXZJUU0Aj2RaYhP3aNmiLvCu-px5S-z6ZUVecygtCgYd3NGKmoYEY5fGRztKwbYhFz_zjeEFm7QpJrWxgqhL_rCQ9pk/s1600/Captura+de+pantalla+2015-09-15+04.38.49.png" /></a></div>
<div>
<br /></div>
<div>
<br />
<span style="color: #990000;"><i><b>Actualización 6/12/2017</b></i></span><br />
<br />
<br />
<div style="text-align: left;">
<div style="text-align: left;">
<span style="color: orange;"><span style="color: #e69138;"><b><span style="font-size: large;">Gráfico de anillo que cambia de color, según valores de origen</span></b></span></span></div>
<span style="color: orange;"></span></div>
<br />
A petición de un lector en un comentario de este artículo, lo he actualizado para mostrar cómo es posible obtener el efecto de un gráfico que cambia de color cuando los valores superan o no alcanzan una cantidad.<br />
<br />
Para conseguirlo, debemos realizar, en principio, todo lo que se muesrta en la imagen de abajo...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSDMKPmEhCNmXoO5NYUwVQwm4jgzbOIlAhqfaySjIz3kJK2QYNmlGixmLGBkx4AlhUODopROvi0JWrzB6pPPCIKuD3Ef6898CupOKq0J1V_u-f4FeVs5X1N8sWHsQFaxUdbkS_5CwQXdys/s1600/Anillos+dos+colores.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="670" data-original-width="405" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSDMKPmEhCNmXoO5NYUwVQwm4jgzbOIlAhqfaySjIz3kJK2QYNmlGixmLGBkx4AlhUODopROvi0JWrzB6pPPCIKuD3Ef6898CupOKq0J1V_u-f4FeVs5X1N8sWHsQFaxUdbkS_5CwQXdys/s1600/Anillos+dos+colores.PNG" /></a></div>
<br />
... son dos gráficos de anillos exactamente iguales (especialmente en tamaño), excepto tres cosas:<br />
<ul>
<li>Uno tiene como origen de datos las celdas D2:D3 y el otro, las celdas D19:D20</li>
<li>El otro tiene la porción de anillo protagonista de color naranja - rojo y el otro la tiene azul</li>
<li>Un gráfico no tiene color de fondo (está sin relleno)</li>
</ul>
Las celdas de origen de datos tienen unas fórmulas que, dependiendo de los valores que hay que evaluar (celdas B19:B20) no devuelven un valor de error o el valor que se debe mostrar. Puesto que cuando los valores son errores, el gráfico no puede mostrarlos... ese gráfico se convierte en transparente y deja que se vea el otro gráfico... que sí tiene valores. <br />
<br />
Finalmente, tan solo queda poner un gráfico (el transparente) exactamente sobre el otro para que el efecto sea la visualización de los datos para uno de los casos....<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEig5YVdC9tqEH6vXfkuafJ6VN702FektCHLs14wLHrBTCJ4ZZb6j8giuRVXFXHe_htGUr66dVzCjEJl4I8TAY8nO_Xab9GYIYZCaO6B_sDt259QH4uUk1P9zOd6Lfc32vvAmeZqOwNvx9Fu/s1600/Anillos+dos+colores+2.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="431" data-original-width="398" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEig5YVdC9tqEH6vXfkuafJ6VN702FektCHLs14wLHrBTCJ4ZZb6j8giuRVXFXHe_htGUr66dVzCjEJl4I8TAY8nO_Xab9GYIYZCaO6B_sDt259QH4uUk1P9zOd6Lfc32vvAmeZqOwNvx9Fu/s1600/Anillos+dos+colores+2.PNG" /></a></div>
<br />
y la visualización de los datos.... para otro de los casos...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9AcDWL7y08IPyZRKHsnkAqPU97FBNd_QIf9ET1hQVMctxRnxEoxLYaQEkoAQZ8pyuf_z-izIXay5G4YPUO5HpX8ow3v8gnrGZS5sjhvNGdtpHPvSAlE-LXpRiKogFUdcya63AWJ5omrar/s1600/Anillos+dos+colores+3.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="437" data-original-width="398" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9AcDWL7y08IPyZRKHsnkAqPU97FBNd_QIf9ET1hQVMctxRnxEoxLYaQEkoAQZ8pyuf_z-izIXay5G4YPUO5HpX8ow3v8gnrGZS5sjhvNGdtpHPvSAlE-LXpRiKogFUdcya63AWJ5omrar/s1600/Anillos+dos+colores+3.PNG" /></a></div>
<br />
<br /></div>
</div>
<br />
José Manuel Pomares Medrano<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9KQqil0ZjeEhnSJppa1gv6cCqaS4_Jlfk1qvaG8K70bJy6ZqHG6XIWzi7sWyC4EGBHgfWkhpjCUlAWaFtYMddo5w-AjylCcn8AWIvacdSJbPx1u50Zlc7A0B7FUyiaYX6HrOZt3gJedN/s1600/Cabecera+t%25C3%25A9mporaExcel.PNG" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="96" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9KQqil0ZjeEhnSJppa1gv6cCqaS4_Jlfk1qvaG8K70bJy6ZqHG6XIWzi7sWyC4EGBHgfWkhpjCUlAWaFtYMddo5w-AjylCcn8AWIvacdSJbPx1u50Zlc7A0B7FUyiaYX6HrOZt3gJedN/s640/Cabecera+t%25C3%25A9mporaExcel.PNG" width="640" /></a></div>
<br />
<br />
<br />
<br />
<br />Témpora Consultoreshttp://www.blogger.com/profile/09000632812723289961noreply@blogger.com17tag:blogger.com,1999:blog-8253525174733356300.post-14474230236647845892017-11-21T03:16:00.000+01:002017-11-21T03:18:57.354+01:00Trabajo con arrays en VBA para Excel<div class="separator" style="clear: both; text-align: justify;">
Un array (arreglo, matriz o composición ordenada) es una variable que puede almacenar y gestionar varios valores colocándolos en la memoria RAM de nuestro equipo en forma de matriz. Los arrays pueden tener una disposición matricial de una dimensión (como una simple lista de elementos), de dos dimensiones (en modo tabla, donde las filas son una de las dimensiones y las columnas la otra), pero también pueden tener una disposición en tres dimensiones (como un cubo) o incluso en n dimensiones.</div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="about:invalid#zClosurez" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgsAAAEjCAIAAAAzKtVfAAAgAElEQVR4nOydd1QU19vH0STm96ZjBelFUEBAQKVX6R1EwBq7WLA37F2MvaKx9xI1mmDvxBJb7NgrSi9bptw28/4xsNnsrgYjSsr9nD0nnmV35u7s5vnOU6+eSKFQKBSKLvRqewEUCoVC+ZtCFYJCoVAouqEKQaFQKBTdUIWgUCgUim6oQlAoFApFN1QhKBQKhaIbqhAUCoVC0Q1VCAqFQqHohioEhUKhUHRDFYLyd6GkpCQ0NFTvj2RkZNT2uiiU/y5UISh/F7Zt26ani2vXrtX20iiU/yhUISh/F5KTk3UqBHUjKJTagioE5W9BSUmJTnnQ09OzsrKq7dVRKP9RqEJQ/hZohJisrKxooIlCqXWoQlD+FqjnqK2srDIyMmigiUKpdahCUGqfR48eaejBtWvX1J/R19ev7TVSKP9FqEJQap+srCztmJJGoCk7O/t1b8/MzFS9bNu2baIolpSUpKWl6evrSx6J+ntVzoq+vr50omvXrqmS5G5ubo8ePZJeWVJSsm3btoyMjNDQUI3FhIaGpqWl5eTkaKzEzc1N9Ro3N7eSkhKdC87OzpbWpr08aT0ZGRnqh7KysgoNDc3KylKtjUL5MFCFoNQ+GtZQelIj0JSWlva6t6tHqDIzM69du6ayvyqDrnqx+vM5OTnaJbaZmZmiKObk5GgcRCehoaHqMqDxV0mu3rxgjZdpfGrt073jpaZQ3gqqEJRaRjvEJD1f/UCTusFVuQ6vM6wa59K2wpJCqPslb0b94Glpaep/Sk5O1l6tdtWWSmM03v7mc1EoHwCqEJRaRsMWq5ctVTPQpN2J/QbD+if2/u0VQn3NOTk5Gn/SjgtpeC0qFdF+75s/CIXyAaAKQall1GVAo/WhOrfkYjUUQv2Nf2qFs7KyxCp7HRoampmZmZOTox5KUs8iSEiiov1xVEdTR6MxUBVi0tCkrKws1UmvXbuWlZUVGhr6uitAobwnqEJQahONUJJGVWt2draG+daZ+9VWCH19fZWFzc7OVvdLtCVBlSuWUtOvSy+ro+EHqN/aaxh6Nzc39Te+IcSk8UaalKb8HaAKQalNNDIB2p1xGnfrOnO/GgqhKlLSiYaBfkPF0RvQiAipK4RGWkXjQ2lIi3r6XVtaqEhQah2qEJTa5A0hJonqBJo0FOINdbGilkL8qTxkZ2frLHh9nUJor0fdMdL4OOpL1ZmHSE5OrqZbQ6G8D6hCUGoNjRCTznrW6gSaNCyydpuCOhpHe8Mrc3Jy3qAKb1AI7Qkiqj+pu0Ta1Vmvq2XS19dPS0ujOkH58FCFoNQaf1rcqRPt3O/7UIjXjSLXiXaJkUZwTPIVNNROpyK+oR9CX1//ze4RhVLjUIWg1BrVaUnTRiP3K74HhSgpKXmrtWkrhIb4SWLwhhCTOo8ePXqDM0GTE5QPCVUISu2gHT6qPhpWssYVQmejtXrC+Q2Zagntdj8N1fnTSVNSYZV6t7nEG3rLKZQahyoEpXb4ayEmCY1AU40rhEZZkXq7g8SfKoT4x1EikmX/a4ZeYzG0aY7yIaEKQakdNMI4bw6eaHSZaVQ9vW+F0C6x1cgW6LTaGuMINXirHS+oQlBqC6oQlFpAI4yjnVp48+s1LGyNK4SGcXdzc1MdMzs7W7tBT6fVfttd89LS0qSNMbKzs1VlS9o5CaoQlA8JVQhKLaDhE2iXJ2mg3Yam3mRQ4wqhfbo38zqr/bpIms4Nkf50dojE6+bFUijvA6oQlA+N9s11dUIuGmF99dvw91Ht+uYp3Bq8TiFel43X+XmroxB/6mxRKDULVQjKh+YNDWVvQDusr7Kz70MhSkpKNBwddZKTk9Ul5A2RH+2eu9d93j9N3ScnJ9OmOcoHhioE5UOjfmctjdirzrsePXqkbm3Vhy+pJ5atrKze7JGoy8mf3pLn5OQkJyer7weXnJwsKZC6zr2hMEk7g/K6PbdLSkqysrKSk5M1BC80NFTalvVPLhCF8h6gCkGhvEe0Uxq05Y3yD4IqBIXyHnnzMHAK5W8OVQgK5T2i0fZRzZAahfI3gSoEhfK+0E5C0BAT5Z8FVQgK5X2hnXOu7RVRKG8HVQgK5b2gMbxPjza7Uf6BUIWgUN4L2dnZqiSEvr4+7Wag/BOhCkGhUCgU3VCFoFAoFIpuqEJQKBQKRTdUISgUCoWiG6oQFAqFQtENVQgKhUKh6IYqBIVCoVB0QxWCQqFQKLqhCkGhUCgU3VCFoFAoFIpuqEJQKBQKRTdUISgUCoWiG6oQFAqFQtENVQgKhUKh6IYqBIVCoVB0QxWCQqFQKLqhCkGhUCgU3VCFoFAoFIpuqEJQKBQKRTdUISgUCoWiG6oQFAqFQtENVQgKhUKh6IYqBIVCoVB0QxWCQqFQKLqhCkGhUCgU3VCFoFAoFIpuqEJQKBQKRTdUISgUCoWiG6oQFAqFQtENVQgKhUKh6IYqBIVCoVB0QxWCQqFQKLqhCkGhUCgU3VCFoFAoFIpuqEJQKBQKRTdUISgUCoWiG6oQFAqFQtENVQgKhUKh6IYqBIVCoVB0QxWCQqFQKLqhCkGhUCgU3VCFoFAoFIpuqEJQKBQKRTdUISgUCoWiG6oQFAqFQtENVQgKhUKh6IYqBIVCoVB0QxXiLcAY1/YSKBQK5cNBFeLPyc3NXbBgQVhYWJs2bWJjYzMyMg4cOFBQUFDb66JQagGMMQAAAAAhFARBelIQBOnfhBCWZZVKJcuyCCHVuwghqNoQQtRPJz2j/qQ6giBIf8VVIIQAAHK5XCaTKRQKpVLJMAzHcTzPcxzHsixXBc/zPM8DADDG0kEENd7nVfzHQBVCN4Ig3LlzZ8GCBX5+fp988omenl7dunX19fXr1q2rp6enp6fXqFGj5OTkbdu2Uamg/JdRWVJJAzTsuMp8v63BVUkChBAA8Dp5ENUUCwDAVyEpAcuyPM8DHgAAEELSK1WqIIkchFD6k7ZIvP3F+BdCFUKTu3fvLly40N/fXxKGjz76yNvbe86cOTdu3CgpKcnNzd21a9eAAQOaNWsmSUXjxo27dOmyb9++8vLy2l47hfIeUTeakg1FCPE8L/kKkpFVeRKS2ZVsruQZvNW5CCEAQpUwYIwhRBpWWxBEgQg8AAzLsizLMNJ/WYZlOZ7XkC5JaSQ90JAEQjDCCGGECSYEY4Kr9EkQxT/qhPC7tySJ379eSKhCiKIoEkIkj0ElDHXr1vX29v7uu+9u376t80fAMMypU6eGDh1qbW0tSYWpqenAgQNPnTrFcdyH/wgUyj8R1Q07UVlrjDEmmAhEEBERMRExERESIRQJESSbTQQBYcxyvEymrJDLZQqFXKlQsgzLczwEAEGIESK4mg+IAY+UADNI4LEAEAY85JQsgzArCBwhPBGQKAiiIGIkAA4jhEVRxBirImmS2NT2tXwv/NcVQvIYVKGkjz76yMvLS/IYqpmXlsvlhw4d6tWrl6GhoSQVjo6OkydPvnbt2r/+/oJCqSnUEwA8ABwPMBEEUSREwIQQgRCRYIFggSCCeQiULFMhl5WWl/EAiKIoiCIWCEBQeryVQmABEwETAWNS+YAIA4QA5DheyXIKCHlRlKxBpVchSZrki4h/9K7+ZfwXFUIQhNu3by9cuDAgIEDDY7h169Zf/rKLioq2b9+emJj45Zdf6unp1alTx9fXd/HixY8eParZ9VMo/wWqQjxEFAEkcg7IeMgxHCtXyhWMkocAIMDyLMKYiAImBCDIAR4giAjGgiBpSfV8CMxDwgPM8YjjEUQEYYEIIsKY5wHP8wgBiFiIGIgVmHBiZdSrMoHxL5YH8b+mENo5hrf1GKrDkydPli9fHhAQ8NFHH+np6X3xxRdxcXHbtm0rKiqqqVNQKP9iiCASQcRE4ABXVlH09MXd67fPXr2R8/DJ3cLiAgUj4wADEAcxjwhEBAMMWZ5TsoySZXgIiCgQUay+D4EwQVhEWARQgEjAhBBREERCBBEgwkFeziryi1/cf3Lr/pPreQUPFQqFRlpFStH/K6Xi368QqqqkgICAevXqScLg4+MzZ86cmzdvvtcv9ebNm9OmTXN2dpaiTwYGBr179z569CjDMO/vpBTKPwjhj0ipCI6HDAsZli8sLrx6/dLuvVsWLJ4xd8G0Xbu3Xrh49nneEyUrwwIgIhREhAUEMQII8hDwEECMiCgQUXibPASGSIBIRFjABGMBIoFHAssAtlwpK64ofpL3+OTZY6vWL81cMHXhsu9279mdm5srk8mkEilBECCEkjPx7xOJf7lCnDlzJigo6PPPP5dCSZ6enpmZmTdu3PiQaSWe58+cOTNkyBAbGxsp+uTo6Lhq1aoPtgAK5W+L1L4Aq5CKUBmWVyg5hZKtkMtf5b+6dv237IM/rVqdNWPW1Bmzp65cvfzIsQMPHt8tlxUr2QqWV3KAhxhJ9/CSNrxVHgKRyrCSKIpEhDySy5QFRWVPHz67c/rCiS0/bJy3ZM6Q0YNSuiUldUnoP6TfypUrL1++XFpaqmr7UHVs/PsqZf+FClFeXn7gwIERI0aMHTvWxMRET0+vXr16gwcPvn//fu0u7Mcff2zRooXkT9StW3fv3r21ux4KpXYRBAECKDWvsVWVqgzDAAgRJlLwB0CBYbFMxue9zD974cy2nRvnzJuRMWHUtJmTNmxefeL04YePHxSXlsqVSlgVKEaESNmIP01QV/1DIIKACOSAsqg079bdX4+e3L1jd9b85dPShnePTg6J7xjdZ3DPSbMnb9i+KefXs48fPy4tLWUYhmEYlmEBD35XiCqREP8tGvHvUYjCwsK9e/f26NHD1NRU74/UrVvXyspq4MCBp0+fBgB8yFUhhC5fvjxhwgQnJ6ePP/5YfVWGhoZ+fn69evU6dOiQXC7/kKuiUGoQgYjCHyp9REFqVlBrKCACgRhpPqS6IwQBrKxBAhAACBHGVWVLBCIMEEZYFEQRYlhaXnLzzs0ff/px4eIFY8ePTR8yaPqsaVu2bfzl/OlHT++Xy4sAViJBCQmDCeER5CHAhGBBgBgjQnggQCgSIgJIOB5gQcACrlCUvSx4nHv/t+Onf/5+3eKMCUN79E5N7hid0jmhZ99vJ04dv2XH5guXLzx58bRCKUcCwQKBCAEI1Ctr8e8PUvkQCBaIoAuEgCAgUcSiiIkAEeIFAUltgqqEqNTfV+vuyD9eIfLy8rZs2ZKcnNyoUSPJ8hobG/fo0WPXrl3Dhw/Xloq2bdvOnz//8ePH73tht27dyszM9PDwkJIf6nz22WcGBgYNGjT44osvpGeaNWs2YsSIc+fOfWABo1Cqw2vMHOI4DiGEMYEAVna0CSJEGGJC1BQCEwEgxCOg8ajOnf7v2QKCAIJYIEQQlAzz5NnTU2dOb9+5Y+qMycNGpI+bMHrewtm79my+9FtOXv6DckWBXFGuYGQMp4CIJwLCAuQhCzFCGEEMWF5ZJisqKH6Re+/64WP716xfMmnqqK7dk6LjQ5M7JgwdPnD2nOm7dv9w7sKFp8+eyRUKHkKI0FstWHoQ3SBRxJJICAIiBBICIQSECLCqT/Bv0pH3T1WIhw8frl69OiYmRl9fXzKyNjY2gwYNOnToUFlZmeplBw8e7NSpU8OGDTVsdIMGDVJTU3/66SeFQlGzC3vw4MHSpUsDAwOl5Ic6n3zySZs2bWbMmHHjxo38/PyXL18+f/58//79Xbp0Ucmbi4vLjBkzbt68WbOrolDeBdXII1WoXRRFQRAqaz0FkUgWDgAIISa/ywMmAs9DqZlN1ayg/qi+qeUhkCsVHOCJKIiiSASBB0CmkN97cP/QkUMrVi7LmDA2fUj/kWOGLlg8Z8/+nb9ePnf/0Z0Xr54UFOeVyYplyrLisvwS2bNnr27evnfu8vUT2Ue2L1s5e8SYvqldYmITwhOSYnr07jp1+qSdP+y48tuVp8+fKVlGqmvCAuEhYDgWIFD9ItrKEJZuKlVAdYUJEaRGPNW4kb9JSuOfpBCCIOTm5i5ZsiQkJOT//u//JJPq4OAwcuTIkydPvsHWP3nyZOHChe7u7lL5qToODg6TJ0++devWO67t5cuX69evj4mJ+eabbzROUadOnZYtW44dO/bChQuvcxFevXq1cePG6Oho6XN99NFHQUFBWVlZz549e8eFUSjvjhT90LqllYJJBBOEBSxUFqkSIgoAQY7nlSyrZBmGY1Wtzu+iEFLBkpRRroxciQIiGAsEQFheUXEnN3f7zu2jx47qkNo+KTl+0ODes7+bvHnb6sPH9p05e/RUzuFjJ3/e89P6BUvHj5nQZ+DQLimdI8OivaPj2vXu123+wu927d515berhcVFHM9LH5UIglQWRURBOjtAEOG38yFeow+adl8QREIIx3HqUSae52t9nvQ/QCEQQlevXp09e7a3t7fUx6Cnp9emTZvJkyf/+uuvPM9X8zgQwjNnzqSlpRkbG2sY8S+++CIqKmrbtm2lpaVvtbbi4uJdu3alpqY2adJETwsbG5vBgwefOnWq+uWtDx8+XLhwoZeXl3SEr776KjExcceOHbSXgvJ3AxPEYw6JEIsIi4iByqKywpdFL0vLS2UKuUwhV7AMy3MqGdCRh3i7iqPK5ITGg+EAwwKERUEQFIziwsUL02dOjYoJ8/RxCYv0Gzi417yFM5ZlzVu0NHPxsjlTpo9JSolybevQys2+jYdbQlLCosVLLl+5VlZexgFeEkCpN0Ko6qggoqAKl0k68e4KIYoCxoTnIYRY0lyEiDRqVjUtSvx7tGr/fRWC47gLFy5MmjSpdevWkrmsV6+ej49PZmbmb7/9BiH8y0fOz89fu3ZtUFDQ//73Pw2bbmlpOXz48IsXL765HFYmkx04cKBXr15mZmbawiAlQrKzs2Uy2V9bIcb4ypUrEydOdHBwkI5paGgo5bRrPCxGobwtlTMnCIICwCKSs7Lch3eOnDz8Y/beY6eOPnzyoEJeDhBPRCKIBBHIcAzDMe+oEBAjDvAMx0pOCctzHOB5CBAmWCAQA0yQIOLi0vyfDuwdMXpIu1D/Fg7NWjg0a+vp4uXb1jfAMzYhIrVjipe3j0NLx+CQ8N59BsxfuOzqbzcBhIJIIIYAAYgwEUSEBY7HHM8zHKtglEqW4RGQ3BcivEWnBSJY53hzjmM5juE4RqlUMIwCAF4UiSiqjymEqlBerX7Vfz+FUCgUJ0+eHDFihJ2dnWQcP/vss5CQkCVLlty9e7cGTyQIwpUrV0aNGqWa0qqiXr16/v7+K1eufPnypfpbOI47derUkCFDtN+ip6fXuHHjDh067Nixo7CwsKYWyXHc6dOn09PTLSwspLNYW1tLOe130UgK5W2RVAFCyHGcUqmUy+VFJUUPXzy4fPPSxh0b+g9Ni0yIaN8pcdSEkZu2bjx15mTuvTtlFaUA8TzkFIxcySrfzrBq34yTyviSlBhQdcmxvJIDSkR4HikLS16cv3jq+3VLMiYM79a9k1ubVo0NGzZo9E2jJvWNTQ0dHFs4tXIxt2jW0rFVasfOEydNWb12zbkL54rLirAAsAAA4gACECMeQLmCQRgLoggQlKJkWCBv1Yj3eoXALFsBkYIHspevHl++cvaXs8dz714rKs5TKivv/1RTPXier92ZgH8XhWAY5uDBg+pTtfX19ePi4tasWfO+647Ky8t37twZFxf31VdfaRj9pk2b9u7d+9SpU1LFqrOzs3Ym45tvvomKilq7du3z58/f6yL37dvXpUsXVda9devWs2fPvn379vs7KYUiIU2pAwAwDCOTyUpLS4uLi4tKCovkha9KX56/en5R1sLOPTv5h/r5BfsmJMUOTE9buHje4aPZ9x7cLi0v5IASEYCIrhwvxvCPkX34+kC/VFoKMZLu91meVbJKubKssPTl/Ue3c84d37B55YTJI/qnd+/Ru3N0bIyLm6u1TTM7B4dWri6tXFwcnZ3cWrdxcnbx9PbqkJLYvVeXwcP6L1kx58iJ/Xcf3CgsyeOAQhCRIEqtEghixHCsTC6XK5U8hJIfI7Vt63Jxfvd11KNqVUCEIKrsDgSl5fnP8u5evHxq05ZVGROG9U3rmjbg2/ETRx0+fPjlq1eYEIwxwzC82gzz2qL2FSI/P3/BggXe3t6qEE1qaurWrVvz8vI+8Epyc3NnzJjh7OysynZI1K1bV+MZybMJDAxcsmTJw4cPP+QiX716tX79+oiICCmn/fnnnwcHB69cubKkpORDLoPyLwBhDDGSIifSjbnqPl16EhOCMOYAX1hclPfqZUFRYUlZqVypkLILUtW/FPBRssy9B/c3bdmcPiQ9Oi7Uy9fFv517tx7Jk6aOXrth+amcQ4+e3K+QKXgAERYQFjgeQoQhIgzHMywPIJKSw9JMbwAREQQAMQ8JRAIPqrZuIBARHgpKgGVypuBl4b3cBxePn9mzZefyzHnj+qd/2yE1NjYhKiEpvlv3HmPHTZw7b9GGjVuzDxw+dfqXX87+mpNz4ejx4/t+2r9uw/rpM2f0HzigW/dve/XpPWTY4JlzJm/ftf7Xy6efv7yvYIohknOwTMkpK2SKCpkCQIyJABHhpVQ1kf5BBFFEmACEiCAqGQYRhAiSKWQc4CGCCkYpVyo4wGARMHxFSdnL0ooXT/Nu5Zw/sHHrihmZGX36d05IigiNaBcS1i4puf2wEcN+2LP7/K8X8l69lBI5SpZBBKv2qdB4aKDe1F2DP5JaU4jHjx9///33sbGxlpaWKrPbqlWr06dP19aSJAAAixcvbtCggXYcSaUNY8eOvXfvXu2u88mTJ6NGjVI1W/Tq1at210P5Z6Haa0F126sqEJLunSvksqKS4pf5r168zCsuLamQy2QKuYKpHHEBMZJaE6RpSNK/WY7Le5V36OjP4yeNDo9q59rG0cffPbFDzKDBfTPnztzz496bt26UlpUBCCCGEEOW5yCGRKgsJ5U2eCCCwAOehzwPeYAAEYjUbcdwDMsrSisKHz7JvXjll58P7s76fvGkqaP7p3fr3C0+PiksPimiV9/umXNn79237/qNm2XlMo6HKmOJsMByv3dgMBz75NnT7IMHpkyb2q1716TU+E5dkgYM6j191qRNW9ee/uVY7v0b5RWlEEEpQc0BjocAEYQFjAmRpgRK10HKhXCAAYjhEcPyciwAqRsOEV7OlOYXvbhz7/rxUwfXblgxbsKIXn07xyeGh0b4h4YHJCXHDxsxZO26tRcvX3qZn18hl0GMpG+B5TkpBaLTZcFEs8ZJo1ulpn4nH1ohHjx4sGLFivDwcFW7gKpuVRVcSklJOXz48IfvHcvLy1u/fn1cXJyBgUGdOnVepxAff/yxq6vr9OnT371G9q8hl8sPHDjQu3dvCwsL1Tr/97//ubu7e3h4+Pj4TJ48+c6dO7WyNso/AkEQpLodyZAIoogJgQhxPC9TyEvKSl8V5EtOQ2l5WdWo7T/suyC1BaimbUvPVEkOKikruXjp16XLl3bp2sXDy7OlU0tff+9ve3SeMGnsuo3fn/7lxMPHdyvkJTxkIJaODLBQlacVCIAsxCwPGSVbwfByDioq5KWPn9w7/+vJH37cOn/x7BGjh/Tq0z21U3J8YlxyauKAQb3nLsj8+eD+u/dyK2QK1YdSPRAmHA+UDMvyvJTflpoqBFGUKeR37t7ZuHnT8JHD4xPjI6MjU1JTBg1Onzxl8vpNa07nHH/89H5peaGCKccCL4iQCJJmQFWZFhaIIApY4AFWEpEnIg+wkuPlRaUvc+9f/+X80dXrlo+bOLJX326RMeH+gb7hEWHtOyQOHT54zbq1F369WFhUBBGBSOB4LFZlwtWOLKqGEqo/AATqHSrq32zNisQHUojc3NzFixerlw+5uLhMmjTp0qVLt27d6ty589dff61hiN3d3VeuXPkBqjyLiop27tz5uorVZs2aDRkyZMCAAdKIJ3U+//zzyMjILVu2fJgID0LowoULo0aNUg13Uqd+/fr6+vr6+vqffvqpJBjx8fF79+6l8zwo2mCMpXp/hDGAkOHYsorywuKil/mv8l69LC0vY3lOMk9IwDwEiODKMJRAVBF2DvAsz0nOhMoRAQhxPECYEEEsr5Bfu35z48Yt/Qek+wf6Obu28PRxjUkI6zegx7RZE7bv2nj12q8FRa8q5GUMp0QYYAIRgQBxLJDzUMby5cWlefcf3Tx74cSmbWumzxo/dGRa77SuHVLjI6LDEhIT0wcPnT9/yeGjR2/n3sovzIcIi5V6IED0+250uEoORVGUdE7V4iCpBUCIB6ikpPzipSuLFi/t0rV7WHhUdHR8SqekfgO6T5o2dt3Gladyjjx8cqeoNE/OlEAMIOYB4njI8pBFBAgiFkWeg+VKrri47MWt3EtHT+xfu2HZpKmj+vbvGpcYHhTiGxoenJTcYeSosd+v3nD5yo38gkKFkmU5jHHlmnmApRUqGCXLc0jtIut4AE7acFsaK6v6ZlWd2DUlEu9RIQght27dmj9/vr+/vxQMqVOnjru7+/Tp069cuaJRipObmztu3Dj1iJOEmZnZ6NGj38fdukwmy87O7tGjh7bp19PTMzEx6dGjx88//1xRUSG9vrCwcN26dcHBwdo1subm5kOGDDl//vx7am/Jzc2dM2eOu7u7djqkfv367du337lzZ15eXn5+fn5+/sOHDxcsWODq6iq9wNbWdsqUKdSloEioDIeCYUrLy4pKiguKC4tKikvLy6TAt+QWSPetECEkqCdjK8uHJLMFECSCABBU74njAK9QMgzLQ1QZtuIBfPDw8U/Z+ydMHh0SHmBrZ2nbwtLDy619h5gRowYvW75o954dZ345+dv1yzdvX7t+8+q1G1cu/3b+l/PHDh7Zu27jipmZE9OH9klKiQ4O8wkK8Y2IDu3R69u58+edOHn6VX4xUvsfThArtyyFSIBIyopLbW4AYogFTESB5VipIQ4TItXOAgQBhAzLYyKKooiJ+PJVwc/ZBydNmhqXEPQfiJ8AACAASURBVB3YzickLCApJa7/oN7TZ03auHnNydNHbufeePbiSWHxq6KS/MLiVwVFL1/mv3jy4t6lq78cOPLj+s2rJk0d071Xp+i4EN+Atr4BXlExof0Hpa1a/f2vly4XFJTK5CzHEyKImIgMi5QMhIgASJQML9VNSfIsiiIRBelSc4DXfPC8NPFQJRKSMKjGetSUSNS8QmCMr1+/npmZ6eXlJVX+SBv1zJ49+9q1a2+2ocXFxatXr/by8tII8nz55ZfJycmHDx9+9xJPlmVPnz49dOhQW1tbbWFo0qRJcnLyzp073+C7XL16dfTo0doFr5988omvr29WVlZN5dhfvHixZs2a8PBwadM6df7v//4vICBg2bJlryv04nn+2LFj3377rTSVRHIp9uzZQ12K/zg8z5eWlhYVFT1/8eLZi+cFRYVlFeXSTStfNYpOMvqVd7IEq0pLVeEOlZ2CCPEQ8NK0DYQAhCzPS8EoAAFEqCqYI0AMX7x8vufH3SNGDQ8KDrRvadfcztatjUtgsF+H1MSRo4cuWjJv/cbVa9atXLJsweRp4wcN6dejd5eklLiwyKCAdl5+gZ4pHdtnfjfnwKHDT549BxBWtrYRAhGWsseYYIQRRBBiABDgAMsBloccxAALSBCxIBIiEEwID4FkdiFCkiPF8TzCGGEszV+CEMkVyqu/XVm99vtefXr6Bfi6e7bxD/SLjo36tkfXiZMzFi2Zt2Hz2j0/7tyfvXf7zs3LshZPmzl56PBBHbt0CI1o5+7l1trdJSjEv2OXlFmZmUeOHc8vLOYBhEjaf1uAUARQBJAwLM9yAGFEBIwIUrCMlOlBBEvhpiovR6sdHUJeC2m/ClXPXY1EnGpMISCEV65cmTFjhru7e926dfWqugrmzZt369attyrphRAePXo0NTVVo/y0Tp06np6eq1at+gtRHQjhxYsXx48f7+TkJC1PnW+++SY6Onr9+vXVN+4VFRW7du2Kj4/XrpE1MDDo2bPnsWPHqt/vrXHkffv2derUSTvqVbdu3VatWk2ZMqX6m2A/e/Zs4cKF6i4FzVL8Z3n+/Pnx48ePHj2am5tbLquQMsMckELbkIeQ43kFq2QBp5YdRRq2SdXsptr1UxV9QhgDBDjAKDm5kpXxkEEEYAFCzAPEYyJwAF65em32nO8SEpMcWjoZm5qYWRo3t7fy8G4dmxDZq2+3YaPSx44f8W2Pzl4+bVs627Wwb+bkYh8dGz5hcsbR40eKS+QQVeZOpCIrDkgahhGBPGQ5oOSAAiAlQAwPGR6yiPBSrwPEHAcYydqygJNmvkr90qIoCCJGBCAMAOI4oASIJSISRZHl+Lv372etXJWQ2N6meQszc0s7e3tvv7bRcWG9+3WfOmPi4mXzxk0clZAU7draxcHR3raFbXM7Wx8/727du85fOO/CxQssiwgRBVEEkLAc4ADHQw5iApGIMCGiQATMQ4YDCkR4TH4P4qmaBF/XV6jaToNjWYZhlEqlQqEAAGBctdmFymV8B0fiXRUCAHDx4sVJkyapbND//ve/oKCgRYsW5ebmvuPB7969O378eCsrKw1DaW5uPmbMmOqEngRBuHnz5syZM9u2bauzYjUgIGDRokUPHjx4l0XOmDHDyclJ4+B16tRxdXWdM2dONQ8OAPjll1+GDh2qsx3PysoqPT399OnTHMf9hUUCAI4fP67hUtAsxX8Hnud27945Z87s8ePHfffdd0eOHCmXlUHCs4DhIAMxwAJEBADEA4ghwtKmmpgQiAiASCUMv9fSVA2zQwRJxUgAVd6YczyACCICIYIAASJALAAeMhCziIB7D+5u2LR+TMboqOgoMwuzho0bNGzcoLFBIyMTQ1NzE3tHu+CwdoHtAmyaN2tqbNjSySExKXFMxpi9+/YWFhdDJBAiEkGUkgBSHZEUXgEIsTzHcCwPeUQqb8kRgViQNqGDAPEcYDnA80AKylSNXRJELBBEOEg4TABEgGE5JcsBCCVPRRTF4tLCld9ndUhpb9/S1tCokYm5cXM7W09v9+DQdknJ7Tt16RjQzt+qmbWhUVNDo6btQoJ79+2zeOmSp8+fIVKpQiwLyisUAEIiECnMhbCgZHiW43kAAOQhBoKINTI9SGvsByYCIgIigrR+hAmACCIMEYIQshwvfZXlstInzx4VFL2Svn2IeUFAPM9IeRlpN4tq/nL+okKwLHvu3Llx48apttj8/PPPw8PDly9fXuMb9ZSUlKxdu9bb21vj3v+LL77o0KHDoUOHdFY9PXr0aNmyZaoN5tSpV69e27ZtZ82adePGjZrK+Esdf507d9aeI6uvr9+hQ4d9+/a9zhzfunVr5syZrVu31thAQk9Pr1GjRqmpqXv27FEfWPsuSC6Fm5ubyqWYNGkSdSn+3QDArVy1xMfXIyDANzm5Q48ePSZOnLB67crjpw/nF70QRSSKGGAGYAYRQARREEQsCBAjiLFkjJDaVKXfa5kwRhhJW/1I20rzACoZjuOwNMMPQMhDjohIEBEWOSwwZbKC8xfPLF42f/jIwR1S2ts72hs0NWjYuFHDxo0aGzRp0KhRY4MmltZWze1aGJkYG5uaREZHTZg0ccasmRs3b3r6/DmpSj5LJ4UI8xCyHMfyXJWhxBBhDgCO53V13hEpZi9UbWIhKQQRRSwiQYRYQDyEDAsBFAVBBJgnIhRFXFyWv3PP1gmTR4dFBjQ1adzE0KCpsbGxqcnX+t80Nmji1Mq5uV0Lc0sLIxNjq2bWfdP6TZ46Zd2G9XKlQhBFKWzFA8iwvNSkzUPEQ4gFgjBB6PcpfqTymmvvolF5zXkIGI5jeV56DyKEA0DJsjyAlfNuRVEQMQvkt+9d3/HDlmVZi3bt2Xbj9tVyeTFCDISMKCKEeQjfYtuJt1MIhmHOnDkzatQoe3t7ycR8+eWXUVFRq1atevTo0Vsd6m1BCB0/frxjx446q56ysrKkzMGLFy/WrVsXFRWlmgquom7duk5OTuPHj7948aLGRuQ1yNOnTxctWqRzjmyLFi3Gjx9/48YN6ZXPnj1buXJlcHCwtoap+uDeU5+2hkvx6aefxsXF0SzFvxJCyNFjB1xcWzZuUt/a2sLNzdXd3T06Oqp3nx7DRqTPnZ+5/+e99x/mMrxcFLEo/j7NQlWkxIPft8pRdyOgVHuEBEx+LxziAZQplBzPScoiiBALnIIpfZn/5PJv537Yu23R0rmjxw7v3rNbaHhIM1trIxNjR2fndiHBiUntu3Tr2qlL55i4WG9fn2a2NsamJn4B/mkD+o8aM3rGrJm7du+6e/8OyytFUUQEQgQwQZJbAFWlWUTzBlyr8xlxgFcyDMOyVfkSyEMIMYEI8VD64BBiCCBHRA4g+avCp9mH9s2ZO2vchLHJqcnmFhb1GzYwaGrY2KDJl19/Vb9hAyMTY/0G9b/46kv9BvXtWzp06/5t/4EDxo7LOJ2TI5PLRFEURExELF0hIiAWSMkGADHiIWR5juU4STx0KgRAUMkyFXKZglGiqpQ0RJAIiIcswylYXslDVsHIK+RlDx7dPXj4p6XLF02eNmHg4LROXZLTBvSePWfG9RuXRVGEiOUBQ7R6Kd7AWyjE4sWLHRwcJMOnr68fHx+/fv36p0+fvuUv9l2Rqp5Uc4pUWFpaRkVF6axYtba2Tk9PP3nyJMuyH2aRqjmyRkZGGov57LPPoqKiUlJSVHtCqPjoo49cXV0/5P4Q2i4FzVL8yygrLxsxcnDDRl9bNzO3sDSzsrK0tbV1dnL28nYPDQ9K7dSh/8C+U6dP2r5zy+3cGwqmQhRFImLJSqoe2kkIRDCAiGEhhALGIsIiRIKUOuYhCzBLREBEoGTLHj3NPXnm8MYtq6fNnNhvQK+E9jE+fl5+Ab6pnVLHTxy/e++e365ff/Dw4aMnj58+f/biZd6DRw+v37xx5NjRJcuWDhqcnpjUPj4xoWfv3hnjM5YuX7D7x23Xbl6SKYshYSBhkMBgAWIBYwFhAWMBE1HygnQPUCICQRhygGU4JQ85gAAPeR4CAAnDQoblAQKiiAQRIoHNfXD14NHdW7avmT5ryrARQ77t3qNdcLiRsYWxqYmjs1Mb97bevj6B7YK8fX1c3Fwtra0aNm5kbGri4eUZGR3VvkNS/4ED5i6Ye+LUoVeFz0QRCSLPAhmPFETgOMAwHMMBVgrpQQxZnlGwSp0KwQEOYoAwxARDDFme5QEPMY8II4i8KAIWyB49zT1weN+yrAVTpk0cNLh/x87JSckJMXGRnt5tW9jb2DnYDh+R/uz5YyIgTAAhv+9Q8adUVyEWLFggGZE6deqkp6drjLT78CgUii1btmhH/1V8/PHHNjY2ffr0yc7OVlWsfngKCws3b94cHR2tXSOr4pNPPnFycho5cuQvv/xSK3vMSS5F9+7dVVmKHj161FRci1JbSJGEgoJXXbqmNG9hZdvcysCwkYGBgampqbGJsYWlWQt7W9fWLoHtAjqktO8/MG3CpPHLs5b8eulc3qtnEHNYAAwnVzAVALEAAfWmuUqRwBhAJFMoymUyDgApsoQI4qCyuOzlnfvXj586uG7jqqkzJgxI75OUEh8Q5OMX4N2+Q/z4iRm79+65e+9+SWk5W5VXk26WVbEPHgIlwxQUFh48fGj8xAlJyR2CQoLiEiIGDekza87kNetXnDl79FXhEw7JiAhEEVflw1keMjxkIOYR0eFGAMQTAQoiwgJkeYWCqeAhgwkCUEBEFESBh9yzvEfHTmSvWr143qJpY8YP7jege3hUiKePd2BQ6JDBY5Yt+/7osWPXblzPvXf3ybOneXl5d+/fu3bj+uGjR5atWN5/4AC/AP+WTo5OrZxbuboEhwb37tdtyvRxm7etvXT1bJmsAIuski2FmCUCBIiDmCciJCLiIcNwCp0KgQUIEcuwcmm8FRYgESFATGlF/u27v/18cM/ylQsnTR07eFi/3v26JrSPDY8M8w/0c3C0MzY1MmjapKlxU2NTQyfnFtt3bBJFURQxIW+RiqiWQmzYsEE9zSu1PZ84caK2hg6yLJuTkzNmzBjtJLaKzz//fOrUqbWoDSru378/efJkbY9Bxddffz179uy33ZrifSC5FI6Ojnp6egkJCXRL1H80Ur1jfv6rfmk9Q0IDHZ3smtlYGhsbNW7cuEGDBgaGhiZmpmYW5lbNrOwc7N093cMiwpOS2/cf2HfJsoU5Z0/lvXomyQMivKQQGiKBCBJEhAhAhBdEBCBXVJx/7cbVnbu3rFi1MHPujCHDByYmxfoF+vr6+7TvkDBl2sTsg/sfP31UIZfxAEIkICz8PrG1qriT4VgAK9sCBFHkIcgvLPj10sWlK5amdOwQHhmc2ikpfeiAjPGj5sydufOHbbdzbxSXFCiYCixUZcURwwHdwyo4wHK8AiAWE54IUHo9IrxCKXvy7HHO2TNbd2xesHhOxoSRAwf3jUuM9A3wCA0P6pvWe8OmTddv3Ckrk8kUHMOxUg5Dus7S+qVWBplcfuaXnHkL5vfo1dPDy6u5XXPbFpaOznbBoQE9enWdODlj89b1V69dLCkrZHkFIjwiPMScdAGxAHUqBBGQICCFsoLh5IKIOKB89OT+ydNHl61YNHvOjOGjhvTo1TWxQ1xwaICndxtnl8qkiImZibGpiZGJcVNjo6bGRi6uLecvyBRFUayMd4nVdCP+XCEUCoW1tfVnn31mamqqERIJCQnZu3fvB7MjEMJff/01IyOjZcuW2lMx6tevr937ZmZmNmrUqFrZ1PPJkyfLli0LDAzUGCuip6f31Vdfva5G9vjx43+tRrYGUSgUnp6eenp6y5Ytq92VUN4FaYvQgoL8IUMHtO8QHxoWFBbWzsPD3d7e3tLSsqmxkZGJsYWVpZmFufQPh5Yt3T3dQ8IDEzvEDhqStnjZ/OOnDj9/+ZhHSoDV5j38vj0cIKKS4csKip/dvHP5wOE9y1bMmzR1zIjRQ7r16BQSFujj5xUVHTNmbMaevT/dvXe3XFaKMKzKMwvSTqWSKrA8xwMgTQOUErYIVzYEVPZkECJTyO/ev7d+44Zu3bv5BfiHR0b07N1r5OiRU6ZNXLZi0eFj2U+ePwCIEUVEBAAJD3X5EERAWAAcVHBAATBToSh5/Ox+zrmTG7esXrhkTsb4kd17domNjwoJC24XEpg+JH39xvW/Xf+tXFYBEERVYwqliyBtnwcxwqI0wg+r5lxJe6Pu3ffjmIyxge0CW9jbmVtaNLdr4ezSKii4XfeePeYv/G7n7q2Xf7tQVPoKElYQIRZ5JPCv8SEAEQHLy5++eHji9JE161fOzJw6dvyoAQMHdv22W0xcrH9ggGtrt2a2NoZGhlLOX6qqMjRqamJm6uDY0t3To12w3+o1K0RRJAKUSnxrTCHkcrmlpaWNjc3z58/nzZvXvHlzDdPWpk2btWvXvte79du3b8+ePVtnU7H6jNXi4uI1a9ZoVz19+eWXSUlJr6t6qlmKiop27NjRvn177dl/H3/8cdu2bTMzM3Nzc+/evTt9+nTpbl2dunXrurm5fffdd+8786+TsrKy3bt3p6SkSItv2LDhu9QBU2oXSSEKCwtGjEyPjg6LjAxunxiXnNwhNja2rXtbm+a21jbNmtnaWFpbmZqbGZkYG5kYG5sZm1sZt3ZvFRoRFN8+unuvLlNnTNy1e1veq+c8hKruLR4CHvKl5QVXb+Ts/WnzomUzx08eNnBIj5TOMe3CvLx82kREhY0eO/rnAwde5BVIWVgAAcsz0pw+QRSJIEIkMCyUK5XSlCShqsVBqmFlOBZgKD0vldJKLdyEkAqZ4uy5C1OmTo+MivHy9uuQ0r7/oD5jxo2YtzBz155tl66eLyjO4xEDMZSGraoaOxBBAHOIsAwve/7y8ckzR1etWT552vihIwZ075UcmxjqH+TRLtQ/bUDfLds233/4QCZnAMQcj6uKTQkWkCBK6xdUaWRpjIdUdyu9kgO8glEiguVKxY2bd9at39ijZ+82bT0srZpZWdvYNrf3C/SJSYjo2afbjNlT9uzbeSv3Wkl5AQsUEP9hJz7JXcvLf37m7ImVq5dNmjpu1Njhg4cN6NajU3xiTHh4lJe3j519SwtLaxNT86ZGJk0MmhoaGRmbmjQxNNBvUN/YxNjF1cXHz8fdo21AkPcPu7dLrhqEsPpTYP9cIViWtbe3NzY2lsyrTCZbu3ZtmzZtNEybnZ3dggULanDzHFEUHzx4sGTJksDAQJ0Vqx4eHrNnz9b2DxBCx44de13V03ua9cQwzLFjx/r27avhaUk0b9585MiR58+f1+gJl2pku3Tpoh2D0tfXT05O3r9//wfYVA4hdO7cuaFDh2pH7Q4fPvy+z/5PQWpKqu1VvDWvSvL7j+o2Pjx4VlBwXz+v1CDfDtHhQfHR7aIiAwOC3J1bO1g1b2ZqZWJm0dDc7GvzpvUtGjSybGxuY+7s4tguKDClQ4dePXoMHpq2dMXcM2eP3Ht4/d7DGznnjm7csmrqjPGDhvTt2797Ukp8u5Agb2+f4JDwQelD9/7488tXhQBiJcPLFRzCwl/Zmk3XDkLSpAqOxzwgDAuv37izaPHyDsmd2rT18PMP7NS548DBaRkTRs1bOHvXns1nfz12+dqZG3cuPH5+6+HTG7/dPHvjzoWc84e27Ph+3sLp02dNHDVmWN+0XvGJcRFRUWER4X3T+q3fuOHuvXuSlyAN5HjHNUOMOYBZFhUWlZ0+c27ylBnBIREt7Bytm7Vo3sLe3sHRL8AvPDKk34Ces+ZM2Z+9+/nLx3KmTKYsfVX4/PGz+2cvnF61ZsWMWeMzxg1LG5DWqfO3MfEpASHhTu6tbRxt7WxsrS2tTIzNmjQxbtjYqEET0wYGFsZm5lbNrFq0dHB1a+Pl7Rnk5xnl1ybKv014+9QN27aLoigQnmBOFAnRNUJcmz9XCAihi4tL48aN1b0EjuN2794dFBSkcbdubm4+adKkJ0+e/OUftCiKz58/X7t2bVRU1DfffKNhsOrUqdOyZctx48ZVp2L1dbOepIa7Gtl7hxBy9erViRMnOjo6age+jIyMunfvfuDAgT+tIpVqZD08PLRrZO3s7CZOnPieAmWPHj1asGCBh4eHTudMT09v/fr17+O8/0S2bNmyZs2a2l7FW1NUWjRlSvqSxMTNMe1nR0aMDGk3KCgo2d8nNNg/NCakXUK4e3hAi9atLCysLBuaWjcwNm9qZGJgYGzQxNzEuLmtrYurq4ePV3B4UFxiePeenUaOGTJs5KB+/Xt07tYhsUN0YLCPW1tnHz/PocMH7/lxz8NHjzkesBxgOSCVwGIiAIiVDMdw/DtaWx5CJcNxPJTG5qnmPr3KL1y7bkNKamrrtm4ubs4hYYEpndr37tdt8LC+k6aOypw7ZcHiWQuXzJ41Z1LGhOHjJo4YOLhvl29T4hOj/AO9A9sFdO/Zfe36dfcfPJAp5FLJbFUM7Z1W+7uwYUFasJTJf/os7+ChI4OHDAuPiHJ0drZtYWNta+HkYu8X6JnYIbr/oD4zM6cuXDJ34pSMSVPHjR0/cuDgfr16d01JbR8SGta6jZejo2sLOwdrG0szSxNDU6umppbGxuZmZqbWFqZ2zcydbC29Wzt6e7Zu6+ndyifEKTDGLSzZM7qLb1y36KSOm3fuEn9XCFzVT/4n/LlCCILg5eWlr6+v7R8QQo4ePZqQkKBRqNOwYcNBgwapCv+rSXFx8a5du3SWgerp6dnY2AwePPjUqVNvW7FaVla2bt06X19f7Ya7dwk9PXr0aPHixX5+ftpFSl999VV0dPSmTZsKCgre6pgIoZycnP79++ucIxsREVFTc2QrKip2796dlJSk3TUinWjr1q3Lly/X09ObO3fuu5/u30F4eLi/v39tr+KtKasoWT530qaULtmxKRuio5dHhC4NDp4R5J/u5/1toG98ZEBgYrBXfLB7kL+7cxtnMzsLfWOLBsYmjYyNDJo2bWpoYGxoaGpkZWPt6OwYHRs9ZOjgjp1Sffx87BxaOLs4hUcF9+3fc+367588rQyKEpFgQohAJHlgOF6uYFgOIKxrg7m3ux9HHA8rNxsSBUwIgBjhyn6zVwX5K1auCAr2t7WztnO08Q3wHJDeZ+GSORu3rN60de3mbWtXr1s+YfKYqNhwR2cHG1trZxfn4SNHnDt/QaHkiCAijEVRxITwkJd2VZKmUb2rqgEglyukNUKEWB5ARDARIcK379xZt2Fdn369ff29zCyMm5o0NjU3cnBs4R/o061758lTJ/Tp1zM8MsTb172Vq4t9Sycbaztzs2amxhYmhk0NGnzTsP7XTUwsDUzMjExNmlmau9jb+rs7RwW0CQnw9Q8M9QxPapOY1rbrRM+0Rb4j1gUMW5mQ2nnnj/tEURQEIBC+JhVCFMXAwMAvvvjiDd1bly5d6tmzp8Yt/1dffdWtW7dz5869+eAVFRUHDhzo2bOnzviMmZlZr169Dhw4IJPJqrPU14EQOnHiROfOnbX9krZt22ZlZVXTmhcUFGzZsiUuLk7bttarV8/T03PevHnvvrlQQUGBNEdWO8ttYWExdOjQCxcu/IU5sgih8+fPDx8+3NraWvtSOzk5TZs2TTXLZOvWrXp6ekuWLHnHz/Lv4OHDh1988cWnn35aK1UP70K5rHTF4unfJ6bsDo/bGBW6JSZkX1zU7vax64LaLfDyG+vt1SvQt0N4UHhsWEBchGdoiKurp11LF3Pr5k1MTBsaNmnUpHGTxo3q129gam4VHBKW2rGzcyu3FnYOPr7+nTp3GTio34hRQxctWXAq59TL/DwlKwcIKJRKludUu0kTsYaiTALBAuFBZfxHOj5AUuscxAS9yHuetWpFVEyETXMrE7OmhkaNrGzM7FvatnCwkeY+hUW2a+3exs6+ZVR07Nx5C+7eewAgwUSEWCBVLdZVwy0Iw7HS2PN3WjMhopRHwQhAKFcqlCyDCeEBy3JKIqDCooITp44PHZ4eFBzg4GTXzNbKzMLE07vt2HGjo2Mj7BxsW9jbNDUyMzAwNWhi0tTAxMTA2MzQyLypoUVTA1tLQ/sWlq5uzp7e3l6Bwe5BEa39Qz1ienp3HO3XZ1a74WvCJu2LmH08am5O9Izs5K7d9x86IoqiSIAoAEHEuAYVIiIi4tNPP/3TpOWdO3eGDRum0bNWr1696OjoQ4cOaQSFGIY5efJkenq6zjFEjRo1SklJ2bVrV41vvfC6WU+mpqZvqHpSKBQHDx7s2bOnsbGx9mrt7e3Hjh37Plq1r1y5MmbMGO1LVK9ePT8/v6ysrGo2pkjRJE9PT+1okrQX99GjRzWcs6VLl+rp6W3atKlmP9E/lO+++066XFOmTKnttbwdZbKyRUunLU5svzkycl1i2JbEkP0JEfvaR29LiNoSE7U5JGKZd9AEN69e7l4dQoLiEqIjOrT3jgy1825j6mDb1MLUxMjIytC4mUUzY1NzE1NzO/uWJqYW9g6OrVzcfHz94hLiOnXp2KtPz+Ejh82ZO2vPjzvvPbjDMEppyzlUORwJSW13NRCxEYlYVS8kTfNGBAsihogtLS+6dOXXNetWDx0+1MvHq4lB4waNvmls0NDQqLGhUeNmtpbunq29fT1NzS1aOrr0Sxu4fMXKy1euclV1g0LVnqyqya/v7kAgghHG0swMiKE0lU/q0WM4BQ+VHFBWyMqu37y2YuXyjPEZaf3TIqMjPb09nV2cnF2cbFvYmlmYmVuaGhtbGjU1NzQwNjBsamRkYm1l28rR1d2tbTuPlv6ebTx8g1qHtneNT3PpPN6l+8ygjJ1h04+FzzoVkflLzNxzcXNz2s89lTh1b9fefQ+fPC2KoihAUYREgFIJ1p9SLYVITEysW7duNQP3z549mz59uoYJrlOnjp+f344dO8rLyy9dujRu3DidFavffPNNVFTUunXrXrx4UZ1z/WVeN+vpyy+/VJ/1hDG+VnTo5gAAIABJREFUePHimDFj7OzstIXB1NS0d+/eR44ced8JzIqKih9++CEhIUE7925oaCjVyOqc6FdaWvrDDz+0b9++fv36Gm/84osvwsPDN2zYkJ+fr/Okkk3cvXv3e/1o/wgghKq2cwcHB4ZhantFb0G5onzF97OXJSdtTYjd0Cl2fXL45qjgdWFBK1KjVqbGbIyK2B4YvtkndJl3u2neAUP9/DuEBCZEBoVHBvmF+rfx8nB0dLKzsrU0tzCztLRp3tzewcHYxNTY1NSwqZGJqZm9g2Mbd/fQ8JBOXVJ79+2RNrD3hMkZm7duPHfh7Mv8PIShKIqYIIj4mlEIASEMIQaYIEEkgoixACsUJQ8e557+5cTS5QuHDh/aq09vP/+AJgaGX+t/3aBRgyaGjQ2NDAyNDA2aGjQyaNSwcePWbdp26tLl2+7fjhk3Ovvg/mfPHrCcgogCD4CUo+YAL5VRSTb9XR4AASWrwARBDDjAYgGJogAQX1D08lbutaMnDm7asm7BovnjJowbPmJk+pBhKR1TpaEjDRs38vb18fDyMjQyMm5qYmlhadvcxq6lXQsnp5Zunq19wjwCYtv4RniGpfomDwnsN6fd6M3BUw+2m30mZvH1uCW3IhdcC5lzKWL2ubjM06lzT3Wa/mOP/gNPnb8giqIoAFGAGPNIqDmF6Ny5s56e3tWrV6v/uywuLl66dKl2NaeZmZm0CZo6n3/+eVBQ0NKlSx8+fFj9U7w70qynTp06aVheacz42LFjfXx8VBtBq9DX109ISNi2bdsH2P9Og7t3786cOVM1LVF9wW5ubnPmzJEuIELo7NmzQ4YM0XaV6tSp06pVq+psoTpr1iw9Pb19+/Z9kE/2t+bMmTPqdxJHjhyp7RW9BQqlbM+mRetTUrZHx65NjlmdGLk+PGxNWPia+Ih1CZFrYyM3xkdvSYjbEhezPjIyK6jdDA/vsf4BfcKCE6PDgiLDvIKD3f0CXFq7NrOxMDI2MDEzsmpmbmFtZmjUuGGjBk0NTaysbewdW7bxbO3XzjsuMbJnn649e387asyIrFXLDx89+OTpI0ygKIpEfFdriwgGkOcAgwkURVIuK7195+a5C2f37t81+7up6UPTOnbuEBIW7O7p2aKFvYWltW3z5s6tXFq5uLq4ujm3cmlma2tqZt6gUaNGTRrZNG/Wum2rNh7O0fEhozIG7dqz6dqNa6VVQwQQxohgKdb0+9mFN67ttX9FiEAiYkHEAHFFJYU3b984febUuo2rZmZOHjxswLAR6WkD07p069YuONTDy8fZxcXOwb55i+bmlhZtPTxat21jaW1lb2vr6uTg4e7i4dvazc+zdVCoV1SKT9JA1+6LfAaujpjwY8Kc00kLL8UvuhI5/0rMzJNx049HzjwdMetcxOzz0Znn4jPPxU870Dd9yNnLV0RRFAVACA8RV5MK0adPHz09vfPnz7/tr1Mul2/atMnLy0tPFx999JGfn9+8efNqpKzoXXj48OHMmTN17u6pMqxff/21n5/f4sWLa6VTQR2WZQ8fPtytW7fGjRtrq1diYqKXl5f2mFhTU9O+ffueOHGimvPDZ8yYoaent3///vf9cf7OYIx/++230NBQ9SsZEBBw+fLlt8oDAQAuX778/tb5BlhWeWDXqhXJSVsjozbGRq6Jj1gfE7UlNm57VNT2mOgtibEbkmLXJEatTYjalBizPT5ue3jsqrCwzBD/kYFePQN9EoKDwiIjAkODXd1bW9nZWDWzsrOxtbWwMm5qVL+pwTemTRsZGpgZNLU3s3Cxa9G2jYt/sF9cYmzXbl169+k5KH3A3HlzDh06cPv2zdKyElEUiUgg/n3TNywQTAgWBEQIDyCACAuCNJwOCxhihAVMBEIqZ34LgggUTOnTZ/cvXv7lx592LVzy3YjRg7v36hIVE+4f6BPYLiA+MT5twIBxEybMm79g4+Yte/b+uGfvjz/s3rN1+46V33+/YNGi9CFDE9oneHp72LawMTI1sLIxa+XmEBoZ1LNPj/mL5h4/efTJ88cMJ9WXC0QkWCAQYx5AjgcAIWkiOg8gRFja3FQaF8jx0qBDXNWBgYhY2YyGBL6w5OXt3OvHThxau+H76TMnjxwzbPTo4QMH9ktKSoyLiW4XFOje1t3KwsrQwNDAsOFXDep/3bCRdTMrGyszm2ZWzm7u3p6tPT1bu/kGOIfEt47v6999YtTAxfGjN0XPuxj93YXIzHORmeei5pyLmXs+bv7FuBnHY6cdjpl5MnbOLzGZZ2Nmn42a9UvU5J/7pg/MufirKIqigAWCEIY1qRBDhw7V09M7derUX/qJihDCn3/+OSQkRCOs9H//93/Dhw+vqR3Z3gWWZY8fPx4VFaUd+JL49NNPp0+f/sEG/1WTFy9erFq1KjAwUNvRUSEN3920adPbtqpMnTpVT08vOzv7PS3+b05eXt7y5cu9vLx0XttPPvnE3d198eLFz549q87Rbt686efn99f29nhHOJ7Zt3ftrOSELTGxO6Oj1ydErGsftT0+bmts9ObYqM2xUZtjorbERm2JjdocG7UpNmZDYsKG+IiNkf5rA9znebcd5O3RPigguF07V08vG1eXlq5unm5efm19nVq1MbWyNmjcyNCwiaFR06amxibmZtbWNnYt7J2dnP38/OLjEzp27Ni1a9f09PTZs2Zv27b1wsXzL/PzIAaCSACUNtKBGBNEyB+2ihMEHvIAsliAAHGYAFEUiYjy8p+dOXtsz76tK1cvnjJ97IDBvdonR3n7tfYP9ElOTRk3Yfz/s3fe8U3V+/8PgrJnZ5rRvWfaZu82bebZGR1Ay95D9t6rK+lAlgKdaVpAkOkEke5BQUQcV69XRS8C4hXoyPz9cSAX24KFVq/3/r6vx+cf0uSdk3DOeeb9/ryH0VTZcrn1hx9/eND+0PZErr/d4bDYLJ2Wrk5z163bP127/snxt97aun1bSloqncmkeFOJJM+Q8EAGm4ZpwfWbVpuOlF++2nT75x/tDpvD4bDZHQ87Oh88bMcPrwtvAdtlxtt64+PeOjrNVpu1y9L5sOOBxWZ2OBwWm/mHf9688vHlt989fbB4/5YdG5avenXx0vlz5s/ImJoOwWhiopzB4EaERoUEhQb4BVBIFE93Nxe3ESNdxo9y8/DxpdBC/aLDQxm8pHiBkJ4MsNOWCBfsTVx9Ur75Q2hbHba9Hsyp6bEugTn1YE4DmF0PZdcgWR8hWR9h2R+hW0/NWDDzQn3No6/D7rDabANJiLVr1xL6XTz19ddf9yx8IxAIEyZMmDVr1nOFsAZKZrO5rq5u6dKlQUFBPQ+sWx7RK6+8wmKx9u7d+7w5rH+oWltb586d2zNw99JLL8XFxe3cufOF5zj9/xllevjw4fHjx3vNA+5VY8eOxTCsurr62XtR2dnZBALh/Pnzf9oHcaqj6+GpE8VZKVglBFdDYDGqPIwpK2HICD4mxJMLhkoxtBhRlACSclnCgaSEtSLhRB5PxhczWJywOFosi5EskaiUCpFcwuSyWMGh/v6+Lr7kMQEUlyBfor8/merr7e0TGBgYFRXF4XCSk5O1Wu306dMXLlq4fuO6fQf2fvjRhX/+9KPdYbM7bBar2Wy1POhof9D+0GyxWKxWfApQe+fDLmu73WGx2Dv/+dP3DU01VUcqivbmb9yybu6CWemTU0BYKUkWYxp47fpVRlNFy+XWO3fvPp4Zh889fZSb5BzIg28w4N9Jl9n8461/1jc2vLZ3T+bUKRwex8eP4uY5gerjFceIUaiSZ82Ztitn+7vvv/2Pb/+O3/GtdovdYTNbu9o72612G84Gq+1Rs3SrzdbR1W6xmS028917d9quXn7r5InDJYcKivJXr1m+cPHcGbOnTp0+OW2iVq5MYrHjg8IjqQGhJO8AIsWX7O1Hpvp4Er3cPNwp3p5e/r7UwKCYqHBuXER8bAxDkEyDZglm56A7T6fuaVMWXJXsaJLubABzmsCcS71AIrsWzK4Ds+uchECzP0K2nJqxcHZNM+5DOBx2h81ms/RtRkSfCIEHHPp5s/j666/xZkTDhg2DIKjbpJ0RI0bodLoXdlOeV5999ll2dnavbTxcXV21Wu2xY8euXLmyfv36XgvuVq5c2ZcJd3+cvvrqK71ez2aze0aTCAQCgiAXLlzoZ3+n/z8J8csvv+Dxxqd5k900aNCgoKCgTZs2PaPxotlsxicwzp49+8/8LLg6uh6eOVmam641wcgRJyEgqAICymBV94WAZWrsEKwsg2THEKAKBAyS5Nl0poonZHJ5oTFRsbQoWCxMSxDDAk4in8GWcBgCRiQt0tffx8PD09XNw43oRSJTqFSqt7e3n59feHg4h8NRKBS6VN2MWdOXLl+yZdvmfQf2vv3OuX989w0+/a3T3Nll6bLYLHhAyWIz2x3mBx0/X/u09ehx4+69+p3ZW5avWjwxIzVZLktIlGAazZq166qPHv342rVf/vWvf7dyco5/aH+Id3NyjmZzZrKaLZaHHe0PO9ptDrvNYf/lX/+6eu1a1ZGqV5cuEiXwqT4kL7KHX4B3ZFQokx2PYKpVa5ZWmIqbW+tu3fne7uhyOCwWe4fNYbPaLF2Wzo6ujkdH7rDd+9fPNz7/9My5068fPJBnyN26fcvK1SsWLl4wf+HcSRlpCpVUIOLGM2ghYYFkiqcnmehK9Bzv5jrBzdXd08OLQiRTvcjeZGpgSFAsM5otEIsEcjGHy2HH8iXCBfvlOz4E8i8rCz9J1F9NyGpR6JvhgubefIinEmLmotlNVy87HH8MIfDW3yaTqT9n6jfffIP/LhsxYsSNGze++eabNWvWdCsNGzJkiEwmO3XqVLfuFAOl77///uDBg3K5fPTo0d0u9eHDhycmJu7du7db3ODu3buHDx/m8/ndqp2fPeHuD9Ldu3erq6tRFO35C3fUqFHOeMi5c+f6/167du0iEAjHjx/vv6n/OnV1dX344YezZs0iEolPY4OHh8fvdlq0Wq1XrlyZP38+vtE9bty4rKysfnYceF51drW/faZCPymlClMfhaFiVHkIVRhBsFdClMNAOYocRlVlqPKEDnsLww7JFUviYuVcXpyAHxYTwYuJXJws35GkzBYlr2Lx0ujxkIAtknBihPHBtLBgH98gDzLRzcPN3d3T05NIJJLJZD8/v7CwMCabKVfK1FosY8rkufPnrNuwtqAo/+zbZ37+5bbDYXc2tf7l17vXrl85dfbEnv2FW3ZsWLV26bSZk2XKxCSZaGJG2qbNW469eeLaJzd+un2ns8vicDjw9n+dXV3/uv8rTgWL1YrnrTpLo612m7PQwelM4Cmt+Jzt9o7273/47vzFD7Zu36IE5CFhQWSqF5Hk6eNPiogOSkjizZg9OS9/57l33/r6mxsPO3+x2Do6ze3tnQ/sDovD4fj+h3+8derNA2/sz9XnrFm3etGrC+ctmDtrzszJmZNgFBKI+HH02JCwIF9/b4o3iUjydPNwJXqMI3mOJRHHk8nuPr6UoJDA8JiISDojnA/R5WksKSYUJybwGHHx9JB4fuIyoyKrMWlnXdLOelluA5BbB+ZegLLPgzm1fSQEvOXkrMVzrn523eH4NyHMAxhl2r9/P4FAOHz48Iufpw7Hd999h/sNw4YNc8aUvv/++6ysrJ75/mw2u7S0dKBGnt27d+/EiRMTJ0709PTs+RswJiZm8+bNV65ceQZTrVbrhQsXJk2a1GvB3d69ewe2IVU3mc3m2traRYsWPS03aceOHVeuXHE2VTx16lT/3zQvL49AIBw5cqT/pv57dfv27fLy8oiIiCe/89DQ0OLi4mf/j1ut1pKSktjY2G7p1Pj5L5VKP/jggz/nI3Sa299721SQmX5ErTmGwCUYTgjACPYIMUGqCkhlhMDDiOowBhzVqY9jWDmgXBUfLeNxaUJBOC1cSovKAdFqQPO2HDshUh5giDfFsaaz6FgCN0nKjxfEBUWH+Pr7kUhkNzc3Nzc3Dw8PLy8vIpFI9PLyC/CNiokUigUwCk3OnDRj1vT5C+dt2Lh234HX3jr15rl3TldUlhoKcnfs2rp81dK0ialJ0sRkmWTazKmGgrzT505dvXbl1k93HrZ34kOqO7ssFqvdanV0dpnxmgO8pM5qt3V0df764P7DjnZnq0HnX53AwL0NZ9NAvBT851/utba1vn7wjWkzpkXTYkgUD1f3sW4e4/0CqLS4SLkqedWaZSVlB8+9faq1ram+saayqtxQkLt1+6a161etXL186fIlc+fPmZQxUQUquXxOVExkaHhwYHCQj58vkeSFD1t183B3dXejkjwC/clhYSERsXERbEG0SB4n1fC0c5FVh5AV+xInL+MmKjiMuJjYuHCWWLykRLmzBtj1EZR1Ec6+gOac1+V+oM07D/TZh4A3n5y9eO6Nv//N4XgEVbvdbrbhjVF+R30iRGlpKYFA2L17d3/O1Js3b+LFdK+88kpjY+OTf7p3797rr7/uTDl3KjIysrCw8IWTSjs7Oz/66KNeb6wEAsHf33/BggUXL158rv3Dzz//fMOGDT1rkikUyrJly5630cjv6osvvsjNzWUymb3mJs2ZM+fChQv48Vut1oElRH5+PoFAqKys7L+p/3adPHnyyW++qqrqd19it9tbWlqWLVsWFBT0ZMDq5ZdfZjAYWVlZf1pid5e54/y7R4qmTjyq0R1DkRJMeRBRVACqil4JAapMKmUxqnodU1Vo0UoEKIdl61jRAJ/PFIrCo0OE0cHbYKAUBI4rFEflyUdA5SkVVCWUZUUzp4ZHynixAhWfK+bTYmh+fn44GygUire3N5lCIpI8vchEb19qeGSYQMRH1ejM2dMXLpm/YPGcV5ctWL1uxbIViydPSVNBsiSpBEbQpctWmKqOXP/0s7s/32tv77RYbRabpcvSZbFarDZLl6WrveNhp7nD+jia1GUxd1q6bHa71W5zNirvNl4bj0fhHWQfNZS1WR819H40gtTS0dn51d+/PnPu7PyFC1gclqu769jxY8lUcmBwYFBIMJ0VPykzbf7C2avWLtu4Ze3GLWuXr1oyf9HsGbOmpU1MlSmkDBY9LCLU19+HRPEikoheZJKbh/u4CePxkaVkKiUgKDAsOj4iXhDBlYdJ0qLQV7mzc4HNR9ILP8o4cG3K3iZo+T4RMJHP49HZrFhhcuLyEjC3FtPXINkXge3vK3d8oMmvT9vTCmT3dR8C3nxy9qtz//b9PxwOh/0xITqtFqt9ILp/OxyOo0ePEgiEnJyc/pyp//znP/GRnEOGDKmtre35hPb29qqqKrFY3C0E7O/vv2XLlj4mjeC6fv369u3b4+PjezbCc3d3T0tLe/PNN/szQ+3OnTt46KnXXk/nzp3rZ+jpzp07JpMJQZCeLsvo0aMBACgvL+/2G7ajoyM4OBh/zunTp/vz7rj+r6baqfv37ztzGXx8fJ5r1lNHR4fRaMSzHvz9/evr61+gXUp/1GXu/PC9o7unTTqmTXkT+z1CAEqTQl6MAvtQ1UEMOAzIShH5Rm6Mhsvn8UWhUSGsmIB1OmC3VvmGOvkQJinRJhthaTWgrJKDr4sV22J5s8NjJXQmi8dlMJihoWEUCsXT05NCoZApZBLFy9uX6uPnTfEmU30owaFBtLjoxCTh1BmTFyyeA2OqOEa0KJE3Y/aUbTt2HD9x5vubP5otFovVbrE6usz2jk6z1Wq2WDs6uh6YrR12h8VmN5st7WZrFw4AvMYNv93jeahOv+HJhW9UPOxox19isVo7ujo6zV34k53hqY6uzvsPHra0Xt6VnSNXqPz8A13dPDw8vUhkMtXXiydkzZ43fd3GVbPmTlNBMgWQxOIwIqPDA4P9ff19/AJ8qT4UV3eXsePHunm4u3t6enoRyVRKUEhQHD1OJBIExUsiEtKSZmzGNlZiuRcUhhaR4ROu/npibhtS0KZaWSZWzxIIxXEMRiiDx138hiznEmyoh/V1qqwa6c4aWVazMu9y33eqoc0nZy2e+/UP3zmeJITFbB2Q+RAOh+Ps2bOEfvcb+Omnn/DOS4MHD7548eLTnma1Wt9++20Igrrl57i7uy9evPjZlRPffvvtgQMHkpOTeyZNjRw5UiqVvvHGGwOYXPu0gjvC415Pz+v9dHV1ffTRR/Pnz/fx8elmcPDgwfHx8bt27frss896fW17e7vTVXr77bf7/+kOHDhAIBAOHTrUf1P/A1q1ahX+3S5evPgFXi6TyQgEwsaNGwf6uH5fZktXXe3pvDkZJTpNFQpXqsEyNVgMA2UoVI7B3VYZCpbAqnIMKkGAUgQoQ8FiQL6FFY8KeWKBgBFPi6WFL4fBUlRdBYNlmPLfdAGVZaCyFFAUJyftYdA3xIans8L4gvBIQXQYKzYyiuZN9nYZN97LjUz1CKB4+Hl5UD1JXiQfMpvDTE1NTUxMDAkJFgoFU6ZMWb58+bZt206dOoWTuKOjo6Ojw2az4c2dbA672Wp+2NH+64P7DzseOgcNOR0FPIhke8qc6q4ua1enravTZu6yW8wOi9lhtTjMZmt7+8P29gedne0WS5fDYXu87A6H7d69u++8c27NmlVKpSIyMpxCJXt4eU5wncDisHWpKUKxKDg0JCAowDckhhwY4epOdBs3hurlSiV5eBI9yRRiOHlspL9XWHiYP43jL0Ci1a8K5u5SbD0DZNdAubVwXj2sb4T0jWBeI5DbJM+t0+bXoiuqxJhGIOLFsOLD+GrJqmNQXh2YUwPl1kK5tXBeHZRXB+fV9bpTjeZegrM/gvPqoLwGZdZH6vw6bc6HycuLX1204NZPP5nN5q6urr5tUT9SnwjxwQcfEAiElStXvuBJ6nA4HI67d+/6+voSCIRBgwb1Je2voaEhMzOz2yy2cePGTZkypampqZtlfO5NzwqywYMHx8XFbd++/Q9NPfrss896DT35+PisWLGiL2/9xRdfZGdn0+n0nk6Pt7f3vHnzLl68+OzcpAEnxOHDhwkEwv79+/tv6n9Aly9ffvnllwcNGtSr+/u7Ki4uHjx48IAHIfsis6WrvvZM3uyMYp2mCusrIUp/SwhEyBUL+Mx4WiwtfBkCliLqauS3hIBUZaCyDFAWg4oDsGyvMilPIFgTE58ZGpEcGc5kxcby6RH0aGpQ0DhPymhXLxc3IsmLRPLy9Pf3i46OxrNj+Xy+SqWaPXv22rVr16xZs3379nPnzt26dctisVitVpvdZrZa8ClvT84udeaz4njAo0ZPa6xks9vtdofN5rDZHFarHV82m91ms3Z0PHzw4Neurg7camdnO/7P77//9siRqs2bN65atWL+/LkQDIaEhbp7epAoZB8/XxKF7ObhTvGmUqhkkocb2W1csLcHIzo4KiosNComnieii+ShLEmIEGWnLQdWH0R2nVJsP63KvgTlNXRbQG6jMrdOl1+HrDCJUIwv5NHY9DC+JmnVm90IAT8fIS4kLzu0ZPHC27dv/1GEqKmpIRAI8+fPf9Gz1OFwOH755RfnPbTvpRWffPLJwoULu/UDHzp0KAzD77333sWLF+fNm4eDp5sCAwNfffXVmpqaP22o571790pKSoRCYc+sJwzDzp492/NI7t69azKZYBju6YWMGTMGBMHKyso+9i4ccEKUl5cT/q+36xPicrmxsbEv1pzxH//4x5QpU/4jc93Nlq76ujP6uZklKdrqR4QASpBnEaJCDeN4KMegYlCxhU1HhDyxQMCMi4mlheGEqIKBMkxVAQMVMPBvQoDKElh1SAuZ1MgpBXSCL98fL1gVFzeJGaXgxwrFLKaIFcqkkUKD3b0pJC8vHy8SLTpGIBCEhYX5+/t7e3sHBQXFxMRwudzU1NQFCxbMmDFj6dKlx48f//7779vb260265OBIOcUtke99iwW3MnAh133SgirzW6x2Do6uh4+bH/4sKOry2K32+32R06D3W612SxWq7mzs/3Bg/tNTQ2vv75/3bo169ev3bJl0/LlS6dPm6LVqsWJCaHhYV5kkqcXMZoWExIWSvamermOIrkM8ye7sOnRyQoZIyE5hCOJlKbHpG2SLj2YlvvOpKJ6xFAvz22QGS6DhiZY39htQXlNKn2DLr8WWWESIihfyKWx6RFCbfLq4/0nxPIli+/evWu1Ws1m88ATorm5mUAgTJ069UXPUofD4fj111+dgfLnrdT9+9//vnHjxm4kGDRoUM9EESKROHny5JMnT967d68/R/vCslgseNZTz4RUBoOxZ8+eW7dumc3mS5cuLVy4sCfb8Cmkz4gmPU0PHjxwWnv//ff7/0Gqq6sJBEJeXl7/Tf1vqLCwcOfOnS/2WpvN9p8qtDRbu2rrz+jnZJakaKvViEkDlWugEgTsIyFKHhNCxOcz4qJpMaFLYaAExqpgoBRTliMAvvBk2VJYWQEqjymBowqgCgQqUbgShUqkyfvY7A1x8VNYjDQhB0jgCURsGoMWFhYS4O8fE0Pj8XhhYWEeHh5ubm7e3t7e3t7+/v7BwcEsFis1NXX+/PkLFizYvGlzVXX1teuf3Pn5rtlmcTgcVputo7OzvbMDz211bj886Vj0FmXq6urqwp0Si8XS1dX18GF7R0c7ToWHD+///POd69evGY3lK1cuX7586erVK5cufXXmzOkaDSaRJDDocTExUdG0mICgQHdPDzcPdwaLGRYRTqZSqN6kaFo0WyyJTwJDE9QB0kz+7J1puafUBU1ofjOibwH0rSrDFaXhqtzwMahv7oUQ+ibA0KgrqIOWGQUQwhNwaGx6pCjlaYTA/9ltobk13QihybkgXXZo1fKl9+7ds9vt+Gzavp8/fSLE1atXBw0alJKS8oInqcPhcDgePnzo7JD6YnVYP/30U35+frfUQ6d4PJ7JZPrzu+k9TZ9//vn69et7plH5+PjExcX1mps0d+7cDz/88MWcnvv37zt3LwYkk/LEiRMEAuGF74n/e7p9+/YB8zgzAAAgAElEQVRf5+zqu8zWrrr6s4a5maWpuiOPCAGWok8jBFSKABVqGMcDToitHDoi4Ir4fEZsFC0mBCeECVKVYsoKFHwSEqWwyggBbypVJqVyHywv0sgPaJQmWHkmWX4qUXGQL9lEo8+JjZ0s4CLJiVwRPzSOFhgc4uPjExAQEBwcjKc/eXt7+/r6kslknBMMBgNBkMzMzJkzZ65dt66krLS17fI/f7qF57Pi034cDofVZuuymM02C954/GmEeCy8+dOjQZxdXV23bv342Wefvv32WYMhb8mSxQsXzl+3bs3ixQszMiahKJycLKHT4/z8fLy9Kb6+3u6eHl5kkrunx5hxY/0C/P0C/KNjoqLECgYylZ6yODZjs3hFKZRzASlsxHZfxoo+BnIaFTtroNwGTeFlbeFlVN+M9MADrG+E9M1QfrMuvw5cauSBEIfHjmHTo8Wp0jX9JsTyw2tXrcBH7DxvokSfCHHjxo0hQ4aAIPi8Z+eT6ujocLZ67U9P6X/961+HDx+m0Wjd7rBhYWG7d+/+q13D9+/fr6ioiI6O7pVqhMfRJKPR2M8jH3BCnDlzhkAgbNq0qf+m/k//QZmtXQ31Zw3zppSm6o5o0CotXK6Bnk0IowbBCVGhhkth1VYOAxFwhTwePTY6Jjp0CaR6RAhUaURAfOHhpgpIVQoq3wClB1F5uRYqU4MloKxEJS8HVccB8EySvJIv2s3lrefxpggFiSJBLI8bEhHh5+sbGxvL5/NpNBqZTPb09PT09HRxcSGRSMHBweHh4REREQwGQ6lSTs7MmDl71qo1q18/+EZNXe33P9x82NGOF0M4E147ujrxQodeCdHZ1WG1PqrGNZs7f/rpnzduXD9//v19+/Zs2LBu4cL5CxbMW7hw/tSpmSCoSkgQRUSEkclej8Dg7uru7koie7kTPSjeVG9fHxKFHBoeFk2LYTLjvRPSOfMLdHnvoQUNSn2rLK9NmnNVnnNZsfMjdX5T2p4rqbubsbxaNOeSzlCHGZqQHgs2tCCFrSkF9cCSCo4KYHOZNDadlpguXXOiV0L0up5GiA1rV+MT752hzj56En0ixNdffz18+PDk5OQXOkUfyWw2O2/rfckof7bw+1dPUanUdevW/cfbr+Lq6uqqqalZtmxZz/F5L7/8Mp1Oz8rKet5o0tP066+/ent748YvXLjQf4PvvvsugUBYvXp1/039n/6Dsli7GuvPGuZOKUt7RIgKLVyGQk8jRBkKGjUI7kBUqOFSSLmVw4AFHCGPS6dFxUSHLoWAYgjtRggcEkYYKIVVB1HpIVRWASsrAaACgMpg5JAaO4ioKkDJSVh5XKl4jS9awOSquAKOUBQRHRMUFMzlcgEQkiQlszkcBoMRFRXl7ePj7u6Ol2TjXkV4WDiPz1drNbPmzJ6/cMHylSt2791z/sMLn3/5xU93bputeIm1vaOrs72zo+egaTyZFZ8qcf/+v77+6ssLF94vLj64bdvmVatWrFy1YuGi+VOnZWq1aqk0iU6PDQoKcHNzoVBI/v6+Xl4e48ePdXd39SIRSWQv/0D/iMjwaFpMaER4NC2GxWFHRgTxZuyEcz5QF7Yo9JdV+Z+CeZ+AWZc1eW26PW1IfqMi+5Ii60Mo9xJqqMMK6lFDY09CIPktaFFbSkG98tUKlhJgcRg0NiNWki5d+8KEuIgTQraieNOGNXjrMCcYbDZbXyDRJ0LcvHlzzJgxQqHwxc9Th8Nmszlr4srLy/tjyvH4/kUgEFxdXWEYHjFixJP3X1dX13nz5l25cqWf7/LCunHjxq5du+Lj43vulOBSKBQD267j3r17zvl3ly5d6r/BCxcuEAiEJUuW9N/U/+k/KIvN3Nz6Qd68aYdTdNUatEqLVGigCjVSoUZ6EqIcgytQ2IjB5QhkxGAjBpdDqh08Nsrnibg8RiwtKjpkvlJWDGNVEFCGqboRogIGjAhQiQFlkPyQPOmQPLkEACpQ1KjRlajBN7CkSlh+TCk/mJi4nsPTCYTihMTY+PjAoAAOm5GmQXUwACikClCRmJjAoMUF+vl7kUhELy8imUSkkIneZHKAd3BUGIvLlivkqSkps6bPWrLo1cLCojNnz3564wZ+B8Rr4qw2q9VuNVvMFqsF7+VnsVk6ujq+/ebzluaLVUdKd+XuWL5m+YIl8+ctnDVjxpQUDFMkJTHi4wMCAj29yJ5kKtnXj0imuLi5jZ8w3t3dlezl4UPxCgvyo0WF09g8TqJcJORHRoRExETx+PzIeF7S8mJ1YZO66Apa+LFm9w1twbVUQ1tqfhugbwD0jYChEdA3gIZ6yNAA5feGB0MTYmhGCpo1+XXIwje4smQWjx3PiY+RTpWuP/1kTOl3CKGvx3Jr0dwaRN8A5Nar8xtSst9XLHpt4/q13VpTDyQh7ty54+LiwmQy+1nsw2Qy8VtYcXFxf+w4HifgEggEf3//9vb21tbW6dOnd9scHjlyZHp6+oDcLvuon376qaKiAgCAbkm6BAJh7NixOp0uOTkZ/2d6evrAvvWAE6K2tpZAIMydO7f/pv671NnZeeLEiRUrVqxYseKtt956sW2h59oM/ENlc9iufdGau2D261ptlUZdpcXKMcikQY0aFOfEk8uoRqow1AhDFRBoQhETAhtBME/A1/L4CWw+i84IjwqZKhEVo5pqGKrAHgeXfrvwpKYnlqIMUFQAsmJYVqZSVSuAYlXSNgFDJ2AKxOIYRnxAmJ+IS5sJSRerpDOTxepkgUIhkSqSxSIBIzY2NDCITKW6U0iu3iQPby+yHyUgwD88JIwVG6+UKDJSJs+aMXPJkiW7du2qqqq6evXq/V9/dTgc+OAGvKbBbO785z9/aG5uPHnqrUL9lvVrFyxaOmfmgnkZc+aqJ05MViQz4mkhPgGBVD8/qp831c+L7O3mRXHxJBG9yCQShULxpvoEBASFhUfHxzK4DH4iHcrkYHPFXG6gHzEkJozDZQexNZI1JxFDC2JoQQzN+IINLbCh5Skw6GWh+kbIUAPpa9PnG0QSHlvA5/Bio4D50k3vIfr6Z4Ph8arFClp1+c2a7A81hka4oA0zNE/OOgvM2LZ+7dpuZ/LjnZjfUZ8Icf/+fU9Pz+jo6H5mjnI4HPwW9vrrr/fHjsPhuHjxojOs5Exb+vzzz1esWIFXbj8Zz1GpVGfOnBnwIdJOdXZ2fvjhh3Pnzu3WiJBAIAwZMoTJZObk5HzxxRcOh2PDhg3442lpaQN7DANOiKamJkK/E9j+6/Tjjz8qFIon/wdVKtULNN06cuTIt99++0cc4fPK7rB/9vXV/MXzD6WlVus0VVqsDAWNGGzsgYduhKhCUROKVEJgnkCg5fLELB4zPj4sMnhakvgwoq6CwAo1+KQP4Vz4zIluqwKUF8OyckB1RAkUK5O2Clg6AYufII5kMwOjghV8xjpYVSBXFIiTssTiaXymUsyGAQmkViSpkhhsZkRwqD/RmzqB6OtGCSL7BfkEBvgHBoeGhsdEc3g8AACmTJmydOnSHTt2lJaW1tfX37x58/79f92+fevjj6+cPHniwIF9O3duX7ly+aIF8+bMmjVx0hS5EotjCoODowN8Av0ofiSKP5HkQySSvYgeZOIEb+I4X+KY8CDf8NCwwNAY32hBIB+LghewpmxPXGBQLt2tnG+QJEF+ftSAqCAuPz5ahEnXvYUYWh9D4snVZ0IYGuH8WjivNnWeQZDIZfI4bC5OiHf7Tgg0v0VraFRnfagxNEKGVszQPCnrHDBrx6YN67vdvQfSh+js7KRSqSEhIf2c0CsQCPCrbu/evf2x43hcokEgEMhk8u3bt5/803fffbd9+/aeSUQ8Hq+iogLfrhkoff7551lZWb1Wuvn4+CxYsODSpUtP9qldvnw5/teMjIwBPAyHw3H37l0vLy/ceF1dXf8NtrW1/REk+yvrxx9/dP6I6XbmPFeuqsViiY2NPXjw4B93qH2XzWH/9G+X9YvmHkxNqdKqTVqkDMMJ8RQfQo0ZEbgChkxqtBJDjDCYKxRoniDEVIkIJ0Q5BlSgYM/VS1NxWFUBK0oQOU6IElXyNiErRcjmJyRGsNnBkaEoj5kHAVVy1VuJyccSEsq54kKW6FURHwXEiZqkBLVcJpcmMHhRvhGBlGA/SgCZ7ONOJrtTSJ4+FB9/v4iICD6fj6JoRkbG7NmzV65cmZWVvWfP7vx8/ebNG/G81blzZ2s0WJJEyuOKYmjM4JAYf//QQJ+gIKp/INWX6u1NplIpFBLVm+zn7x0SGhAZERjF4NNEMBOaIZy6KXnZQfm20/K8Bii/McVQg206nQRO8Q3wD4gK5PJpjCRUvn5ACFEP5dXq5uTxxGw6h83i0qLBBc/lQzgJodY3QIZWVN80cddZYNb2bVs2d2uYPZCEMJvNISEhPj4+eL7UCyshIQG/5Ppfh9XQ0IDflIlEYq9X788//7xv376eKU/R0dF79uzpYxna03T79m2j0QiCYM9o0pgxYyAIMplMvb7FsmXL8KdlZmb25wB66s6dO85W1Q0NDf03+Mknn7z00ksYhvXf1H+FnoYHXCKR6JdffumjKTxAJ5VK/9AD7qOsDmvb9fpdc6btw9BKFKlUw2UYWKlBnkoIDWZE4QoEqtJgJjVaiUB5IqGWxxcxuYy4uNCIoKkS0SEYM4FAuRo0YlDP5cx/fXIZYUUJIq8AgaMqsESVvE3IThFxhOKEqDhWaHAIxmbkQapqQPmWMumoKuEMoHhXAVeKpHqWcAmLky4WgahSnoYlQTBTnOAfHePm6zOORHQjEyneFBLJy9vbOzAwMCAgIDIyMikpKSUlJTMzY/bsGQsXzp87d7ZWq+bzuVFREdHRkQHBAVQ/KtWXTPH2olCJ3hQvP29yoA8pgOruR/X09vP1CaMFMBPDk3Sx0HTW1B2ixa8rNx7T5J5P29Oi2/8x/NonQOEVpPAasv2SBJ7rHxQaEhPK49OYyZh8/cne8PBchGhCChrA3BrN7FyOkBnHZjI5NBq0ULa574SoQwzNGn0DtuuCWt8A6ltQfdPEnWeBWduydu5w7hHgYLDb7QNGCJvNFhMT4+np+Vw9y3rKGYXX6/X9seNwOJqbm/HhP+7u7s9otfTgwQOj0cjn87td8AEBATt27Pjuu++e603xaNK8efOcWUNODR48mMFgZGdnf/7558+wsGjRIvz506dPf663/l0NOCG++OKLV155RaVS9d/UX18//vjj06apO7Vq1aq+mHr48GFmZiaBQBgxYsSf1uL7GbI6rJc/qds5e+o+DDWisAlDyjCoUoP0GmWqVKPVGnUlihgRuFqNVWGoCYb0QoGGyxM+JsSUROEjQmBAJQr1XL1uTlTCylJUgROiFJBuF7FTRRyRODEmhhHmH4iw4nchyhJUWYYkH1RL9qEJ5bDsjBI8L4FOCJQF3KQlQtEkaaIaUspVMo6EH82jh8RFBgQH+FApRA9Pd3d3Eonk7+/v4+NDpVIjIyMzMzP37Nm9ZMlisVgYHR0ZGhrs5+dDJnu5kVxcSePcyeM8SWM9SOPdyG4TKEQvP+/wiPBwWnwoOzlcNiU2fSNv8UHJhpOyvCZl4RVV4RWwoA0pbEMLmhFDI5BXl5xzWbnlI5FqVmBwaHhsBI8XS09OkW041U9CYPlNWFEjmHsJm5nN4tNjmQwWlxYLL3oxQmB59aC+BclrTN9xBpi1Q5/3qO+q3W7HvYeBzHZ1OBwcDmfcuHH9nIKgUqnwi23Xrl39seNwONra2oYNG0YgEFxdXX+37avZbD5z5oxSqew2c9jT03PZsmV9mdN548aNnTt3xsXF9cxN8vX1xaNJfclNWrhwIf6qGTNm9PWj9k23b992Tr/o1lz9xfTNN9+MGDEiKSmp/6b+4nq29+BUaGjoMwaV99p1cdiwYSKR6LXXXnuuzsQDK7vD/uU/rhUuWVicnnZEp6nSoKUIUIHCRqx3QhzRqE0oUonA1WqsWo2ZEFgvEj6NECYM7rn+XR7RgxBGCDwGQKWAdLuIkyrmChMSo2OZoUGBMIe+EwOLMagMVR5Uyw9rFaWY7A2F5I3kxDKZtEqmOpageoMrWcFkzeByMqQJOliuAqRcATciKpJCoVIoFF9fX09PT7wqOygoiMvlTpqUrlTKo6Ii/Px8qFQyiUQkk4geFKIryc2V6OJJIXqHBAfGsYLYSUEiNEI1i5O5QbXyYEr2O2mFjUh+mzSnNTmvTWZokxvaVIZWIL8VNDRDhmaVviE5t1G1+V2hbGJggH9ETDiPw2LKpss3nO0/IdS7m8DcGnT6LgY3LoYRz+TExCGLZZvf7zshYEOzWt+A7TrfjRAF+Y9+lDsJ0cfzp6+EkEgkw4cP/+GHH17kJH0sBEHwK2fr1q39seNwOK5du4ZnuI4fP77v1Q+1tbUTJ07sNmBu/PjxM2bMaGlp6fn8W7dulZWVqVSqnjPpxo0bh6JoVVXVc/lVc+fOxV8+4DlCt27dcjYubG1t7b/BH374YcyYMQKBoP+m/srqIx4IBIKnp+czgpP37t1bvXo1PgHlSQ0ePJjL5Q7I1L8X1s0f/nZw3crq6dNOTp50NEVTggAlkKocg7vhofy3hDiiUVersSoE1guFGi5PyODQY2NDwgOmSoQHIbQSUD2DED1XJdKDECKuMDExiskOjQjDBJxcNWZCNcdBtApGyiBVGaIwYkAlBhhhpRGQVQKyY3L5cUHyPrZwFZuTIeJDCkkSIBco5SyBIDoq2s/Xj0QieXl5kclkXx+fwMCA4ODAkJBAX19vT093Dw93EolIJhNJVB/fwNDwKFpUND08lh+bqJNmrkfXlMmyLsrzmsCCNrTomrrourrgEzT/ulZfrzXUqvMbsIIWqKBNUfBxUt61ZH0LVFiP7nhblKQN9KFGRIRx2RyWfIFi4zsDRQhkehadExtDj2dyaHHwouciBGJoxvIa0J2/IQQ0e+fuogL8ZHjexht9JYRKpRo8eHA/fwpptVr8sul/G+RPP/0Uv2uPGTMGTxPqu65evTpv3jwXF5cnr+Rhw4ap1eoPPvjAbrd3dnaeP39+9uzZveYmsVisvLy8L7/88gUOe86cObidefPmvcDLn6EBJ8RApTj/lfXdd985M7B/V9HR0b/rJv76668nTpyIjIzEX7JgwYLr16//ZzNf7Q7HQ6v1668+rcjeeCAVNcmT3pInn0aBozqwMhWoTINM6VhVqvaYWvsWpDsGoaVaqFKnKQWQShg1qWGjRrEb4E+UCCR8EZPOCAwLVjOY+wG0GoVLNcoKNdxzVWKwCYPxiJOTECZQUQrLS2HABAAVSplBwJvE4ySIJbF0ZmB4AMxnFMBwJYwYUcgIg0ZAZQRVlRBQCQGVoMoIKitApREFjTrUBEMmifQwT5jHYi3nxE4TRKmThTKljCFkB0eGEomeXp7EgNBgalBAeGhEokTGYLH9vD2CqK6+PmRyULR3vMhHCAfC82PnFiZuPQ0W1sKFtVB+HZjfCuVfhgytzgUbWmFD8+PVAhlaQUMraGiFDK1o4SfwljM8kdKf4hkTH8sRCCIUGckbTz0PDFrUPZehGdE3qXa+j2Qu5LNjmSx6HIPJmLxJuetDRN+A6OsRfT1qaHi08hvRojYwr0mZVSPfeVGx6yKYcwnOq9Hp67C8C4DhvDzvknRXk07fqt50QjRlfVFhnsPhsFgebVZbLXZzV586SfaVEFOnTiUQCGq1ura29oXP+PT0dPzK6X+l7hdffIH3Qx01alRfwkQ99dVXX61fv75btfPgwYPFYjGdTu85yN7f33/x4sW1tbX9maE9Y8YM3NqiRYte2EivGnBC3L9/n0gkxsTE/GnNcf98Xb58GZ+M2xf1fYKW0WgkEAgRERHPiEr9abI7HF0O+/UvPt66esGOdKR8YsqRVE0xoqpEVNUoYAQVlbDKhMHVGtSkRowoWK4BKzRYCYyUIagRg46giv1y3sREfrIogc3ihEaFa9mc10F1NQaXqhXPS4gSGKgEgAqlLF/Am8znJiZI4uiMwHB/mE8vgKBKGC5HwQoYwAnRfcFAhQY2IdBRmbIqMfl1kTAngbtRwpomYKmFPLmYJ0kScnnMyMjwoLBQqp9vSFAIn5/AZHMiw/1pkQHhsXHxsnTxlHXKZXs0u85gRc2qwqtSwxVVwVW08ApkaOnjgg2taOGn0ObTHKHMn0qk0ekcoSBKlZm86XS/CdGE5DWqtr8HT57HY8UymPHxdBZj0kblrguwvh7Oq/sNJPR1cM77cPZ5NPeiLr8upaBBk1cL7bgA7LgE5dXAu2tV+TWooXlKYZNmbXHS1KVnTh93PEEIm91uMTv6MGKuz4T46quv8LygIUOGSKXSc+fOvcBPS3wHj0AgLFu27Hlf2/N48Pq44cOHX7t27YXt/Pjjj3l5ec75nT2FR5OOHDnSn5l0Tk2fPh03+2KDaJ6hH374Ab/ZvfTSSwNSTN7R0UGlUqOiov6HCeFwOGpra3tOL++plJSUvv8yuHv3rru7+4YNG/7QI++r7PYHvz58++K7So2UTQtM5dBXAKqdGRmHtCnVIHYcVp8AkSOgshSUvo5KDqqlVShcjsIlGqxEjZbB4JswcChBMEnMT05I5PL4EXExKQLBQVRbrUGKn5MQZbC8FAYrQdCokhUIcUIkxTNYgZEBfSIEqDJBQCWgqlQpK5WKMpX8sEp2EJDlJIpWC3nThEydTAiqJBwhN45Bj42h0cIjGQw2nc1hsukMDjsuWS1fkJey40y6vjb1tavqvV9Cu/8O5H8J5l2Hcq8+HyGKPoE2vcXiJflTiTQGnS0QxIAzZJvP9JMQGkMTmteg3P4OOHEOmxFDp8fSGUx6ygr59vcgZxBJX48vTF+bbnh3YsEHaYYLuryPNLmXtPqG1PxW5c5WZV4rsrsRLajRZr+fse3Ecn35axVV3333tcPhsFrNT/RlwvsW/o76SgiHw7FkyRLnBTNo0CCJRHLq1Knn4sQA/oL+xz/+gd8Qhw4d2v8b4r179w4ePPhkk4yXX36ZxWLp9fqBnSeckZGB21++fPkAmnU4HDdv3sS/kMGDB1+9erX/Bn/++Wd3d3cajdYfn+mvqW+++Wb79u3OypjfhYRGo3neSqAVK1Y0Nzf/Acf+IrKZbZda6hJSlC7+7h7uY0N8vIUM9nIVVITpSrBUE4hWSKWlyoQynaxyIlgNIWUwWJqCHtYixZDqGAQdEAjShTypRMLjCyLpsWki0SF1SrUWLtbIeyeEGnZmvjqLJCqhJwkhLxDyM35LiEIYMiFIuRoyImBlb3ioBFRVKlUloKqA8PRZoBoAT6jAt5TKcnnyFgErgxenTObyk/h8vlDCEwnZHJ5AwBbw2XxeLD8hFp6jXH9MW9Cs0jcl7mxMzL6sKryh3vuluuAalNcM5jeD+S19WVB+K1b0CbDxeDxb7Ef1otGZTK4wHp2n2HLuOQhhaO651IYmTN+o2P6OIn02Iz4mLjaGzWTEo/Okm89Cj7tuPN5vqIdzLwE7T+sKL07a15qyuwXMqVfurAeyWhD9Z7C+Dcx+D915QrXsADxny/7KY+22B3a72eGwWa3mf9+x+xYJeg5COO/vT3JCJBIdP368jy2GBnCf9ubNm3hQZciQIb1uMr+A7t+/76yf2L59+x9xZ5w8eTJuf8WKFQNreQAJ8c033+j1eg6HM2jQIK1WO1BH+BfRd999x2KxCATC5MmTne7RMyCh0Wjwhj/PpZ9//vmvQ1a7xdrY1jTp1WkiKIHDYwT6+7m4eYT5esuiI+aJhfkIakpLeTNVY1IrKxBZJQKXIZAxFSvTwodAZSkI5QlEOpFAmiTh8Plh8dE6oeANta5ah5Ron7IP0RshTJCiHFGUIZAJgioBeaGInyHgSRKT4hmsoMggRMAohOFnE8IEqI6oVCZAVQapSmFlOaisUiiOJyvOKuTnVPKDiaJXeQxUwhHJBCwumxfPEvE4CYlijpBP53IiuRK6bpV023lgdxvw2mXgtTZlUasivxk0NGiKGrS7m6G+4QHMb4HyW7DdV1UbjtCYXD+qZyyDxeAImJpXldve6TchGrWGBuW2d6Qps2ixUdFR4QIWPU4xJWn9CTC3Fh8Q9O9G33n1ckO9PLdell0ry6pTZNerchrB3BbNrjrpyuq4zK0R8FwfNkwJZaVnTHzn3aqOzgcOh81ms/xRhLBYLHFxcW5ubvv37+fxeN2uIj6ff/To0d/lhLMaoP+5nrdu3cLT/wcNGjQg6f8Oh8NmsznTWsrKygbEZjelpaXh9tesWTOwlr///nt8733IkCEvNu2ys7Pz3XffnTRp0pOh+f530PqrqbGx0dm/KyMjwwmJmpqanpB4Ae/hLyhLV0dd00fzF02bkQrNQlSQgMuKj/EJ8CaR3IPJxOSI0EUSsUGNHtRpDquRYhQ2YshRNVqtQQ7BQBEMrkoQoxJxsiQxnsXyjQqF2Kw9CFaVgpWkAM8RZfoNIRSFIkGmgCdJTKYz2UFRgY8IgaJGNVz5NB8CVFUCqkpAWQ4oSlXyMqW8QiEzSWXHIOVJQHkkSbaVw9PxmcIkLp3DYMTGsVkMgVjIEnDobGYMN4mbsVWZ3aAovKzc3QS+1gLtbgINdZD+krqgQbO7Cc7vc5Qpvxl7rU253hQZz/SjeMQyWPFsATd1JbDjvX5GmbSGJp2hQb717UTtzKiYqIjw0AR2XJxEI1lzFMypBbIvAdmX/s2JvAZo96eynGb5rho0rybF8CG67aRkWWkcusaHqxkfEj+c5D/S1Xe8K9XPlyqVsltaGx8P33Y4HA6rtU+bEI6+E6KzszMiIoJMJlssFrPZfPToUWcLDac4HI7JZOro6HiakaVLl+LP7H9F8Z07d5z9l15sdHBPWSwWNpuN2zx8+PCA2Oym1NRU3P66desG1vI333yD3/heeeWV5x3K/fe//z0vLy8+Pr7n/vyJEycG9jj/Crpw4aKblGYAACAASURBVIKTgs/wJP438OBwOLocnR9frd+6aOZGDNqklM9N4KdJ+WByMpPBJPmSR7mOJnmNF0eHzkuW7MKQgynYUa36FAyegqFSBN4Oq6Yli1XSxKTEhBg63SvIVxZLKwKgqhSsNA3sOyGqIGU5qixDoSonIYT8JEkynckKjgxEhcwiBKnCCYFCvRKiHFSVqhRlKkWlSlmlUlaBgBEGy9RgSSpWolRWJ6h285KmcNlCMYshZPN4HA6fy0sQ8sVcnoAdx0sUZmwBsuqAwk9U+W2goRU1tGoK2jQFV5Hcy1BOC6R/LkJclq8zhtHoflSPOCY3jikUpK8Fd37Qf0KkGurlW98Rq2eFR0eFhwVLuXE0EZCw+giQW6fKuqR6AhJAdq18ewOcVafbdR7bYEqcsS0sKd0tgj/WM3DUuAku7qO8yK5kItnfJyQ0NDSKFlxQmOdw2Ox2m8PhsNsdXV1Wq6VPiOgrIWw2G51Od3NzczZBMpvNx48fF4vF3e4pTCazvLy81yyO1atX48/pf2fTX375xZmGdPHixX5aw2Wz2ZzV1/3vLdirNBoNbn/AJ/O8ACE6OjreeeedSZMmdUv8JRAI3t7eeBrogQMHBvY4/1P6+uuvnxybceHCBefw8ych4fQk/mfwYHc4OmydVz9pKFq1qGRqRkV6Wi6sWAMmTuGLNAKxNFEcyY31DPX2oLgHU8mSiIhViuQiDDVqdCZdWpFOt1SLajGFEpKJhYLQyGgXkhcnJDRbBVbqsAotVI7BZQhUgcGVatSEwSYENKGQ6SmEqECV5ShcBcOVoKJI/IgQDCYnOCoEEbEKUdSEoRVquBKBKkFVRY9VBipLAEWZSmFSKY+oVEcg0ITB5SnIGynIAbnMlKQ8KFbOFIoSxHyWiMMT8vgiIT9BLEjgixJ4cfxEYcYm5a4adPfn2j2fp+z5LGX3DV3RdcxwDcy5CuS0OQkB57c6V++QyG9BX2tTri6JiI71pXrFMjnxdA5v0kZw1wU0v7mPS1PYqiloURua1IZGbUGTrqBZW9CiyW/SGhrBraeEaGZQWFBAoDefEcURKiQL9gKbT0M734dza2F9A5RXD+XWItkfoetPJs9/PQ5eTolTjvQKGTJmwkvDh413cSd6TvCjjvb3neDh7uLi4uXjExRLo23ZuvFxow273W63WKxWS5+2kJ9jH4LL5Y4fP/7HH3988kGr1Xr69GmJRNLt52dcXFxxcXG3NnnOzqb9j24P+Eg1x59CCLVajdvfsmXLwFp+LkJ8/fXXubm5cXFx3cAwZMgQPp+/b9++W7duHTt2jDAQ/VH+Crp58yadTh8+fPjp06edDz4NEufPn585c+avv/76HzrYP0Sffnu9YOPyyqlTjmZMLJusrdapDUlJaxNEcxPFOokwScSLp9ODQyJIVB8XkkdcVIxGqpqtmzw7Y+rEqZnotMkyFIimxZAoviNHu/qSvOfLFSW6lKMwWqHRFMOwUYMdS9EdxeCjKtWbIFj9GA+/IQSsLEcUZShUDUFGQL5bLMwU8pIkyUwWPygqDEzgGDCsXI2VqmEjDFaCQDmk6rl6SXACVEYQqIQVFVBSIY+nEfISRBIBj8/hcXg8PofLZ3M5fBGfJpCKZu4E8hqgwqtIQSv8eCEFl5HCy0hBq5MNSMFl5+pJC1DfDBguI4VXkaV7YqKjvX194xh0RjwtfvJ2ZdYlrKClj0u3u1Vb0KjOq9Hpa9KK6iYWNaYUNiL5TVB+m27DIbZUSSSPd/UY4x8QJOMlyMAM2eRV2PL96dnvpBbUwjveSVxWxp6WE8pXu/nHvzLKdeTIER7uLkSSp4uHy1ivALJ/EIU6wZM62jc6KCieHhfPUysQ59A2m82GpzMNZOc+XCKRaPTo0b32NLbZbGfPnpXJZN2aUtBotDfeeMPJia1bt+KPIwjS9/ftVR0dHX5+fri1d999t5/WcP0JhIAgCLe/Y8eOgbX81Vdf4QUiw4cP//TTT3t9TkdHx9tvv52enj5hwoRubCCRSHPmzKmpqXFuZJlMJgKBkJ+fP7DH+efr5s2b+NY0gUAYN27ck+XNT4PEX2e6w4DI7rDf+O7Tos0rjFMzj2ZMLJmkMeqwqqkZhzIn7kTApdLkGUmSlMREJZ/PZsS5BZDHuI4bP35ciG+AkMmRiiQinigmNtov0H/cePfhYyaQvEhqHqcoLaUyPeVIhq4yDTOlq6vStRU6pFwNGbWoSY2YekDiMSHg3xAiMZnJ5gdFh4HiFyUEqKqAACMkrwCTinh8rZCXIErkOwnB47N5HL5YECuUimbuUOU1QIUfP8mAnjBwPoIWtj35+GMfohkwXIYLr0JLXouOjvb2841jMBjxsfTM7cqsS333IRB9Haav0xQ06AqbtEXNWH4jkFsP5Dao9XWqRXnhDM5YlxGjx48kkijRwVFsFp+bqBKjUyWTV4oy1kQrZ3hGS4YSwwaN8Ro2znP8BFcP13FenuPIJFeyt4c72cPfnxQZQo2JCWWJk3hSSCKRpqKqqupq/GT4AwmRnJw8fPjwZ7S4sNvt7733nlKpHDJkyJN3n8jIyH379v366696vR5/pP/94Lq6uoKCgnBrZ86c6ac1XH8CIUAQxO33vzNVN/3tb3/DCTFixIieJYRfffVVdnZ2z063Tqfh5s2b3V5SXl5OGIguvP9Z/fDDD048/C4k0tLSBnbw319G9i9ufr5vx9qKKRlHM9LLJutMqZrDWrh8ku7olIyy1PQsuXKRQJDJ52kShAIxL5YRSwn0HeUybtiIkeNHTvByIbq5ubm5uY8YNmboqLFj3VzjQgOXwop9EzWVKSqjDqjUwUYdWqKFi1PQsonaSi32aCsCg4woZERBIwpWw6pyVFmGIdUw7CREskTKwgnxWx/C1FvvvwoY6CMheDw+l88R8HsnBFxwueeC8luh/EcuBVrUhha2IYVtMA6PglYIh0R+C2hoAQvaoIIrwOKiqMgonwC/eCaTER/LnLJTmd13QrRA2TVw7iV1QRNW1IoUXgbzW0BDK5rfnJp1RjxxCSUgcOjwl4aOHDp2gouHiwfV08XXm+QbGOjlFzyeSB01bsLoUSPHjR42bsJYV9fxRPexJM8xJOJYMtmVSnUPigyIY8Zw2DyWAOSBcxK0C2WatLR07Pjx486zASfEQPZ2xaVSqV5++eVn9y7Fdf78eQiC8N6rTsXExDi7f8tksr6/b68ym83h4eG4tSc/fH/0JxBCqVTi9nNzcwfWcq+EaG9vP3fuXFpaWrfpe7jTMHfu3Cedhm76HyBETzz0CokPP/wQhwSKov+b5YF2+9c/fnUwZ3NZ5qSjmekVGanV6brqybqqiZpjGuwtje6oLvUNtWaLUrYoUTRdLJmYlJQs4gVFhIz1ch8+YcJIF9eho0ePGj161Igxrwwf+fKYke7ECclM2iZMWYLITFrwmBY9okYqMcSoVRvTdCadulKDVGqQSjVsfJz5WoUCFZiqXI0cQZBKUPFagmiKiC9NkrE5guCYcCiBm69WV2jUZRqkEoFMMFiO9lgIaOzNjXg6IQRcvoDD5woShHEimXjWTlDfCBZehQpae1mFl6HCy3BRG4Kv3VeQ3Vfgoja4qA0uvIz/FSpoBQtagYIrgKFNPt8QGR7hFxgQz2Qw4mI507NVOTV93qluRnNrkbxayNCE9wRECy6n7L06eU+jbvU+pkzrTvQcOnTwsFGjRo0dP2ro8DEjXxk9euiwkUOHjRo2aswI1/EjSW4jKG7D3ccP9fIY4+vjGRTsHxoVHhEXG0WnB/MTYuRqAbZAPDkraUGJamUJsGCzZtbss7/9GT3wvV0dDgeGYS+99NL169f7+PyPPvpIrVYPHTq05yWamJjY9/ftVRaLJTo6GrdW/diB6qf+BELI5XLcfl5e3sBa/vLLL/FhFaNGjfrb3/721Vdf7dq1KyYmpts3//LLLwsEgv379/9uE8b/dkI8DQ+9QuLdd9+dMWPGwE6X+qvI7nDYbd/+9E1p/o6SyRPfzJxUOTX96KTUNzNTT0xJPT0x7XRq6nGdrio1tXxy+uG0tEIZtCFROkMoVPHZtLgoN3/KYNcxQ8aOGjl6rMvYCcOHDX9pxNBhY4b5U4hTE0VFGrB8cvqJjIy3UtLfxDRHUXUVhpnUSJUaqVIjj8JNGFyJwUcQwIipKtTIUQQxQcrXEsVOQoTERMCJvAKNxqjVlGtREwpXwVAv7f9g8Pl8CIGAJxBy+TxhgjBOJEuYvQvUNz7Nh3BGltCiK2jRFazoClZ0BS185Ew8ikQVXIbzW6GCKyp9a/Kc3Iiw8ICgQAabxYij8WbmAjm1fc9l0hQ2o/lN8pwGaU4zaGjRFTRkFNZMzjqZNHFheCzbw238qFHDh40ZP3Ksy6ihr4wYPWr42DHDx44e5TLezdON6OXu6Tnew3WUN8klOCQwgs4MYyWGchW0ZB0fmUaftJY9Sy9fXq7a/AGQ15aypzVle5X21c3n33/P8UT4FO/w2pfT5zkIgXdVet4C5pqaGq1W240TLi4ueXl53WbDPZdsNlt8fDxurby8/IXtdJMzNWvPnj0DZfNJJSUl4fYLCwsH1vIXX3yBtzIcNmyYVCrtmZ6EOw21tbV9LIP/rybEs/HQKyT6eMH898nucNhsN+98a9ydVTwx/c0pk6qmTzo2Oe1ImqY6XXs0I+1o5sQjGenVk9Kq01OPpqYe06UcApCsJOlioRCix4aH+E4gu450dx073tVtzPgxw0cMGz506MihrmPHccIjpsklW9PTDk2ZVpmeUaVNNakxIwab1Ei1Bq1ycgKDTRh8BP0NIfYkiqeKBdIkGZsrDKF1J0Q10svYicrn9CGEAiFPIOQKeMJEUbxYnjB7F2Rogot634fAYYAWtuFsUO++qt591QkJ9DEkkILLUMEVVV6LZFZ2eFhYUHAQg8Wix9KEs/Vgbi2sb+zj0r3WBhe0SrMbZLlNSH5javZ72rXliplbwxgiMolMnDB6/Lixr4x2GTHWdeyo4aNGjxk7wdXFw32Cq9vYCeP/H3vnHR9llf3/rEhJ7wVCSANCQkhInd4zk8xMpj29TEuhKWBBbAgKSg1JZuaZSQIRpYT0QtFVV6khPTMpiCDurqvr6lp2XRWVkmR+f8yaxSQoCbC/3f3yeZ0/YJg53MB97nvOveeeExAUPDtiXvSChUuWpiazs5LF6GLpiiXAeu6y3dAzB6AdZ8CiDtTUoSrtkZr7icpB3c7j+KO7Ws+ccTqdNzcRuvsxREFBgZub29RqCXR2dpIk6eXldfMjGhMTs2PHjjHJUbepkZGR0SXgLt5dGN0Hs9lsd8vnzcrKynL5v+sr78mTJ93d3cevg9OnT+fxeHv37p3sv/N/LyFuBw+jkDh69Oj/7/HeY404ncPDn3z1SW3ZrgNaojlPV7dM32wgW7R4g4GsKdBXrTRWrTDUGsgGBG2C4ZZ84phe24Bilmz5I3SWMiU5LTEuKHKuf2hYoLt3oIent5eHu6dHkG9QSGDwguR4RJ7zPE5aceIAhh7G4SpUUwOr62HAVQqw9idCNLoIAYONADBKiByJlDmGEOi9I8T2XyUE+FP0MEqI8ZBQWwbku3uFy3YmJiTExS/KpNMzUpfyHyodR4jOn2w8IToRa7/S5Mgq6sk192NlDnzb8ezCrSkiLGhOhK/njHBf9yB//wfdA2Z6BwT4eQT7ewf7+QT7+84JCZofHZm0eElGBp3G5NIEOZlSnI6u566y5mxoAbadworOgTvfhXYNEFQPYG3PtbQZ9nQYt9Shhc+3tZ9zOp03btxwTYrbbxExCUK4amZ0dHRMYZa6VFxcPP4pjYqKeumll6bQeWJ0R+gu5uzfU0KMjIzweDyX/zvv1O3S999///rrr2MYNuFJw8MPP3z7QcMY/ZcS4vbx4FJBQcH/7yHfW404ncNO59+//dtr1S9b8rV1edojebpGPd6oJxoNZIORrDeS9UayQU80avEmHdakh1oIqBEGalGEAlRruLTcpQuj5s/1mxMcGhLg7+3u7+Ph4+01y9Nzuoe7T6B/RGwsncHSKjXP6fTmfOMBg/6oVnsEAJoUitdA4DUCbMBUVaj8EAYcIoj9iKZGLW/KlduE4pVCYa4sh8FlJSXFQwJuKaE9DGM1KmU9oKyHJrhRUa1R1qonsGqVslolO6yU/CuXicNhsJgsFofJYTK4mRw+N4WtyFltU5l6VZaB0RX/Zhtlw80GU/0w1Q/93ADru8riXkn+C5Gxi6NjFwh43CXpfM5D5dLtrfJd7aqiDk1JN2Syw5Z+DXUeoAZRqgc0dWpKOzXmbsDiUFscuaW9gNUOm1qhl1qQpyvQhzbJAGMmnR8TvcDd80H3WV7e3sFevgFeAb4hs2fPi5jvHRDsFxwQEz0nLXkhg51Jl8jSlWQmvi5709HsTcdyNr8p23ZKWdSm2t2hKupQFrcrdtiBon6l+ZzMdBYu6cWercYeWt/b2zs0NHRT2b57EEM89thjbm5uZ8+enco8dTqdTmdNTY3rsfTw8BjTk2fu3LkvvPDChKm0t9Loam61Wqc8pFv5vNeE2LNnzx16u3z58rZt25KSksYseb/5zW/YbHZlZeXUgrNR/TcSYrJ4QFH0P6FA9z3ViNM55HR+c+WbNxsOli7T1ebrjhp1DXq8QU80jrMGHVpHAo041ICADQTyKgY/L+Zp0xZnLE1YlJSQkpo8OyzY38/Hw9srYM7skJCQub4BAX4BgSHh8+MWi3j8AlDznB4v1eGVWuIQideAQI1SXqeSH0VVzShUBcMHNLk1uZJmudwqzC7gckVCPo1FT0tJhES8IlJ7AEJqlapGUF0PT5YQP8925XAYLCaTyWFwGAxuBpvHW8pSSddUqEz2KRBijGmod3OLOrING6JiE2Ni47J4vFS6OGvNHrC4EyzpAoo7YVM3Rtkx6wBiHVSV9mbvbNNQffjeC0h5v8bcpSpuU5d2osVvw5trVI/syiFW88TK1KXpUZHR/v7+M2Y+4OMd6OcX7uXj7xfgFRE5e+H8hKTElOSk1KWpmWlsMUth5Oc9L3x8j3hjs2xXh2xnm3xXW+6u9txdbcrdHcrdHSpTm2KnXV10XmVuk5aeBYt7kWeq8TXr+vr67jkhXDei7+R6mivF3s3NLSUlxeFwrFixwnW4Oqrw8PCNGzfeZp+i7Oxs16dKS0unPKQxuqeEGB4eHm2GvG/fvqk5+f7771977TUMw/z8/CZc9Xx8fP74xz/e+Wj/6whxHw8TykWIb69887vmKssKY12+7qhR16gnJiREvQ6rIcFmLXaUwBpRpBpDbOrcx5kZ/JSlyUuXZmZkzJ0XGRQaFr1gAYPDZrGZ9LSlixMTQ+bOm+7jN8vbLyoymstg4IByjQ7fSOKlCHIIwY5CSItM3piT06hRNKhlzSpZs1plkSoKs8TiLBGDy0pNTVJwmS+iSCUI16g1DZCmbtIxxASEYDE5TA6Dycvk8P9JCLXJrr5jQoDUoGrbSTH5eMyiJfPjFmfxeUxetmytDS5uw60OorwfszlAU5empAMx9yDWfpm5T1bSA1h69BX2wooubOfr2U/ul63aLCEfzhSrF6VmRsYuCA4L9fLxnj5z+gz36X5+of6+swMCA+bO9Y+Pm5e4KIHDEIoliBhcm1W4S7iuRrz5hHR3X67pvHxHq3znudxdbYqidkVRu6q4U1XcqTK1KYvsml0DavM5makVKrGjz9Zo1zwxODh4887SPdlleuGFF9zc3O6kn6Lrmq6bm1tSUpJrfBcuXHj44YfH7JCEhoY+/fTTv1p2e7Tr9a5du6Y8pDG614QYrQw4hbOT999/f9u2baP9y0Y1ffp0kUi0YcMGV1tWPz+/Dz/88M5H+99FiCng4X+jqMavasTpvOF0Xvn+u5PHaq2r8usK9EeNukYD2WCYmBDVWrjFQB7XaZsRuBlHG3B0p5AvS0yOj4mLiIgOnB0+Jyo6W5pDIjCBAblgjkgmSmPQImPjAgPn+HmG+vmEBUZGpzIZOhB6Cie2Q3AFAB0GkQZQ06iRHQUVLWrFfoVyi1SeJ5XJZTIOj5+weBEzefHTgKYSwWo1QD2orp2oOuxhjfKfXed+brckBIvL5DJdhEhhq2Rr96jNDhU1oBlNab3JAGv/eIMmIgRaNojueksELY9csCgmfnEWnysS5WTnbwF3nYGsA1DZeY3tXcA6AFj6UGsvYu5UFZ3SWc8ts54mX6yWP7RNhD2Sha5KZzLjFs2fGx4SGODt4+vh7eM+y3PWNPcHZ3jO8vIO8PUKio6Ym5EWR8tckrBo8VKmios9o3q2WlPSISnq5+2wi3c7FCbHKBuUuztGDzkAc5u6yA7tGgTN5xTms0hxL7GhWvfIE64c1HtLiO3bt7vdWSm3o0ePup7PhISEm5/P9957b+3atWMu+oaEhKxfv/4XODHa9fqll16a8pDGaDTXyGw23y2foxoaGsrIyHD5v/38qytXrhw/fhxF0fFBw9y5c1evXt3R0TE8PHz58uXRxt3/1whxP3r4BY04nddGnN//cOXs640Vq5fVFeiPGrRNRm2jgZyIEESNjmjJNxw1aBth6AiGvaYj98pzDDQmLT4pYm6U/+y5cUnJegx5lMCegDRrlXKDgAezWWqhIEuYtSSTERIb7+4f+uAsz0C/QHrikjyZ7Fkce5HEzAR0CAMatdghGN6Wk7NMKADFWbIcKZvLC583L3Ze+MNyaSWpq4HgOuCOCcHmMFhMNovL4jJZfBpXwE9hq2Vr92jMDhU1eCeEgKh+onzQsOsoRwrPjoiMXBDHZ9PFIhFHvUyz7S3AYpcX9yqpAWLf+3mvvK+luoldvyvcXg2u2y3RPS5U67kiWcrS5JjwsNl+M4K9HwjwmRbk7xEc4hccGuDj5znLc8a0WTO8vQKCA2YnL44XCmiZLEZSGieV3MR9tk5a0iaxDnKLungvvaPa9SZpPqnY3anc3eEKHdQlXa67eKClDSzqRXYPgJZWlfkMVmInn6s2Prr+8vuXnfeaEKWlpW5ubqP1Paag119/3fWIxsXFjc89/+CDD9atWzd6wdWlwMDARx55ZMI+o6Ndr+9iMy+JROLyeS+qTQwNDU0qQ/f999/funXr+KBhxowZAoFg3759n3/++eib+/r6Zs2a5ebmFhQUdIftxF36byHEp59+OlqR9z4exmt4xPnj0MiPV79vf+vInrUr6gv0Rwza5ryJCdGgJ+oM+pa8vCY9WYtCjThylEQPqRWrudzsdFrK0pTw+bHCLMFjWrzYqK0EkaZc7NUcVZFY8qiYD0m4TBk3UcRauDB+tl+ot7uXp4dnSFDAkviFConoERzaoUfL8oylOv1jGjWmyFHkZovFwpTUdN/AoOAAX5TNpHDyMIzVaDR1oOaOdplchGDzWDyWixCpHLX8kb0aS5+aGryTXSaIGiCsvcRzlSkMQUBIcGhkdEZqooTHpEvg7DVmcHMzVnJCa2lDd5+EX2zGNh5AHi2WQAahAspkC2JjYoO9PYLcH4jwnREZ6hs5Jyhq3twFcQvjFy9eELcwYm5YoL/XDI+Zvr5BEbOjMtLS6FxmAovPyM0XbTkutvTmUPYcS4/c3KYuOYGVvEGUvqks7nKxQVPaDZh6QHMvaLZDVDtU3IPu7keos2rLWby0V7uxJu+xJ//w01dt102I0dobv6pJEKKsrMzNze3gwYNTmadOp9PpfOutt1xP6fz58//xj39M+J7f//73Tz755GjLZZcCAgLWrFkzptzQaNfru9hr4Z4S4uZbfr8AWlfQgCDI+KAhIiJi7dq1nZ2d4/93/28SYgp4+D+yuTSq4RHnDzdGfrz2Q+c7x15+dFV9oeEXCNGo1zblFTTl5ddoiUM4VI0D1ah6P5j7MIsmp6UzGRnzE+NQULm1UH/ISDajyO8Iwzs6/XEU2iMVPcuj5XPS8Sw2mJPNZbCiY2J8Av09/P38goJDQmfHxS/M4tK0IvFDasiAo5AeUaFKLocRGRU7y8fX19crKzFhhwaoQol6GKmHwbtKCEEqRyN/ZC9wx4SArYNwSXt2wQux8Ut8Avx9Zs9eOH+uhJUmkMFCoFCR9yS+bjfxFKV+6CUJ+rBICnJ5WXGLl8yZG+nvHxQQEBAeHhYTNW9+zLyk5JSlaYxUOo/Gy2EJZSwWLyM5cfH8yODQoADfwNDAOUuWpiQymFFMqXjlTmVpl8IyCJh7cUunztqFWe2Axa4y2V3bSqN4gCx2yOJArG1IcS9ePIBSrSB1Rltq1z13OP/xJz786Wxy+CbdzvyZBCH27dvndmeppSdOnHCVgI2Ojv7lts9/+tOfNmzYMGfOnJsfb19f3xUrVoy2x7mLXa9H9W8jxIT3wC9durR169bExMQx69qMGTNEItErr7zyxRdf3Mr5/0FC3MfD7Wh4ZOTHG8NXr//Qfer1ynUP1y8ztBi0TQZt0y0I0ZyX35SXd5jEDhNwFa6pghUHIMUjHLqSncGgpS1empgHq6hC/SFEXQUpX9ZCNST4mhZ8CwOPqpX7s7K2s9grBFxMliWTCpYy0+YsnO8bHOYxy2/aLI9ZAb4x4ZH0pDS+SMhXSTkSXnx8nH9A4ExfH28/76XzItZLsg9iZDOKN8FwLQjUaNQ1GlWtRlULqGoAZTWg+GVCWFhshM8W8kUcFofJZrHZXDaXyREweEJRKg+SP/ryLxACoAZAqh+y9MGWPtjSD1H9kHUAsfQj5j7I4gCtfZC1H7b2I9ZBzfZ36Kr80PAIL18fz6Cg8NkBrLTFWVKlNFcly1XlqJAcDSGRg0wmJy4yIszX3c/XPSDQNygsbE5kbExCahJdRBdr6HI9XbWcA68V4I+LsdXZKlIskHBoGXHxC/19fP28fRcnJccxeDFivfzZarCkByq2kyVdut3nsKI2sKRPYf2jovxjoLQLMHWDph7Q1AOae2HKDlMOxNoBTt524AAAIABJREFUF/cQJf0Y1Q5S57SlXboNB5avf/rPf/5nmujw8PDQ0NDNeU2/rEkQ4s6XjDNnzriKv86bN+92LlR/9NFHmzZtGu0U5JKPj8+yZcsuXLiwYsUK1yt33vV6VPeUELeqJXXlypVjx45NGDRERkY++uij3d3dv7pp2NPT47q4HhIS8sknn9z5aP/DCXEfD5PSjzeudra/ZX3yoaoVhiY9UY8jTQay2ahtMpAu+9dGk5Fw3ZZo0uGNJNZE4nUwvInHlQiYjEwmLTV1LaysIck6DK3BsDocrsXhGhyuweFaAqkn0ToUeFXE28pMXSFIB+RcgSxrKY0dOTchwHeOt2+Qr2+gn5dfoLe/v6e/h4efu6ePp9fMWd6zfuPh4enpy09I2g3Cxwi8BcbqILxaBdUp1A1qdSOkroUVhyF5NaAcf5OuWqmoUcqqVdnFdAYs4gr4QhaDxWQzGRwmi00T8Fh8kTRdliddX6Ux96ktExBCQ/WrbedBagArdWhL7ESJHTE5IPMAWtyNFHepTXaFtV9dcR4ps8PFrYrHyhOTkzy9Znl6u3t5u3v7egSF+MclxKSxGAw+h8XJTEtJiImZExASOjMw3Dt07vxon0WLwhNTU1P5cppiGQt5hk28RH/0sHDrqVzLQG5pn+ylt3Ie38MhHqHLQAaHFxriHxMRSKelLUwX0XRboaIOsKRXU9ylKe3UlHaBpk7Q1AaazkHmc7ClZ7xBFoemuB239KKWQdgySBafQdeXPv7c1r/97avRyTA0NDR6de5XNQlCNDQ0uN1ZQaG2tjZX2dfw8PC//vWvt/mpv/zlLy+++GJkZOQYToy2A3v44YenPKQxuteEiI+Pd/l3pYRdunTppZdeGh80zJw5Mysra//+/bdfmKS7u3vGjBlubm6hoaHjC7VOQf/JhLiPh8nqxxtXezrfLn96ddUKQ7OBbCDQJv2tCPHTr3V4A4k1klgtDG3kcbMFTEYmMzM1dQ2srNa6CIHW4vAYqyeR5jyyRotQOTkvcARPCHLyRVJxJmtxXPycufMCA4P8fAMCfAOCA8N8fAI93L28PGZ5+Hg86OXt7um9eHb4CibzVRJt0GurUagaBmoAVZU696BGfgCSH4IVtySESnp4lBCCnxGCz2VxRTlpUmPO+kPqWxHC3Ke29EHUAEadJy3nMdOAprQ/t9gh231KRXWpbb9XmT6GTX/QlrapN1RkAtrgsGAvHw8vH8/pMx/08JoVGOwXEhroGRjo4efn6+8VGug5b7bfwug5i+ZHJSQmJ/KVCSIkUVaYij7DWWmRPlsPbH8HMp2DLF0qU6/a1E/aHHmmd9TrKR7+EIsrjIqcuyA6LDMzLZ6RwykognZ3AiV2oKQXKOkBSnpAUzdo6gRNnZC56xaE6NUUt+OWHtQyAFsGyJLT6HrTo8+9+NVX/1pJXDHEbc6cSRDClYm0devWyc3Nm9TV1eVaxcLCwiZ7ifrTTz/dtm1bdHT0+Of/zjvWjUomk7l83vXaq06n8/r166MVy9evX0+SpKsa682Kiop67LHHplDa5P8OIe4fTU9BV4eu9dvP7NnwSNUKQ4tR10Bgt0+IOgTaxOfmCFhMGiszLW0NoqzRaW9FiFoSqTZgdRh8XAW/IUcOChUbaGw9LU3GSEteEj8vIjwgKMjH1z8wKNTHO8Bjpoe3h7uHt+eDnl7TZnn4ubvTIuasl2bt0yJVuKYaVtVCynpQVYeoa1CgGlVXgxNU47gLhLA4ALMdtvRj1gt42fto2fuA7aLSeiHH2pG7ZwCo+Bgyf0wWDZAba7KI/JjkuJkeMz29PAKC/L19vbx9vXz8fP0C/D18ff1Dw6JjY+MT4hcvXpKcSmPyxXyVId1Qyn6oUvJMk3LbSU1pt4rql1PnIUsXZO5SFPdIixygZYCgOtVbmoSrdnBF2YsTFiXGR2fQMpbwVJI1ZUhpD1DaBxQ7gBIHWOoAS3vB0l7I3AOZJsADbOmBLD2a4jbc0o1a+mDLAFlyCl1f8m8ixG9/+1u3O0scstvtrp2Q4ODgP//5z1Pw8MUXXxQVFc2fP//mJcDd3R3DsLvSrXq0OndRUdGdexuj4eHh2NjYCVcxV9Bw4MCBKVcz7OrqcpVbnwJ9J9R/JiHu42EqGnFeH752YbB93/OPH1xuOJJvaCTxyRAC3CTg5ghZTBqLlpa2FlHV6LR1OFqLYeMJUUcgdTq8DoWbVJrXAPgoBO9TyrcImQ8J6LnM9IzFC6OjI30Dg30Dgv38/P08vf29fLy8vKfNcH9g+swZ0x8M8ZrJjIt6PjerWgvWYWAjrGkGNEcA4CgINkNALfivLNh/mYsQ6n8Sgi8Qspi3JsRE2a6gtR+zDcDUAGAaVJUMKkoHck0OublHXXFZs+cyaOsnSs9oNx9SGB9PTqOHBPrP8pju6e0eFBIYOjssIDDIPyBoTvi8eVHR8xctTkxnJws0yfKCdPQZ5rLdkvVVeFEvvKtXs6tbUdStMPepyi5oKi9rStshUwdADciKB3J29SpLu1TFrbKN1cJsRXp6WkpyQiaDvlQEydftQ80OoKQfKOkDS12EsEOmXsjcC5l7b0mIklbc0o1aHDDVR5acQJ8sfnTjljG7TPeEEG+//babm9tTTz01udl5kwYGBlzV5QICAu7kNPWLL74oLS0d7VM9usjCMNza2jplt857Rojvvvvu6NGjIAi6vubfrKioqMcff7y3t/cO/4r29vYp7OD9gv4DCXEfD1PTyLDzuvP6B5d6D7z45KHl+qOFxmYd3qQnbo8QaB0CPS/gSUVsFp1NT09/BFXX6nX1BFaHT0CIWgxuxNEjRm2dEX+FUL+Kqep1YDMJlWtyVws4GlpGRlJS2Nx5vsGhwaEhoYEBAb6BXp5+M2Z4zJzl4enl6ek+08djhjB67lPsTKs6t4Ekj+HEMQ14TKk+qtbUAep7EUNAVD9mHYAsA+rSAWVxv8pkh6guzNaqs11Cd3VpNlcjG3eqVy1P47DDg6K8H/Sf6T7dx9/LL8A3OCQsNGzuvHmxCxcmJqTQk9jSDOVy9rJdog1N2bs6sy2Xcm2/15oHSdMAbu5HTHbQ3Ksx96jNPUBpB2Z1oLYLqtLB3OIB0DoIlg8ot7+WlQtkMuhpaUvobFaqGM1dvx+19AGlfWCpHSq1Q+ZeyNQNm3tgSzdsucUuE9WlKTmLU50oZYcpB1lyAn1y96MbN//9b38bnQ+3n8jknBQhTp8+7XZnx8IXLlzw9PR0u0uVITZu3Dh+UZg+fbpGozl58uTUfN51Qly6dOnFF18cf9Lg7u4uFosPHjx4JyXQb9b/PCHunz1MWSPDzuvOGx/9caBq2zMHl+uPL8s7YiAnRwj+KCEyHsHUdQZ9A4FPSIh6HGnCkSpY8zKq2m+Eq/KQOhJ8DUcaYHBXdtZKNiebxoiLTwyNjJoXNW9OWIifb4CPd6Cfb2CQf1BgQJCPt8/0GTO9pj2wyNcbTkrcIpO9jKDVIFinVjaoFLWae3IOAZgdmpJewDQAWy/hFRf1e/oLylsLy9/I39IEr7VKjY+JYCiNmz47IszHI8Bzpv8sz5l+Ad5+AX4R86IXxiUmJWWmpbIWi8hMcmPuhmrM0gFXvKcsuywv+6PC9gGwuwcu6UVKexFLL2LpgUydQGkbaO6BzA51cW/ujm5NaR9afgGgHNIXmnNUaAadkZqexOByl4ox6bpXYHM/UNoDmbogcxdk7oQtHTDVDlvaEarj1oQ4g1MdKNULU3ay9B30yaJ/EyHa2trc3NxWrlw5uel5k95//31XAXBPT88PPvhgyn5cGu16HRMTM6a/5oMPPqhUKt95553J+rxbhHAFDRAEjT9pcOnAgQN34n+8/rcJ8dlnn92PHqauYecN59AnfzpfvWPDoeW615flHdFPjhCbeLwcEYfN4NAzMh7F1fW3JkQtDtViUC0O1eNQAw41YUgLih7F0GMQdEAmW8fmKhmc9HRGdELCwoQFYbODPTx9fb2DIkIjosIigvyD/f0DA4Nne4SETvf39vfySA0JMiYv3iHhvwxKD4HyakDxczyoawB1teKfhCihMyARVyAQsBhMJpvJ4DD+RYgcY84TPyME+C9C9KtL7YqdXRrTIFrxB2LPB0jpudyNhwRrtmvyVmsQbZY4Nzk5MzR47syZHu6eHn5B3gHBPr7+XsGhITQGm8PNotP4InaW9PG9uTtOK0t7lOY+VakdLGoni1t1pja1pV9l6VOZetWmHrWpR2PqBcy9gNkBmQc0xb3KHV1wsZ0o69OUduRsrM/W4Kk0WmpaMoPPT85CxI9WguZB0NwNWdohSztkaYOpcxDVClvPwrZzkKUXsvT8ZL3/NKpLXXwap9pRqge29BIlv0Of3LX2uef/9tW/dpnuFSF6enrc3Nzy8vImNztv0h/+8AdXqb5Zs2ZdunRpyn5c2rFjh2s5AADgypUrlZWVo7cNXJo2bZpUKn3jjTdu/5/jzglx6dKlLVu2jA8aZs2axePxRisV3uFu2HidPXt22rRpbm5uERERv3Bt4vb1n0OI+5tLd6IRp/PqiPOqc+Tjjy8f3Lm5skDfmK8/ttxwpEDfkqdrNmpdNoqKf5qeaNITjTq8UYvV48jObCEoYmfSmRnpmctAxatasgVB64gJCFGDQzUYVE+ijSRaj0F1CFSPIfUEUkfADYCmUpD1MIsl4vGWJKcnJybGRs8N8vGPmR+XLuLyZeLM9PToiOjA2XP9QsP9QsLcgwOnB3j5B3qlzwvPS0nfLVU04kQzAjeoVU2AskGTW63JOQTkHITUh1SKV2WSTXS6VijKluRyOAIum8vmCpksJl/A4kgkmUCBbEO1mhoErf0A1ZNr6pGVOnJNDpXJDhZ3QuYe+OX3sPJuZFuDcvVLUixfCahwODdHIUvMyAyOiPIJDPP2D/T08PB0f9DHa5a3r4+njzeTRUNANZ3OTRESuWv3gCUdaqpfabYrTL0qcxdg6oBMrZD5nJrqUlE9arMDMPeDlj7Q3ANZumGXuQ6cS3sRcx9o6tO8+KZYgSSn0pKXpHD50lSJTvJYpaakFzL3otZOzNqK284QthNa20ld2Smd7SxJ9ZDWTtLaQVrbSds5sqyVLDuDWU+TZad0FacRayu+p3tV5Wni8S1btm+7fv374ZHrTufQiPP60PDVkZHrTueQ03lX+1T39/e7ubnhOD7lyfrRRx+5Uv6nT59++91Mb6Xdu3e7VgSpVOp65bvvvnv11VdTU1NvXi9+85vfSCSS119//XY4oVQqXZ/avn37pAbz3XffHTlyBATBMdVq3dzcYmJi1q1b19fX9/XXX0dERNwjQkz2rsmv6j+EEJ9++uloucPbxMP9zaWbNeJ0/uh0XnU6//KXD+vNu/YV5tcatUdXGI8WGlvydKOQGGVDs4Fs/okQLkjUE2hxjggTsNJpjPR0Wp5a/rKWaIHQOnLCGGJiO0wijTDQIMl5js/JFfJTU+lLFycumB8xf/4CkVKhyMflsAKQS9VSGY3HjYpeMNs3xM83wNPP1zvYPyQ0aG5ocGpkRGFmWpFCtg/S7FfKDkoltYrsGoWkDgEaYKhKnv1MRjpMZ3G5WTQGl8Vk0+js9Ix0FptGFwrSVPqcZw6qzP0aagCqGID3XoT2vKexOiBTh9HWnl/6lnJdqTDvCT5kkKghca48k8WIWrgwKio8LCzA28/Ly8/b09fbw9PDy9vT38/X1y8gMjpaLBEqlbJMnjSrcBu8u01j6VdbHGqLXW2xqy09qn9at5rqUpt7NeY+0NIPWxwI1YVY2xGqE6E6/3mWYLZDJgdkHgS3vi2UqxcnpyYlJvEE0kypIeeJlwFzJ0LZMaqXoDpI2zmt7Yzeds5gazdYO3S2Dp2tTWc7pys7qys7rSs/pSs/SdpOGPacMlScQqynicrONa+cJR99fteuHVe+//t3V/7+w4/ffP/D199d+duV77++eu3b4ZFfP6+eBCEuXLjwwAMPgCA45cn6l7/8xVXG9YEHHjh//vyU/bhksVhci4JYLL759e+///7QoUOZmZljOCEUCo8cOXL9+vVf8KlWq13vv/2k3osXL94qaMjOzj548OBXP8V3X3/99ejtv3Pnzk3tp76V/icJMYXNpft4GK8hp/OG0/nFXz9+bY/lwIplDUbda8uMxwoMt0+IEqkI47MyaczMdLpRLX9ZR7QgWC2J1RHIeJuQEDUk0gCDDTL5NkkWIhIyMpmJCQnz46KWcuhqA0Hm4zogt1AuKwQAFAOFuTmpDNqC6Jhw/+Awv0C/oIBpAZ7TfKYHes+MDw7AUpNLQE0NgdcplfXS7Aa1slmdWyfNep6WjjPZXG5WBpPDZrK5LA6XxRTxeSxhdqrMkL3uFdDUC1kHQXMfaOpGqQ6i5G31c/tZho2ZCqNcqdSoFNIccSYtY17sQq/QyAeCokMDfaLCvOeFh4RHzA2fFx0eGRMYEurl7eMf4B+fsJDBpifTOZmqZcDGBtR8XmMe1Jj7xplDbbFrzH2AuR8y98FUD2JtQ22nEGsbQnUhVJcLEpC5BzL3gdveyFKqlqQmp6QkCUTZTKUh95mX0bIu1NqLWXsIqpO0dWipLp21x2AZMFD92rJWbXmrtvystvyMtvy0tuKktuIEWXZaX3FWX9aKUGfxPV0PVZ4mHtlUVFz0w4/f/PDjN9euf//j1e++/+GbH69+OzT8412OIS5fvjxjxgylUjnlmfr5558HBQW5HubJ9rseL1edKDc3N4FAMD4++OGHH2pqasaX/OTxeE1NTbfixO0T4rvvvmtpablV0PDEE0/Y7fYxH/nyyy9nz57tek9XV9eUf/AJdfr0aVdFk8jIyK9u2nOcsv6/E+I+Hu6ahp1Op/Pzzz5qtpZUFhib842vFRiO5OlumxCIWZpF8Fk0OpOewdCr5JU6sgXFq0n09glRS6INCNisVpblygpFIgGbl7gkcX58LF3MAWH1GlizBQI3ZEmWM9kGiRDQApI8mK+SZGSmL4iMCQsM8fML8PDzn+Hn5+HlFThjRkpA4GoGYy+KHoDhw6CmQS2vkWe9wKLpBaKsbDldIGLQGYz0dA6NJuLyeSI5U5mvemJPHtVWaO0qKDlLvNgiXV1MB1dmZgMilVoOqLkCUXJyyuzZsz1nzfLymBUePmfJkqQ0poAhAbgKgibD6TkwXZgTPX+Bp+eswED/mKi5yalLY+liRsE22Utva6hLIPXuTWAY0JgHNKbzGtOgxjwAWgYh8wBscaBUF2o9g5X/DrOdQ6kOlOpCqS7E0olYOhGqB935WzUB01hpTGaqRCblw3nqTS8TezqxsnbMdpawnSbLzmit53S2LgPVp6f6yLJTZNnpn+wUWXaSLDuhLTunL2vX286h1na0rKvQ9g62dpPZYhoZuT4yct3pvDHivD4ycn3Eed3pvHGXCfHhhx+6u7vn5ORMeaJ++eWXoaGhrud5av2ub1ZlZaXLFYfDuVV679WrV+vr69ls9pjVhMVi1dXV/fjjj2PefzuEuHjx4ubNm0frZ4zKFTQcOnToVgv0F198MXoPvLu7e8o/+IQ6ceKEy/Ov1ry6Tf3/JcQUNpfunz1MLFeDCKfzL5/+sapkm0VHtCzLP16gbzZqb5MQDSRKScUkl8mgsxg0ll4lq9STLThxWIvVk+h4m5AQdQTWgMFHINVBjeIxkUgmEiZnpMQnzJdlC9ZrCQonD6rhV2TKYrH4BZEgT8hWyngAJNWgSoksKz01dcHsyAj/OSEhc719An3cvQJnzQx78IHUkMB8PrMYAQ+gQBWs2iTiY0IhW5iVweayGHRWZjqHnsFjcVgccYYQytI+rXrclp23RQg9KgZWKEA9AAASAX3J/JAwfw9/30Bvn6CA0KiYhIx0jowpAWhCNStvm+L5RqL4LWBzjWzNzmx8RQYtY96cwNmzw+IXRKVlZqaqCkQb6mUldsh2CbYOQBY7ZOmDLH2QuR8yD0LmdyHzecjcD5n7YXM/anFg1g7cdpoo+x1hPUdQnQTViVs6cKoNs5zDqHay+HVymVEg5mSJmblqeRZRqN5YiVe0YRUnsfI3ifLfkhVvaMvf0pWfMtja9NYOvOzsz60VLzurLevWWXu01g6U6oatXUbzm9iaTVZb2Y0b127cuDYyMjQ0dP369atDQ9edzuG7TIhPPvnEy8tLKBROea7+/e9/Hy3G197ePmU/Lu3fv9/lisFg/PLe0bVr15qbm0c7gI6KTqdXV1ffzIlfIMS3337b0tKi0WjG9E91c3OLiYlZv379+KBhjD777DNXzdoHHnjgzi9AjNH/EiHuZy7dTY04nTecI07nX778qK7SVJqvbVhZ0FJoaDKQt08Im1RCcphMOotJZ2uV0r0GbYtWW6WdAA+3JASO1WFIE6qqU+VuFAg1EnEGj5GWkmjIzTEZjLWo9pgaOgoAjTBQC6jLBYItmbRHWLS8HD4G5SpBBT9LGL9o8ZyA2dHh0ZERkT6+Ph6es/z8PH08pqdHhOdnZGyWSR/PEUMyGVMszmAxOUwaT8DkCTkCvoAvyGbxpTwZwtcYshRobi6okuVKOIy0hJgFcwOi5/gsmBeStHBBaiozVQAuVa3JzNsl2dBIWDpUJgdQfhF9+QPI2o3sOIKv35WlUC5cGBUeMS8jOYHOYjL1T0p2nJBb3gV3d8GmNtgyerTQB5v7YdMgbOqHLb2IxYFYHKjFjls7CdtZ0vY2QZ0jqE7C2k5Y23GqFafO4NZWsvgYUWjkiVhZWRypUp6FL1M9V4mVt2Plp7Hy3/1EiDd05e8Yyk7rba1o2Vm0rBW1nUNtbaitA7V1otYubdmAzuogLd0o1QtaOsndr6Grn6uo2HPt2rXr16+7KjK5fn33+0N8/vnnPj4+bDZ7qlPVefNR7ZkzZ6bsx6XDhw+7XGVkZFy9evVX33/jxo1jx46JRCLXbsyo0tPTDxw4cOXKFedNXYluJsTFixdfeOGFhISEMQuTu7t7dnZ2VVXVbe7qfPrppy5CTJs27VdxMln9zxDiPh7uukaGRn4cGfrqh7+ffKux/PFVh1flNa3QN+VNIoYok0pIFoNJZ7OYHK1SWmnUteh1hyZFCMxFCEWTIudFLhfKyWJLRXxm5mpVbimGVmnAFhSuRRUHNeJmjexNQNWSK63g8zYxGau5XIMsB4EBFaQRcnlxCxaGzAkLipgTGD7b28/fy8N71nTPOV5+3JgY4ZJEkUjMlSm4fC6PkZrOTk/nMFhcbna2VCqVSmWSLDGfTktPiJs/JyQg0McjJDggcv7C2KX0BXRxkpCggU9krd2r2XkKKb8A7v293HbJUN6XZ+uBSjuA4nMG65nCnVVS/aq4VFp8UoqAlc4XCMSrtkmKO2SlfbqdpwjzKcTa+tMBQzdicSCWAYTqQ6wdCNWFUr24pZewdJHWNq3trJbq0FJdJNVOUudI6ixBnSasp4miZjkMp2SkMJnpgiyxAC5UPFOJl3diNgdm7SasbWRZq9Z2Rld2zmBr01u7UFs7amtHbV2otRu19qKUA6H6dLb3dNQgabZjVB9g6sJ2Hkce2lhZ+bOex7fJBpcmQYjvvvsuJibG29t7yvUtvv3226ioKNeDfSf9rl2qr693uVq6dOntrxFDQ0Ovv/66RCJxneuOKjU1taqqSiqVun67Y8eOK1euNDc3/0LQ4HA4JjXgP//5z4GBgW5ubtOnT7/zY5gxurn3xjfffHPnDg8ePOjm5ma1Wu/c1e3rs88+m9TmEoZh9/Hwqxq6MfzttR+uOH88f6HjlS1PvbzSWLPK2FCga8rTNedpmw1ks5FsMpCNBm2jQevCQ6MOb9ThTTq8SUc0k3iFTKpnMdh0FofFJVXSinx9o153SIs2aLHxNuFRRB2K1uFIA6pokku2s9loTpZAmS3istdolDYdUY3CtVrgFUK2RyM4KONXg9kNWtUxHKqTKYrpvLUpNCOXhytlGjBXosrO4NEjExYGz50bGhI+NyjC22/29JnevtNm+E2fGbUgbimXz+GwBBwaW8JnZvEYbJaAy+LSU1IToxdE+QUFeQQE+c6JmB0Tn7Aog58kJlOhJ7gP2VS7WxUlvdm77eKiPtluu7qkGzF3rbWcfMxyIt90Ei85raPOaHc1SFY8kypRcUUSRQ5fqpBjm/aqbL0qqm91eYfBdhq1nUZtZ1BrG0p1olQParGjVC9iO4tYO1CqC7d0k5ZurbVTa23TUh1aa7vW2kFQrQR1hqBO47ZTyPZariR7/qJFqalLWFweByjIfXY/Vt6FURcx83u4eZCgekmqR2vt1VN2HeVArV0o1YNa7ajVgVr7UesgQp3XWS/oLAOEuQ+znVeXdiLbj2Crn3/llf03z4eRkZHbh8QkCOF0Og8fPjxjxozY2FiKoqaQMHPlypXRkkpvvvnmZD8+Ri0tLS5XiYmJkz2iHBkZeeutt+RyuesOwahcpY1cwBjf3M11DHP7QcMYffzxxy5CzJgxY2BgYAoefkFvvvmma5ALFiz49ttv79yh60JiU1PTnbu6TU0BD/ePpm9Hw0PD31/98apz+OInv99R+tLqfN0Lq5aXr1h5ML+wNk/XYiSO5hFNedrDBv1hg6HZiNdpkcM4eBgFGzDkuFb3ps54QAUVcJlCFo3FZQOgYpdRW4vDDYaJCTGx4Wg1gdQTUAMC7MziE1lsvljAYnPz1MqXCfw4AjagwCEQqlGCNaCiHlG3oHATAjVAQI0qd78kay+XtY3FzBeJ0FypRpMrVuZk8DnzFy8OC4sIDg4LCgoODAoJCQ0LCAzy8vMLnBu+ICklLZObmpy2dGFMUtTshXOCwkMCZ8+JiFy0eH4aI4GnSQUeY6+wSp57Q7n7PEBdhKh2yNoKWVsh61mIOgtRrQB1Nr+876E97+ZTfVCpHSkb0FvfAR57TpgrypFwFKpsmY4kt1fo9p1C9rRrKzp0tjbSdu4nax0nr/DXAAAgAElEQVQ1nGobb3qqlTCfxW2dsLVbVdqO2Xohc3v2069yxdzYmCQ6jc4SMTjww+oXfpdtaleZO2BLN2zpQahel6FWO0rZkdI+2NSHWPpQqwMrs2MVdqzSoS0+je86qzb1Ya98qDF16HY0Ln92x/7DNVOePJMjhNPpTEtLcz2fcXFxFRUVk/oG98MPPyxatMj18ePHj0/2rx6j48ePu1wtWrRofE/T29HIyMg777yjUChct5F/QTExMU8++eQdbg19+OGHrmRfd3f3d999905cjdddJ0ROTs60adPu+jhvpcni4f7m0iQ04nQ6nUPO4a7+rrxCI5eVCefmbDYW2FY8dHDVqpZVK44vLzxiNNZjZB1OHF2ua1mmayzU1hcQdfl4nRGv1xOvaMBlXLaISWNzWBCgMBmNjThWb0CmQghYszOLT4jZvGwBi8PNUyv3kvhRBKxHgUMQVK0BaiBFDaysh4F6BGxAwTpYc1ijPKiUvpIjpYTSp7lCrZinhqQKQiORS+mpmXHzF4aFzwkKCY6InBcXHxcZE+3j7/fgzFkenn6zw+bGLViYlpJGYwszBcolfM0S2Wo6uTV33avk7jfyKjrQ8s6c4lPiXW8j1FnM2nqzodbWwvKOh/b0FFBdqKkbK+vPM78Nrt0oyMkSCThSWbYE02EvVuIVZ0FrF1HWSdg68YkMpSYwrfUcYW51EUJd0oFauyFTu/TpV7lZ3JjoJXQa7SdCvCU1dagtna6KGj8jhNVB2PpRay9k7gZNXaCpC6J6EFuv3uZALXaw7KKq7D2i3F5YfARa/sThusYpz53JEeJvf/vb6DaRS+np6fX19bfZj+LHH38c/WLe3Nw8pQH/S3dxX+X06dMAAIwvq+cKGg4fPvy3m6qaTFl//OMf7x0h3njjDdeYFy5cODVe3iyHw+Hp6ZmSknLt2rW7Mrxf1n083FONDA8PXb/uHBoa7OtbvfrhFFrGopQkAYtDSHPXY9huo7HSYKwidQ2E4YjW0GIkjuQRzQVEYwFRW4BVFSCH8pB9ELScx8tiMLhMFqJU2PIKWrRkgw6eAiEaf04Ig1qxh8CPoGA9BlahSC0I1aPqakRZDalrEaAegxpxuAGH6zGoGYVfh5CD2bKXWKyHaRlaLgfNlWI4JM4RJ6YkR0RHzouJik+IT0xcvCA2NjI8fN6c8Pnz4xJSmcl8NR1ek7Vql/jRMsWWd4DiPoTqw/c4tPvs5Cud2CtnsZfPaMvOaW2tY6yw/MzKirMF1Bm8tJ20OfJL34Ye2sgTitkspjBLzAf0wKZXIGu70tKDUl0Y1YtOZIjZPt5IqgMzt6PWHsjS6yIEUnpO9tQ+togTHZVIy8hkihgcZLVmy9tyS5f6pyJ9NxMCs9m1e+yYrRs0tWtK2oCSDsTSS1gHDJWXAEu/xnZBUdqDW87im15BVj7R2jn13PrJEeLy5cszZ84MCAhwFeAblUgkup0iSFevXh0toPQLjZpvUydPnnS5ioyM/Prrr+/Qm9PpbG1tHT2OnjNnzpNPPjnZk4Zf1uXLl11lmjw9PS9evHgXPTudztdee8018kWLFt3J3svAwMDTTz8dHh4+bdq0ffv2/foH7lhTwMP9zaVJaXhk6PqPPzqvD/3+wsXNm16QqpR0kSAmOTkmMSGTngHJsp8icEtBwYHCFXV5Bc06skVLNBNoM4k06pC6PKQ2H90Dw3l8npjF5GQyNdk5lDH/qM5Qr5v4pHpCa8DRGgJ1EWKXWEBKOPwcIZvD1atyKwisBQXrCKgKx+pgpIEAawhNNQpUo0ANCtbiUC0O1RNwNQEcwmT1gPRotrSGIy5lCh8R8BG5QKWS5sgldA49MXVJfGJcUtJiWloKj5bBoafTWFyOSi/If1607mXl9jdQqhuw2dVlvXCFHd9r17/cZdzbZtx7xlhxVl/eri/vGGN5ZScLy0/kWU5hpe06mz2/5G1o+UYOR0jLpHF4YqbCoHz2oMbULS+1w2bX0XTfeIPNExhG9SDmTsRqBy0OVXEHRnWjJa2yJyuZAlbUvAQXIbjoauDFd3Kt3ZpbEILc042VdcKWdsjUjpm7DWWDyyovaivOq4o7UVufcU+PoeS4fpNtd+Whz76a+hXayRHigw8+eOCBBzQaTW9vLwiCN2/iP/jggwiC/HIS5/Xr1zMyMlzvr6qqmvKgXWptbXVlJc2dO/eufMd3Op0YhrmG9/zzz98Vhzfr/fffd12v8/LyuvOyVGN0h4S4du3aG2+8AUHQKPvvVp+JX9b96OHea2T4xvDQ0LDT6bx88b1tmzcV6PBlOlypUWZw2ZGL48LnR6WmJZEK2QuF+XvWPty4fHlzfuERrf4YQR4l0BYt2qBHzRoNzueKuFxGOkPM4RXj+hZ9Xp0enxwhSLSBhJsQ4CZC8PQqRTmBtWBQnQ4+TBINGN6kQ+r0cK0WqSagKgw4hGoOoZoqFKgiNVU6RTUubYZyX4OgZggpk8s3sJhGsQhSyaVyMZPPTKYtTU1PZmamCZmZHEY6TSjJXbmJ3NUCl7ZCVju25z2ssg3d8w5a/g5GnSDNp/Tms0ZTW56lU1vWTY61HtJ6Wm87qaPOIKZOoqzfWPIOULiBweSlpafROSKa3Ch/ukpltstMDojqhs0OyNQ/3kCTY7whFjtk7oGoPo3ZoS7uxC1dWPFZ2fo9dC4jcu6izLQMpojBxdZCL51UlvUC1ASEQGx2xNaFWDtRaxdp7dGX9RZW9K+sPF9Y0WOkWvNM7xTuPpq3uWKT5ZX3Pvrkxm1U17iVJkeIjz76yMPDY7TKxVtvvSUQCG5+gD08PFatWnX58uUJP37jxo3RRMZXX311yoN2qaOjw5WPFBoaelduETudThRFXcO7k0ZJt9J7773nSovy8fG51T/RlDVlQnz11Vd79+5lMBhjkoDd3NzWrVt3dwc5Rvfx8O/QyMjw1eHrQyM3nCMffHSprHTrpmW6FzDwMYXCKM3J5nHjk5eExUbFJizgs2kGjXxrvsGUZzyQV9BkLDyqMzYTeDUKvSSXq/hsgVCYmpJJT03frEHqDMbqPPz2d5kaCaxWizVqkSYULJIItdlcgVTE4vK0KrmNRJtxsE4P1+jJRpJsMWKNBXhjPllnwA6T0CEcrCKgw1q4Voc06KAaA1hVCB9eSTQs1zYRcL1U+jhPoBEKZGIBS8DM4GWyhCxJtlAq4fN4TEa2UrOuJM92GrN2I+ZuzNRJlJ8hK07httOo5TRqakVL2/HSbtTUi1jt8DgDLecwqg2jOgGzAy17V1d8QlHwTAaDlZKeTOPwabn58mdq1FSf3NKHlHXBFjto6htnDtDcO95gqg8wOUBqQGPuUxd14OZOvOi0fF15JocWER6XnpbGFDH4+Fpk22l1hQOguicgBGUHzHbYaidsdr2tR0+1a01niOKTK0vfyH/psGb1diG2KhfPf3bzi3/6y5/+eWdySpocIT799FN/f38mkzn6yvXr12tqasYU3w4KCtqwYcMnn3wy5uNDQ0NcLtf1nsrKyikP2iW73e4KYgIDA+9KNVOn00kQhGt4zz777F1xeLMuXLjgKn7u6+t758XPx+jIkSOukS9evPh2boc4nc733nvv2WefHdMA3M3NLS4ubvPmzXFxcd7e3nedZKO6j4d/k0aczhvOa8POb5w3zv958NXyrRVrCw7pkL1SxU6JYm2OUpUty+Dy5i9Nmhczb/7CSJGYnaeWb9PrDi1b0VSwrJ4kXwWAZ8RZ2TyGIEeclJqZuDjxqVxVlV5/KP/WSCB/jgct1kRgdVqsSYs0o2CRREi6CMHhEUo5RaBNGFinh6v1ZKNWdySfaFmubV6mb8gnaw1YrR5ryCObC/XNKwy1y/TVhWTNMqJuOdGwHKvPh6p1yrUCLsLl47m5ueocgUKYpRLngnK5UsIWsJm5EPSstaCiVV/Rm2/rziv6HbzznGa3HSjtAy39gK1PVdanLHMoyuwqqm+85Zq7AaoXtPSpzOfh8otEyQlp4TOpDMbSjMRMLo+myMt9thqw9its/djeLojq1ph7x1mPxtw5zjogi0Nd6tBYBtUmh2pXB17agRedzn1iTyaHFhG+KD0tjSmiCYi16PYzmj0OwDoxITSl/Yj1PFE+qCuzY6Vn1dtel73QpFlbTMvWLaZlLVqSyuGwZFJBeXnx55//acrTZ3KE+PLLL8PCwlJSUsak03733XdWq3VMi82oqKiSkpJ//OMf/5qrIyNCodD1p2VlZVMetEsDAwOuHCR/f//PPvvsDr25dE8JMTg46OHh4RrwnTdQGqObc39/+Xh5aGjo1KlTWq12TO+KBx54gMPhHDhwwHXhrqSkxO2e3Ye4f+/h36CRkZHh4eGh4aGh4RvDzpFrzqE/fnr5wN6i8kcKm5cbWwp0VQbchEIbAE1+rlyWJUhnZcamLPKbP2fB4jiFSPwEYdy58qGdqwqfJoB8QJmTI6YxGJFRUVER4fki0f6CZS3LlzUTRANB1BF4HYHXkWS9lmzQEg1Gsj6PqDPitXqsRo9W65BqLVKtQ141Qofy4DoCLs2RLMsRinMEPBFfD+eWFeDN+Uh9AdKYRx43aJsKkNpCtK5QW1tAVOfjNfl4TT5RW0DWL9fVrTTULtfV5RENRrzeiNUZkZp8+DkBHxcJFMocqTiLJxKyRPysLJFEJGBxOTSlIXdDFWbtwWx9uNWBWrqAUoemdEBtGlCb+9WWPpW1X23rV9v6NdQEpjL3QFYHbO0HLOfh8gv47rck+seSMmnpmZlcNoelXpa1sUVl6QMsPbCtF7L0AhOauXu8oVYHWebQ7jkP2AYUlkG0YgDd9aZkxUspGSlhYXPoNBpXkkPXPKR54XV12buQuRezdONUD2Fz4GV9mK0fsTogalBV9gFE9ZElp/Rba9EndkmIFelZipiUzLDoBXPmRc2bOy9+wfz5sVG5qtxznVOvEzo5QnzzzTeRkZGLFi2aMHnpyy+/3LJly2hxutEFa//+/aPfaiUSiet1s9k85UG7dOHCBVf2ka+v79S6Xo/XPSXEwMCAixABAQEffvjh3XV+O4T4xz/+cejQIT6fP+YWiI+PD0EQJ06cuPm/9ejRo2735jzm66+/Hg0lb0f3o4epaZQQ10euOZ0jTufIZ3/9qGqf2by2sG6FsWW1sXm1sbaAfBlHtmvUjyhkmDxbLsuiCxixixZGRy9YEp8s4vBJGNATGhWg4PH5CYsSAoMDA/x9hEsXb0ex5mUrj+sMLTpdg1bboCMb9domvbbJqK0v0NYVkrUFZE0+Xm3EDhuxKgNanY/uWwYdWIHVG4kyRe6a3GyZXCySZuXhyoqVRMsKrGEZfCSf+K2RbMoHq/LB6nzcZYfzsMNGl6E1BrTWgNXo0VodUkcidQTcQMAvcXiomC+UCwQMNovBTWdxeExeFpfL5fEyVYXZzzZozA6NuU9tdqhsgxqqf4Iec5Y+kOofbxpzD2pzoLZ+gBpEys/jRW9mkauXpGdm0lgiFpOtWcHb9LrC3IeYukCLHbI4IIt9vE28y2Tq0Vq78yoH4PLzMupdqLwf2tacpV+/ODEhJDiAnpkpzNbQlCtVzzVA1gFsz3t4xXmEcmjM3YCpG7b0YmX92ooBvbUdeKFesnIbGyhI4Yhi4xcFhgX5hviEhAcFhwQEBwWEzw6bPz82V6XoHeyb8iyaHCF++OGHhQsXxsTE/MIT+4c//OGRRx4ZU/GUxWIdP358ZGREpVK5Xtm9e/eUB+3SpUuXZs2a5ebm5u3tfbcW3HtKCIfD4RpwUFDQxx9/fHedNzU1uUa+ZMmS8VWqPvzww61bt8bHx49ZfOfNm/fUU09N2Kvj1VdfdXNzKy8vv7vjdDqdzz333H08/Ns04hy5PnLN6Rx2Ooc/++Kjw69YrI8uq1+Zd2xl3msrC14vzDtqNB4mSRsCvQiq1qlleLZQxmXRMzKiYxeEzQmPjYldkhCfmJgQGxM7O2yOT0CAu49HbHjwcolw/7LCI3pds45s1OKNerw5jzy2XH9spbGxUFufRzTkkw0F2oZ8srFA21CgbVmuq15F1D6sbSnQV2o0j2nkSo1Mosg2YoqyZXjzMrS+AGkykK/ryMY8qMYI1hswl9XpUZfVaOHDGFiFaKpg9WFIXQ2pDoPKalC5mclGxXyRXChkchhMbjqbw2e5CMHNVBXkPFsPmB2AqxC3bWCyhECs9p8TYs2S9MxMGlPIZrI0y/mbXlOY+xBzF0Q5JkEIS6+iqAMo7iSsfZB1UFrSD5o6oU3VAmR1TGx0UFBAclISTyTlAss1T7+qpdpUtgu51gtq23nE1odZutHi0+iu38FbGmTaNfRsNHYJI2RurE/IHM+Q2TODwoPC/GOigmNjwuMXLUxNS+Xy2CsfLvzkrx9Nef5MjhA3btxISkoKDw//1ezSgYEBrVY7ekXZzc3tN7/5jVKpXLp0qeu3k23RM16///3vXV/J/x975x0W1Z32/UlROgxDr9KLIJ0Zpvdez8ycM42hi6ioSUyMNXaQDjOAvaDUoQnGmGaMSu/WXbPZN7vPbrLJPm42RRNpc94/TsLLAyZRIMk+1+v3+v7D5Mx9DsTr9zm/ct+3tbX1Ui3r/6qEGB4etrCwQKFQLi4uSzXpmdFMDZLo6OiZSrdms7mnpycrKwvJ5Z4tHA535MiRn0mMR0rn/hoHXuesRv6MnmVNL15m2DwJj5unp8zmyS/++V+NNVWHN+e0rM1oz07vyMl4Z+3qyznZ72Znns9MaUhVVamkr7KZ6wQ8JZcVj4338PfDuLo7ObpinDCuzhhXJ1e0i8sLaGt7tBUvKa5ArzmrBus0YIMWbNQqW1KhzjXaC+tTWrJ0TWma5gxda5a+PTv1/Jq0jpz0zjWpTeu0pvX6jkz9Sbn8FblQIhdyRLw0UFydoWnJgEzpyla95qJO15KiaNTL23SqtmRVqw5q1UEtWrBFC5rUygalrE4hrZNL6gFxvUTUIBY1iEX7cCQVi8oQ0Ol4EgFPTiCSqI8nxJCschSoHAOMo/Mtrxybb1nFAFQ5DFWOyg03wOpb6sJLTG1uZDwWm0Rgkohk+Rr67osSwxhUMfAzhJCXD863qHBIVNCnLBsEjWOy8lGw+JpiczWBp3Z1c3XGOAQH+uGIZJo0RZybr89vBsp6ZIbh5OrBdOP15Lx2yUsGsub1OG5KSEior4+3q6O9o81ytJ2Vk7Ozk7tXUIBnfGwInoin8wRCuQrQqLbs2PzVNws/lPjUOdWJiYnOzs5ffPHFk1x87dq1mb6ec7R4QvzlL39BNn6trKzu3r27yGiIkpOTkcfbunXrkgScrYGBAQSZ7u7un3766dIGn12lCobhBw8eNDc3c7ncOWmA1tbWAABcvHjxF3ezjxw5gkKhzpw58/OXLUDzMxN/Cg/PZg+Llxk2T8DjU5MTU1Pj/7z/t5b6o8e35rauz2pak9a0NuN8btbFjdlvb8h6a31aZ05yW7a+Nj09TyHJ5FLFbBKNRoyNSwgODPP19QkNDAgLDHXzWfEixn65zbKVwX7rRNzDadozGfr6jORGPdSYLG9OV7atVjena0ypmuY0bVumvj0r5fzq1I7stPNZyfVZqobVmrZkzTGJNFfEFUi4DD47RS6sSlO3pEGNKYoWneaCWmvSyRu0QJsGalWDrWqwRaVE3KxSNkHyJggwKQGTXGYCpE1SSbNUsj+JBP1IiCQ8OZ5IohAoTDJ5SQgBGoegylHAcAOsvvkjIRJxSUQWmUT6kRAqwwBYNao0jj4xIQZkxtviokFpUQ9kGFYZR7QFl8SZu6LiSQ4O9k6O9l5uzhGrVuGZAjq0Wpy7N6OoNbOoQ7PrhDB7N0GoD4ujePsGOzu7WWNc7dGOTmhbTyfbIC+n6BC/pOhIfFIimcUmCUCKfDVXl6vMyNlzcPfk5MLTxZ6aEBQKxd7e/slfgaenpzs7O+dvSwoEgkXu1v7tb39DeppaWlrevHlzMaFmlJqaijzea6+9tiQBZ6u/vx8hhIeHx5KnGswQIjg4uLi4eE7LbuSmGzduHB190hVJo9GIWoq0lfmac/LtsXq2uLR4Tf+gqQnz+MT4o4mJ7//5r0/bGk+c2r6pLTereX1m44bVpvUZLbmZrbkZ5zekn9+YcT43oyUzvW5NanV2cv4a3Sa9UsKkY2Niw1eGRkdFxkZG+/kH27q7WWPQft6eYjJ+/+qU6tzVdbnZptUpjclggxZoSkEWiDTNadrmNG1Luq4lXdeakdyaoqrTA7Up8iaVoorPz2bT2Hw6hU1Llgqq9OpmvbJBpzCpNZ2gtkkN1Ktl/w8MkKIZUiBFOExqZbNa2axStEDyZgXQIgda5MB+PBliUel8Oh1PxOPJ8QQihUB+HCGeepVJWj6gNA6BxhGgYkxZdVNV8BZTu37Vj4SgKHIYe96SGm+oDINg5U8S4nH7EIPKw/ckZcOykusaYx9U+qF820mqWBewwtfWxs7R3h7jYOPj4xEeFRVJIGP5UkHyei6Ug2NJgyPjPdy8XexsnS1fxFi/iEK7O3iuCAgJj4uNJRLwDDqLzxPQxTqG9mVWVh5v4xH5lqP6LQVFlVUw/ESHGx+rpyYEl8u1tLT885///FTf+v7770+dOjWn646Hh8f+/fsXfFD1008/RTrWLV++fKmKaf+qhOju7ka2iL28vJ5wEvbkmiHEfEVFRZWUlDztulZZWRkKhWpsbFza54Rh+PDhw8/w8BtoAtHkxKR54tGj7x6NP/znv/7e0XzqzM6X2zdkv7Nx7dub1ravz2rOyWjMSW/OXd3+0tq2TWsa1ujfeiXn4svZTRszitOhbDFTxCDGxkeGhASEBwT7rQhy9vBx9vDy8/SODw8FRIxXdMqKrPSzmekNKVpTCtSapmlN07akalpSNc0papNeZdKrmpKhZo2iLllWqwOalEA1j7+aRWXx6SQWVSvmVepUJh3YqJE3Q+oOpaYRktWppCaVAnETJG+C5I0g0AjJG9XKRo2yQSVvBIEmJdCokDUpZXvxJJBJofNptCQiLokURyCS8WQGmbSEhJBVjCmrbqgK3mJo1kfGJybhSWwKmfwjIdTGQah67GkIMSSpuiEq7wcN3bqq66I9zeSU7ZFxWE+H5XY29mg7OzurZY72Vm7uTu4+7ivCgnz8A909fF1cPZwxTm5Ozl5urgHeHsEBfqFxcfEkCpUnokvUFCAdr9yQpNnKWl0k29oI5n+oNtxIM/ZnFzSWHDsLw79VxhwMw3K5/Pnnn19Y0YivvvqKy+XOGQ6Cg4Orq6sXsNz8+eefIx3rli1btlRNPX9VQnR1dSEpft7e3kuVwAHD8KNHj958800ajTbnD7t8+XI+n9/a2rqwpfzi4mIUCtXSsvCaXz+lqampNWvW/BQeni0uLZUePfr+0aNHjx59Pwn/SIgvP+1sPn1m5yvtG7K7X9rQ+9LGd9fmtK3OaFqd0bwu5/xLm9pf3lC/LrVljf58JnQpN8W0MW2XSgSxknDE2OCwoCBvPz9PfycXTwzG1d0e4+rg4BPiw6MmbVEAVcn6Or2+PSP14uq0jozk1hRNc4q6KRlq0CrrNYp6tbxJJW9MVjQky1uU8iM8QTaLxhbQSSyqVsSr1KpNWmWDGjCB6k65pgkEalXSRpWiAZIjrgeBehCoh4A6tbxODdRCsjqlrB7ZkFBI9uCJvyIhDIPzCJGAx5NYFApZsZa555LUeFNlHFJVjyqNY0rD/N2IIUXF4CwPySuGFBVDvPIhQVmP7nBPsvEyfXNVGE/j6+/jbPmCva29g62t9fIXLJY/Z2Pzoq39cjTG2s7Oxs7a1t7W3tnZydvbNzAkPDImISGJyOLSOQIBU6aigGvI6fsYr54VHvpQXXBNXz6iqv5YefivUMWN5P3Nh6rOmX+znGoYhvV6PWoRXaZ/amiIi4traGh4wgqAiL744gsvLy8UCvXCCy90dS38wO9s/aqEuHr1KpK37OvruyRJ4F988UV1dfVMIZMZubi4ZGdn9/X1LSZ4fn4+CoXq6OhY/HPO1+Tk5OrVq5/h4VfV19/cH5948N33Xz+aePj9999OTT/67P5/dbSeOrojt2XT6s4NmZ0bMzs3ZnZsyEB8Pje9c0PmxY05HeuyWrPTzq/LupCbfU4H7qUS+Dicf1CIs4ubo6OTjZU12tbGzvJFB4y9lYerc6B/JBarEIu363TVyZo6leJNleqiWt2sAeu1ygYd2KyDzmuhZr3unEZ7HlS9qQbLhYxsJlHCYVBZLLVYaFCpmpXAOVBaC4EtINQEiusgcaNKMd8NyGQCBJqUgEkhM8llzQpgHx4PMsl0LoeGpyWR8LFULIFCoVMZFBqNqMgR7GwByoYUhjGw8obMOAY8jgRK4xg4z5BxTFg2JDWOKqtuyqvuqI7cURdcZKpyYmMiWSQckcIhKl9W5l+RGD6SGG6nVfZAxjsy4z2p4Q+yipuAYUReOaio6geretTll1XlV8CK60BFj7iiT1gxKDAMccvuABU39IVvgy/lEzgib38fG7SFpe0LaEsLWwtLW2t7ayu0jY0T2tHN3h7jggnzcQsP8vGNCnXDxfuRqQksgZQuSw8UrI/V7mO8dAbY/76qfBisHAEq++XlA1rDULKxP+3ISEp1X0ZhS03rRXh64cc9npoQOTk5KBRqwe/sa9euRcYCmUy2ceNG5DDSjOh0+rvvvvuEoe7fv4/kAz///PMffvjhwp5njn5VQnz44YdI8BUrViyykNTdu3e3bt06Px0ahUIFBQUtSToe0h/i4sWLiw/1WE1MTGzbtm2mDJSFhcWmTZvmdw5/pgXrq6//+7vvv37w8N+PJh4+evRwavrRP778+5sd547t2Ni8aXXnhqzOjas7NmQhPp+beT43s31dZtua9OasFFOmvjU7rXP96qZ0XYmQLcfFx64MDfL39/Xzt3ZwcHZ1WRkRFhcREekV4O3k4eziHr+eDtIAACAASURBVBAcwqCRsjTArjXJFVn6U2nJTfrkN5NTLiUnd+hUdRqgVis3qcGLSnm7XFLAIWcyCRIui8JkqiWiSq22XQ02qOW1KqgFVD0hIRoVsia5rFkB7H8cIahU+iIJARrHRGWDMsMoWHUTqLwNHb6tOvQmA8peFRVBSsISKByi8hXJvnd4xbf4pTd0xgGorF9eMqgsG1SWD0LGAVX1oPbIsPrIsKRyTFp9Azh8Ezh8S1Y5JjWOiCoG5WVd8oOdvPVFiVzINyjMAe1ga2+NdrJ3wmDsbe2srW2srW3Rjk4eHh5eXt4+K3xWRoQnEXE0Jp3EEpFEqQztdsGactHOs4p957XFV9Oqx1KP39Efu60+MqqsGEQIkXpkRF/Vm17QXNfxzm9KiM2bN6NQqGvXri3sfhs2bEBGhPXr18MwPDg4CILg7ASuF154QaFQDAwM/GKoL7/8MiAgAIVCPffcc++9997CnmeO0tLSkMd49dVXlyTgbM1uFDo71fzJNTU1dfnyZa1WOycdevny5TPtXZOSkpbkaXfv3o1aikZPP6979+7V1NScPn36N2tE8f+Pvv7mXw+/+/rBw6/GJ8cnJ8anzZP//Przt99qOr7rZdOm7DlsOJ+b2b4+ozUnrTFd15SR3JiuM2Xq29akt2SlnNYqcxlEbnR4bFhQaMRKRx/vkNgYgVQk5LCY8QmJq2J8/AKsME7WLi4BESsZXGaaTrkzLflIanqrLr0T0jVDinNaoF4n71TL34aAJqlgD5OYzqWKhHwii6mSiKp1yZ3JGlMyVKdRtYBQEySpV/1HEEJcPgRUDkNVYwrjLajqliqvk67MiIgIx+JwBBqfJN8k3N7OKxrhl99UVQ6DJdcUJdfB0m5leQ9Y3q80DCgqhmQVo9yqPwkPfwQc+QNYfROq6FMWXQby3lbuOCbI3hnHArwCwuxs7a0tLRzsHRwwThY2dtb29vZoOycnR1dXRy9Pl+DAFVFJoVhmIkUsoYM59OS9nPUngd1vaUt7VIYubeWArnpEf/iW7vBNTfWIqmpAWT6oNQzpKwf01cP6qp70Q80t73wITz9Y8L+ipybErl27UCjUO++8s7D7vfLKK8hAlpGRMfPh+++/z2KxZg95VlZWq1ev/vkCqF9//XVISAhy/aVLlxb2PHM0s/SxadOmJQk4W++//z4SPCAg4GkbWvz73/8+c+YMhUKZ0zzVwcEhOTm5q6sLSV9AoVBYLHZJnnbHjh0oFGqp0PtMv70ejT98NP5wfOLhxNTk9NT01PTkvx7cv/J+x4ldr5o2rD6/Pgtx+7pMxG1rM1rXpDVnpSBziMZ0HcIJU2ZKiUKoi4/EhweFRq70iYhgiIR6nU6jlEqFTJGQTaGQQsPCnJw97ezdnF19V0ZE8um0XKWiUK8/kqw7pYZqVcomjeJCsuKiFjwNiLZyaSkSjlAqwjMYCj63Squ9oNc161UNGnULBJlU0nqVZOkJUTWGnHadf6pVUfl4QkjLBxXGIVXVqMJ4A6wcg/a3UWQpK1eGYYkkElNAkq4RvHZWWjosrb4rrxqWlffJKvoBwxBgGJUZxkTlI/yiEX7xKFB5S2kYVpV2qQ6+qdh2SpJbxM/cSwM0cSSyT2AgGm1nb23hYGPjaIextXV60dbeytEBjbH38nT28Xb19/dKSIjBsmlYEUDWbOblHpPveU9dNqw5fhs6eVtqGAEMI/KKYUXFIGgYUlcOaquGwPJBnXFYXzmgNQ4kV3an5ZsuXhv4TecQhw4dQi2i/8/rr7+ODGR6vX7255OTkyaTaaaBHSInJ6etW7f+1CGcb7/9dqadQ2dn58KeZ45+VULMbnn05E1+/vSnP+3Zs2eme+uMAgICdu7cee/ePeSympqapSXEli1bUCjUBx98sCTRnum3F1J0w2yenpyehs3mqenprx9903397VN7tjRtyDm/LutHMGS2rc1oW5vRmpPempPRsS6rbU16a3aaKVNfn6qpT9U0Z+rPaOTrsLGs6FUhESuD42I0GvVGrWaHVrVTLntFLMjmsCA6jYJN8g+NsHfzcbR38Xb3jIpZJRSwNunB0rSUGm3KOa26Rg+d1WuKlbJcCR8CRCwRP45IFNIopUpFp07dnAzVq1UtENSikTWopf8hhFBWDqkrRxWGUcg4BO41kcXasPAQLJlMZfGpomThhgqorFt17C5QOSQwjAqNt6WH7yqO3FMe+SNQeUtcNgqU9mQUX0jd36DaUinO2M4Q67FEdnQM1j9whasb2tb6Ravlz9lbWWDs0WgbjI0NxtrZ3d7Jyd3NKTYylETAxidhKWx2gjiLqNsrerVBVzigP/JH9bE7sqP94iPdisN/kFfdkleOyA0DoGFAbRzSVo2AFUM643BK1aDG0K+r7E7Na/pg6NZvSohFHpOfqbig0Wjm/9cHDx4cPnw4ODh49lDo6+tbVFQ0P4v74cOHS9ixDtGvSojZjUIfPPiFeZ/ZbO7q6srIyMBgMHPYgMfjjx07NicdemYOMbvy7mKEzPaWaoPnmX4XIRU2p6Zh2AxPTcEPJr4b7LtSs297U25O+9rVbWuzELfmZLbmZLasyWhbm3khN7s1O601O61tTXpjuq42VdOUpj0LyV8l4qV4XGRMTCwWm6vV5GlVtSkpnSp9gxysFol3cdkpDCqdRopJwoYEhbu6eFg6oTF+HjhiQoZMulerz9Pp9uigvVrNKyCoV8j4EgGOQgqNjKAmxB0UClpVyiatslYFtoBQqxZo1Mj+E1aZgIoBqHJQUzmsNIxAhkHlnkaySB0UtCI6IZbFYnIEcn7aTvm+86BhQGbo41fcFBruAlW31VWj2ooeqOBd+f7z8u2noXXbJSm5dBEUh6cEB4d4uzm5OVg72FvZ2lhaWS+3tbNxdMQ4YVzt7TA21g7W9k4YDCbE30fEYag0GgpPliQA6dkGyc63tKX9uupbgGFEXNotNVxXVferq++oqsegqgHQ0KMo75aX9gIl/YqyQZ1xOLV6SF3RpzV26Q829t75GDb/hoQ4efIkCoU6evTowu63Z88eZCADQfCnrrl///6BAwc8PT1nD4srV648efLk7J3Mpe1Yh+hXJcTsFg4/c2Ln22+/NZlMHA5nds0SFAplbW2tUCguXbr02MJ8x44dQy4jkUhL8rQbN25EoVDXr19fkmjP9LtocnIShs3TPxDC/P30o9HB6zX7tjeuz2nLyW7NyWpdk9W6JqslO7MlO7M5O6N1TWZ7TkZTRnJLdmrn+tVta9IbM3SNadozctl2Kk2KJ8QlYBkU6hvJyTWpuoupyW/ptG+roQsgUCsRFvHYLzPoWhqdTmNEJiR6+Kyws3dAYzDBoaFkGlkhl2SqwUwQ0oNqmQoii3grY6N9fXxw4aG7WawmubReDZwFFS2g6nyywqQD/hMIoagY0FQNaSqHlBVDYPmAYncDSaT29/UMCg3gsagykZgDruO8fEJYcEVq6JNV3ALLb6nLBrUF70I7a8Tr89kpmyky/apEXHDkKs8Vfo4uzvYYOzTa1glj5+Dg4Ojs6uHrFxASHhi60tvHzwHtZGVla2ONdndyCfbxZBDwHJ4kgS6jQ+uVBy6oK/vVR/uVR/oAY6+8tF9Xeiu9/K62fFBn6NdV9Wiru9WVvcqKAaBkSFE2lFw5kn54BCrr1hq6kg80Dv3xv35TQjQ0NKBQqLKysoXd7+DBg8hAJpPJfv7KTz755OWXX0aypmeUlJR0/vz56elpGIYnJyeXsGMdol+VEJ2dnUjw8PDwxx7a+dvf/lZcXDwzMZqRl5fXyy+//PMnjJecEOvWrUOhUD09PUsS7Zl+F01PT5vN5qlJMzwNm83wI/PEzZt9NXm7zuVmt6/Nbs9Z3bYGcVZrdlZrdmZrdmbb6rTmjJS2rLSOnMz27IzWzNSWdH2DWnmIzZEn4fDYBCaTuj01uSU942Kavk2v7tRCb6nBSyqwXak4K5WW8ATZNLqMSmbgcWHhoY7ubjZOLi5eK8JWRpLxSRwqlcugJxGSAiNCnTzcbDAOgf7e66nkGqm4WQXUaxTnlEADqDSpwSaVYr4bIXnTD0ddkcIbsha5bB+eqGRRaDwmjUDGEYlxZAKJTKXTaGQ6g6jMFe5qB8pGlIabkPGG3DgqfwpC3FBU9EKVvaBxWFk+rC3tVm49nsgQu7pgPNxdE+NjWQwmgwcwwBxB9hvQq0WaXc3KLU2S9eXC9G0cdUYSjxMYtxKzwt3GCWPt6GBtb2ttu9zBfrmns22Ql6OrX6hvJD4Cz01kg3FsVSyJvTIsyMV+mQPa0c3JJcDbC5eYGEtix4jXSbc2aQx9qqoBqLofqu5XVQ+qK0d15bd0ZTe0hgGdYVBXOaCrHtRWD2kqR1TGUWXZqLZ6KPnIsMZwM6W0J3P/iT/97TN4+rfqIAT/WGX6wIEDC7tfYWEhMpCJRKInuf7WrVupqalIwbsZCQQC5DAViURCPlmq8kHZ2dlIwI0bNy5JwNlqa2tDgkdERMyZBwwODq5bt87V1XUOG+Li4gwGw5N0v0DKKKFQKDKZvCRPi/wpFplU8Uy/v8zw1MQ0PA2bYXgcnrxzd6imcPeZ9avb1q4+n5PVjnhNZtuazLY1ma3ZGe1Z6eez0tuz0tsy09oy09oy0toyUltSVBV8LkjEEnFxZDrh5VR1S2rmxbTUDr32gk77plb7pkZzQa3u1Kpa1NBhgWgnnZlCJbKIibEJMYFhYZ6efq4Ydzdn1xVeXv4+nu4uGDtb62VWliir5Q7OdrLEWCMgaVbJG1XSc5CsXqk2QaqZnOrZbppFiGa5rBmQtchle/EkJYtC49NoBCKOQI4jkSkkKpNGI9NYRHCT8I1OoGwUNN6EjKOKpyQEZBwAK4cUlTch46g6/11RzoHQOLyNrSXaAe3ruyIqOpZAojDZHKFYCkEqScpajjqDxBVExcX4+nk7ezg7uLs4uLnZoW2t7axt7e1d3T0CQ8Iio+KjoxNWCdJJ+u287P2CDRXMdWXsjO1MgSDYF4Nxc/Zwd18ZGkam0+N5cuLqQmXxiMp4Y6Z30I8eBCsH1cbh+VaUjmmODGuODCRX/im9sG/dgcrP738BTy/8n89TE+LSpUsoFGrbtm0Lu195eTkykHG53Cf/Vnd3t1gsnn2MZ/ny5TqdLjQ0FPlx8R3rEK1fvx4JuHbt2iUJOFszBbojIyORBeLvvvuuo6NDLBYjVcFnZGFhIRKJ2tvbnzx9rLKyEvkunU5fkqfNyMhAoVCDg4NLEu2ZfkeZp2BkDjEOT979w/DZoj1ncle3rc1qz8lqm8WG1uyM1tUZP4AhM60tM601I7UlPbUlPaVZr6oQcEEilpgYS6LhX9KrTCnpF1JSzus1HTrNBY36glp1XgW1qcFWjapDrTsnBQ9x+JsYTC2dyiQmRcdG+gYEop3dLGxsX7SwsLCytLWzsbW3tbCysrawxAYG7JQJz2mhJomwTQ60azTNaggpxzTHT0gIMonK+B+EGAGNN36GEArjmNIwOt+K6tvyqrtg5R11+aB8ZyNJuc4nJNjG+kV7e3s0Gu3m7h4UEhYdj43DEaIT8FHYqKBIX3dPtJOjpQvG3s3ZA4PxxaA9V7ih/Vf4+IdGrYhhBNGS49S7mBuO8ne1qg69nVz8vrq0S5p/WbSznp32Wlh0gpe3d1Cgf2JCHIXFxQMZwldPqipGIMMo0mNujlWGoflWlI6qDw+qj/TrjPfSCntzD1X/89/3f1NCXLlyZTGLMFVVVchAxmQy5zSq+3mZzeY333xzZtIwR/8rCDG7/Opnn31WVVU15+wWCoVycXHJyclZQELikhMCSZ4fGRlZkmjP9HvKDMNT8PQ0PAlP3fto9FzJvtO5Wa05s8CQndGyOh1xa2Zaa0Yq4pb0lOb0lOZ0fXOKukLIA4lYQmIsgZq0MRlsSE7tSE5uS1af16o71KpOFdQOgS1qsAlSmKTS8wplh0pXA4B7WewMEk5KiKfgEsJWrnL28LKwR1vYo+0wjmi0PdraGr3cztfFTUUnVupUbXKgQyxuUStMWuWiCUEl05iPIcRjzzI9nhAjQNVHMsM9qPyGpvCycEPpKprI1dsN7bDM3t7WwmL5covldmi0s7snxs3T0s7RwdoBY2WLXm7pYPECxna5m4udj69LcHggFk+LTmKvYmqxmt3MzfW8vGv8ohvCkiGVcUxtvKE6fE9W+Qeg6JrwJUMkSeS3wm9VZAiFRiByxVT1a+oDb6mNY8qKoScnhLJsVFXdrz7al2z8Q2pB98slx7/87qvflBC9vb0oFCorK2th9zt69CgykFEoFGQ74an06NGjs2fPzl+p1+l0n3/++cIeabZ+VUK0tLQgwe3t7X19fef8CuHh4fn5+QtuhbTkhNBoNKhFlFd5pv8gmWHzlHlqyjwJT3/0pxv1pQdOr89qXvM/wNCclYa4JSO1+QcwpJjS9KY0vSktuTlFbRDyQQIWnxCLp+DWaxS1muQ2jaYlWdWmVbWroXYV2AopTSplHQSclPPPKUSdkPIiqG4Sy40czhsUUiaJwMJiY1dGeq3wt3d1t3JAW1pZ2L243MkCjXHArAr1e1nAatJp3wRBk1ph0ihawbluARWmX4cQcuOoomJknofB6j+BxruaoqvQ9ho6lOu3MhaNsUfbW9jaWlpZLbe0srC1t3VwcnJwcbXBOHmgPTxt3Z2snZ3Qrp4+foERK8MToyLI1CjZq/SccsWeFnXRB/KiHlHxkLj8lqRsGKoYVpWPqKv/CB35k75qSLvrJI4N+vsGxsSEUTiEBK6UlpafXNKtqBgGyvuVFQPz/VhCgOWjYGWP+khPsvEPKQVXtxhOPZz+Dp56infxOXpqQoyOjiIj8sLud+rUKWQgIxAIM41unlbffPNNWVmZn5/f7BE2MDDQaDQ+eZ7BY/XrEWJiYmJml362XnzxRSaT2dDQ8M033ywm/szyHZvNXpIHViqVzz333K1bt5Yk2jP9njLD5knz5MTUFGz+8/+51Vhx8PT6TFP2/2CDKTMVcUt6Skt6SnOavjlNb0pNNqUmN6cmt/xAiMSk+BgcKXGtSlYDaZrVKpMOatZCrSqwDVK2QMpGlbxWIz+TApzRSBoVkk654m2l6k052CSWFjHp2fgEBS4hKTra1z/QwdnFzs7G1mK57XJrG1tbRwdralhAnkzSmJLcqIFMkKJNOdetSoUJkjdBv8Iqk+GxhBjRVY3py7rUb5zjp26OwlGdnNysLKxsLC1t7SzsHawd0HZ2jnZ2jg6Ors6uPj6OaCsPD8eQVTEr8dwQIhTBWkuE9vJzT7D3v8c+cFlc1KU9PJZ24o6ualSaf11e0q019KmKu9XGEVXV7VRjl3ZHFY4pDfQNiUsIJfKS4vggI/uwrnREahgAKvoeSwioYnC+wfIRsOq66khXcuWdlIKrO6rPTpgn4MmFTyKemhB//OMfX3jhBblcvrD7nTt3DhnIsFjsU9Xpm6/PPvtsftG66Ojo2tran2rU/Iv6NQhx//79EydOEAiEOd2hMRhMWlra9evXn2q17adUWlqKhH2qDZ6fkUwme+GFF5aqNdMz/Z4yw9OT0xMTU1Mw/H8+udNYkXdqXWbTj5OGGTw0ZaQ0ZfzAhhk8NKXoTKm6llSNUSSAiNikuGgsIWENKD0DqpsgsFEHmjRgs1rZolI2QYp6SF6nljfolSY92KxVtqgUrUr5eaXyolrTLBMYWfitDKKciI+JjPJeEeDu7uGMcbSxtba1s7K3WuaJtmZFh77OZx+VAibgP4AQhlFF3luK7aeEGVsSSAxPdzd7Cyub5Wg7a2dbeysHtDXa0dbO0dYOg3Z2d/Nc4RuFjY0kEQJJ/BDBOlymUbD9bXX+qLbktvzwmOLwmLxyRFzSJyrsBsr6dIfHwMpBqKJHVnRFUtIvNYxqKq7JXzfE0UThKyISksKJAly8RM/bZFKX3ZZWDcoNj59DPJ4QFaPKymuqI9eSK2/pD32w+1jdpPkRvIiR9qkJ8Ze//MXS0pLP5y/sfo2NjchAFhsbO7+d8tNKoVDMfytHoVBUKnVhdThyc3ORCDk5OYt8NhiGP/roo927d89vuung4PDGG2989NFHi7/FjJacEGKxeNmyZT9f+OSZ/nfoR0JMw/Ann9xtrMg7uTaj6XF4QAiBsAHBw08QQnJaqWqElA0IIVTKZkjRBCnqIaAeAtoVivOgskUDNurAWo2iVgXUKWUdcu4FCbWEQ04h4LBR0SsCgt09vNzcXR3c0Q52lq621vbWFmi7ZYwQvwNUVr1E/hsTQl4+/D9cNqSoGGG/dJSesgXLkfj5eTssfx69fLkb2s8VE2Bra2lnb4nG2Lp4OPsGrghdFRGdEJtIVzOgnbLNp8CDb4sLrwkKu8QVg4rDw0pDl6KiS27oVVYOKavGZJWjovIRceUwUDUoLOkWGUalR/+gPTYM7T2ZyIMiA6KTSBFEcRJWmSXZclFd9kf5kWGFsV9R/hj/FCEUxg+hw1cRQuw90TBpfgQvYqR9akJ8/vnntra2NBptYW++s8/zLPhNf0YQBCHRNBpNSkrK7BSz559/XiaT9fb2PlXAl156Cfn6gjdaYBg2m83Xr19PS0tzdHR8LMDwePyCg/+UkHYOKBSKx+MtSUCBQGBhYbFUDcCf6feSGTZPwo/M0+apCRiG4b///b9MR8qqclOb9Po2XZopM6spJ7smM+24Bjyn1TSn6Js06jk2aVQmpbRSyM0gJpFwcTG4VSkCphGUNwLSBqVsvusVUsTIj0iOWzsINIOyIzLRNixeHRUTFxfpszIgKCjA0QXzgq3NMjtHa0d3tLO7s4uzpztGGhu3jy2ulMiaQOBNCLgISjsU4jaFvBnUNik1TQqoDYQ6QbBDIW0V897AJWlpFCaXRiQRKUlkLJGMp1B5dAaZzMQCG4T7L4nKxxSVt9TVN6CKEaD4mqzwA3nJNbCsD6ocVVfdUlXdBiqGheVdUOVgWuVIesFl9etHRZkvM1QKrliQiEvw9Pawtbexsl5uY/G8o/VzTnaWFlYYV0d0bIhHfIT3qvgYf5I0XPk6f/+78rKB+T1HH9tBCKzuVpSPAoWjCmO/yNALlg4rt56KoFKDQ/yScPEEOhurWM/b2SIr7ZOXPn4CoawYAMsfY0Vpj7RsUFp5R1M5sPqQ6Vz75YmF94aA4QUQ4ssvv8RgMDgcbmFrRBcuXEAGsrCwsMWXetbpdEi0Xbt2wTD8wQcfcDic2WOxpaVlRkbGky+VLJIQX3/9dX19PZPJfPHFF2c/hq2tbXJycmZmJvLjUqUszBZSLwuFQonF4iUJyOVyrayslqSQ+DP9jjLD04/MD6cmJmAzPDFl/tunf287XV21KftcempLenpzelq9XteYpm9JT6nTqWtAeaMGnOMmtdKkFFcKOekEHBEbG4NdpRcwDEqgQSaZgcFs18klcyDRoJQ1SAQNMuE5NVTOFazFERhELJXH4HPZvl4e1jY2nt7+YStjg4IjPTy83D1c3Fwx4Su81SRcgVzcqFO9BUHvSeXvyJTnNboWrbYJVNRKJTVi/lkxp17K25WEn08IDplCTiISZNmy/Z2SsgFZ+ZCitE9W1COvugMe/7Pi6D155U1p6aC0pE9e1q8xDOtKeiW7Ghnr95JTs8hKkMST4MiC0Mhod28fWwzGwg5tZY+2sre3srOztLF3RLvjExK4dFxc3MqVeEo89IrgjSagtBsoG5jvx/WpHgSruxXlQwghhBU9ypIhxeunIqi04GC/JFzcj4RoRgjx2AmEorxfWfYYK0p6pGWD0qrbamN/Vn5DQ+eV35oQ33zzjaen56pVqx49WkjvUySdAoVCBQUFLb5XTHp6OhJt8+bNyCdTU1Otra1YLHb2AO3o6Pjaa6/99a9//cWACybEJ598kpeXFxYWNme64Ovru2XLFqS0NVKwBIVCUanUp/9df0FLTggWi2VjY/Mkf7Rn+s+WeWJ6fGL80fQU/OD7iX9++d/vd7YcWpdZrFWe0Ksb9cltGq0JkNcCkvpksCldUwcCc1wPyprkIiOfnY7HEhNiohMi9Dy6USGrl4rrAcl818n+3+cNciniRrGwQSw4LRFVs3mvYPG0uMjwqLBgfz9PZ6fQoEA6nSkQyCg0bnhUvJufv5WL2zIHB4yDLd7Pez05qUopa1CpTQplIyBpkIvr5aJ6pbgOlNSC0npIupNEnEOIJAqVT6PxmUyWeoNsXwe/sIdf2CsvH9QeuS0+/Amv8q/i6j8rDt9RVQ2pSt9X5LWLt50QZu7lJm+kyME4Oj40KtjP39vHy8PHx8vDw90B47jM0hplaf2ireOLaLflaPcA/2AOi0WikCKxJIpmk+SNBoVxQF4x9OSEUFZ1ycsGZQUjckOfoLxbUTwo33IygkpdPCGUJV2S0n6p8ZbG2Jt5sLbtne7J35gQDx8+9Pf3DwwMXNga0XvvvYcMZP7+/r9Yve4X9VMp0N99992xY8dm8ukQ+fj4HDp06Msvv/yZgAsgxMDAwNq1a+enQ8fHx1dWVs5Oh0aKHqJQKCaTuYBf9ue15ISg0Wh2dnZ///vflyTaM/1eMsPmCXgKNv+QVj1hnrozNlDw2kt701SG1fqTWnW9FGiWSNpARaNOcVotPQeI57gWEDVIeAYOMw2bQIiLjI4N17GpBpmkTiislYgeY+kPrpOK62TiepmkHpCYpOJGkeAUl32axd5PogBEbGxMxAovb39/XyqDLFcqRBIpVyJlAUACmxUSGefrHeTi6OpoZe3jYE0KWZHJo+RrpXWgtBkQNwHiZrm0VSlvg5TtKnAPiTx/DsEiU0gUOlHzijDvHUHlLYHhpsQwBlTdVhz+s7LyHlg2DBa8p9hdK9p4iKp/CS9RkBhxiUkx4WHRnu7BTg7OTo4W7h4oH0+HFV7uvu4uro529rbWtvZoa4wb2sUzIjyEQCKHxBJCaaBk20nQxhge5gAAIABJREFU0MMpGxOVDspK++f7cdgYlFdek5UOSPKHZOU9/LIuedEA8NrxcDI5KHgFDhuHp7ES5eu4O5qlJb1ASZ+87PFWlD7OJdclxX0Sw6iqoitj7+lLV4emp83wIo7CPDUhJicn8Xj8iy++2NrauoD7zfRZ8/X1fdoeCfM1c/TosRvLX375ZX5+vre39+yBOzQ09NixYz81fXlyQnz33Xft7e0ikWhORRBLS0uxWNzR0TF/Da2iogK5ZqkOpM7WgQMHkOAAACxJQDKZjEajn6TgxzP9J2sahr+fnoDNZnjKbIbhCRj+99dfXmw1bc7Wb9ND5frkw1LgBI9/ViKqUUpOygU1Et4cn5Pw6oXsCiY9NT4WHx2xKipUxyCXi4W1PH6tUDDfdSLEwjqRsF4sqheLGiSiJrG4QSRsEAtMfH4hkQji44gkXFx8fGxSPFvCBeRiPpcuFrDVahDSqnkiCZFMD4+Odfb2tXWwd3W0W+ntCkSvLGAza+SyJgg0KRRNInGrSPwWoNhPpMwnBJNCx9MFiZrX6HsuMstGuaUjotIBmWEEPPC2epcJ2nJSnL2XKktLpHISifiEhJUh/mhPV2uMg50jxs3V0899RZCrf4C7b8CKgKCIkODIYN9Ad0d3B2uMg52bq1N4qF9sEj6MIMJpd8oOXJSWjzBLb4lKhx5LiMd5ADBelRb3iQ4OSEq7uCXXZAV90s1Hw0ikoKAVOGzsj4QwSUt65SV98tJe4HGWlzzGiqKrsuIeacWIuuxq2u6TV/tum6em4N+yTzUMw++9956VlZWbm9sCUn+7u7uRgczLy+vnX+efRC+//PIvDuh//etfX3311TmbxlgstrW1dX5CxpMQ4rPPPjMYDHFxcXMmDe7u7uvXrx8aGvqpL5aUlCBXLtVm8mzt27cPCb7gg8hzhBDis88+W5Joz/R7aco8/c3Ed/C0GX40MWk2f2ueHIfh+//814lj1Tl6lZ5J28LjlsqkZTxuJZd1Uiw4JWTN8Rkhq47PrKBTU2JjklatjIwM1tKI5ULBOS73HJ8337V8fi2fXycU1AkF9SJhvUhYLxTWCQVnRfxGKf+8kFfFoOjI8Vh8XFRcPJFGlcvFqyFgg0K8UcRdx2VmMqgaIVcKiGh8ThSBGBAW6evqvcLCfqWFLd3TKyMx8YBIdFQJnZUBJrH4TQmwL4n0mDkEhUplcknaVwR7W1WVA5rya8p9rcKtZ6Rr9gnV68hcCEfmJiYRY6JWBft7emAcnR08XF093AM8PSODfXHkEHpqlGBHvGJLoiQbz4XwRHLICm8Hi+fR1haBvp5xsRExeGoUN03w6hmotE9muMUpGROVDDyWB9KSvnnul1ZcERf1Cg/0i0uuc4qvSg/1Sl45GkokBgb5YhNjk6jMBGAtQghZcS9Q0iN7nIHix1hZ+KG0qEtWPqwu/TB117H+sY/gqSnY/BuedkVkMBhQKJSNjc327duf6jWzv79/Zjyd0+FgAUK63KBQqJSUlJ+/8u7duxkZGXPKH3E4nCtXrjw2YGpq6vwgY2NjL730koeHxxw2rFq1qri4+Kc6Hc2oqKgIuV4gEDzd7/kEWnJCUCgUOzu7Tz/9dEmiPdPvpWnY/B08DU+b4YnJiemJr80TD2DzNAx/cf9+R+f5DaszlBRiLpteLJUcFYhOsDinuLSTXNpJHu0kj3aCRzvBo53i0Wq59HIaJTk6ChsZvioiSEsllPH5ZzmcGh53vn9AhYBfK/hhklEnFNSJRbUKab2E28KmH2FR01l4LDkhKj6RTeNkAspdKqgCVJwApEf5vBISaUsSPofB1AvFIrEMR+eGRCWu8Ap0dXSxsrN1c8EQQgPXUAhlUlEDCHQopHuTCDoqec4+BI9MFtAINKmGvf6QYsdp1WsV0vTX6LJ0Ip1LplCJRHJkZLS7u6etnYOjo5O7m5evX1DIKlw0HcAqNpCziliv1gt3vyss7mbt7uBuNPCSN0VjyWi0s4uTa0zUKgoVG0vlJMpfku1sA0sG5BU3RCWD4uL5JOiTlvRJinvnuU9SfllU2CPY3ycqvsYuuiLJ7xa/ciSEQAwM9MUmxuCpzAQgh7O9UVLcA5T0yop7pMXd8y0r6pIVdQPF3UBxt6wIcY+y4ANZ4VVp+SBUciVl++GR2x/DU5O/9RwChmGz2XzkyBGkdISfn9+RI0cePnyiEuTDw8PIQObq6vrFF18s7O4zQjplon6iH9F89fb2ymSy2RUAly1bplarZ6oPzbTAm42c8fHxS5cuKZVKGxub2WBYtmwZm81uamp6wnTo/Px85IsSiWQBv+zPa6bxhlKpXHy0Tz/91NnZeUnOmz3T764pGIbNMGw2T8PT47B5AoanYXgKNo9PT9++c6vk4AEdl5tKpu4QyoqkQBWXekLIPs6inWBQTrOoZzi002zaGSazjE5Pj4vBrgwLjwhREHBlHHYdi1nDnm1WDZt1lsM6x2Wf47LPcTl1PG4tj1vH59YLeA1iUa1cUiNm1zNpFWSCDh+bmBQbi8XJmJydMsVhmeyURNQEAJ2Aok0iOslhHaKQNxMIGRQGxBfxxNJ4DscvPsbRw8Pa3sHG1tbfw02YEP0Kn5kv4+cy6UoOm8GiE0lEEp6ExRPwZDKfSgKZBAaFlsCQJQlT6bIUGleKI5BXRYX7B3hhnNEOGIyrp693YKR3wCqvcHwwNzVOvYO54ZRy/wfJFWOayjGgvFdYeUdUOiTLe0e2q5GsesnHP9TLwysWi6fQiAkUFk6znb//PVFhn6ywR1IyJCkZkJT0SUr6xcV9sz0DBnFRz/9z6VVRQb8or19cfJVb1CU90MdZUxKQEBsQ5JuQEB1PYiSAm7i72kSF3bKibmlht6SwW1LYLS7sEhd2iQu6xAVdksJuZdmQpLBXkHdNmHdNXNAlKegW5V8TFw/wC/ulxT0pJe+kbav4wyefTU0+mppa+JmgBRIC0eeff75161Zk3MThcBcuXPjFr9y4cQNJLXZ2dl78++nevXuRYVGhUDz5ty5dukShUGaP9TY2NuvWrfvkk09mkJOeng7D8P37948fP47H4+dMGjAYTEZGRldX11MlhTx5b4wFaKZ5n1qtXmSo8fHx1NRUFAq1b9++JXm2Z/oP1PjU1HePvp+amvry/r/eauvMSckQ0NipXMEeDnU/jVBBpx4mk87SaXVs+ikK8TiZbqAx1ybEJq0MDV4ZJkhIKGbSG5nUGvqPZtDOMmhnmfRziFmMWhajjs2s47DquewGLruByznFZp7gMxr5nMN0emZSAiUpMYlAUPFY5TJJi0RYKxPWyIAGkaxJLqpX8mtEnKNcZiGV/hqZksZgAhKxQCYmkQhBAcFoBxcrS0cHO6cQP38WCSsS8AQiEY1Gp1AoVCqVRCIRiEQCDschkbhUBpPOpbKEOAozPHKVu4eLre0L9o7LnT3d3ANDPSNwQQQZTrKWmlVE3P42ff91YfEA0mtIUTEiKxkUld6EygbB0h5hUTdtXXlIaISnCzoyEU+iUBIJ5HjNdkZRP79kUHboA2HxiKhkSFTcLyzqFxb1CQp7Zywq7EYsLOhCLDh0XVDULcofkhYMiIuvCAr7pHsGydq9vquCAwN94uKiVuHpidqtvL1v8vOvSw5dFeVfE+Z3CfO7BHnXBHnX+Aev8g9eFeZdkxf0CA9e5ex5n7PnPcGBK5KCa7KS64yiG4LS24rCKyn76jfsNf7jq4ffTzyYmFh4RZ9FEQLR7du3Z/IS5HL58PDwz1x869YtJK/N0dFx8Scp8/LyFvZWPj4+XltbGx0dPXvc9/LymjmuyuPx9uzZExAQMIcNwcHBe/bsWVge2QzPluQ1f46WihB9fX1CoRCFQuHx+MVvFD3Tf6zGJye/e/RofGIcnjZPj0/eGhwt2ZenYnMlMStzmeRtVGIhjVJNIx8l4Y7i4k7jicfIlJfiosjhQaHhwby4uDw69SyNfJpGRVxDp52h084y6DUMeg2Dfo7JOMtknGMx69isOg6rjsOu53BOc1gn+YwGLquaSkvHxZNwCTg8HuIyS2Vik1h4TiaokckahdImmdAkE7ZJpZ0KsEmirGTytxEoOQSijkUTyLlMITsxPjHA3c/VysnNzsnHzT0sOBiHwzEYDB6Px2KxSCQShUIh05h4hghH4cTG40JCgr3dnVwdrV3Qy7y9XbwDA3wj4sJpCmLKG8KttfL894HiHknJgKxkQFY6KCsdlBT3Cwt6uAevCUvGlGWD8uJucWkf/9Wj0bFYbzen8NhEMpWSSCDHq7cxCnr4JQPSQ1eExSOi4iFRUZ+wqE9Y2Cso7OUX9AgKevgFPbPBICy4Liy4zs+/xiu8LsgbkBzqFxZe4R3qEe/pJ2n3+kQGBwX5xsdFr8IzEjSv83a/ycu7Ls77UJh3dQYM/INXeQc+5B34UHDgijLvMnDwfdnB96QH3pMcfF908F3+/ku8/C5R/jX1obfS957ZVnTsn99+PzU9YTYvPDd5CQiB6PLly1QqFYVCLV++fOPGjT81+t+9e9fKygqFQqHR6D//+c+LvOnMyv7CqoA8ePDAYDDMr4oxX88//zyFQqmpqfnqq68W/LS7d+9GokEQtOAgP6VFEmJqaur999+Xy+XPPfccCoUSiUS/uK3yTP+rNTk1icx/H37z7eSjcRiG73/6+cXWdr1excEnaJKwmynEfDqplIitwMacxmOPk5I2x4YzQv3DQoJYMTG7KcQTFPwpGmnGp+nk03TyGQYFcQ2TepZFO8uinWPTazmMOjb7FJt5kkdv5LCqKZT0xDgSNh6XlKRiM8okIpNIUCvh10ikjQKJSSpoVUjapbJ2kaRDDHRIlXVCiYFO24pLTCNgNVyGBBAQBOxwbKKnd4DTMkcnG7SHh0dAQEBUVBSBQCASiUk4XGRsvHd4nItvgLOTo4ujracbZoX/Cr+w8BACL06czco+KN9RBxZeVpSPSoz3JJV/UhpvKCpGEDyIi/okxf2y0gFZxU1l6YC0qEdmHAN2N+DIDF8Pl5BVsUQyOQH/AyF4xQPS/A8ERcOC4kFBUa+gqJdf2MMv7OEV9vAKunkF3YJDP5if38XPv87Pv87Lu845dJV3oE94sId/6H1OXpdwVy9BvdsrIig42C8+LmZVEiNetZXzxgXOwWvCA1d4+69w91/h7r/C2fcBYvbey+w97/PeuCQ99CFY0g0UXhUceI+3/x1h/mXpwbd4W2oYawrSt5a+23Pj4eTU+OSjqemF5K4hWjJCwDA8Pj5+5syZkJAQFArl7u5eUlIyfzy9d+8esiplb29/7969Rd5x5vwoi8VacJB//OMfu3fvdnd3fywbHBwcNBrN5cuXF1lnEH76XZOn0tatW5HgycnJT/XFb7/9tqGhgUajIV/H4XB1dXWLL5n1TP/5mpiYGB8fnxyfnJ6YhCenYBh+NDHZc/fOnrwDXBJegY1bR8TuIGFLGKRqMs5ASNwYG0YL9Q8LDWJFR+8gJR0hYY9T8cep+BNUwgkq4QSNcJJGPEknnqQTT9FJpxik00zyGSalhkWtYVNrWczTLMZJLq2BzawmkTISYkmJcTgcDmLSS0VCk5B/TsSrEUkaeOImMb8OENZKxU1ScZtM2gEA5wGZSSqq5XGNBMbLCTiIThCrRSwNkECjh4dEuzm7Ozg4ODs7u7u7e3l5eXt7e3l6unu4u7q5eHq4+Pp4BoSGhWJpqwQpsZot9NcbhAc/kBZ2ycsG5YYxSdkYv2hEUDQsLx+RlQ6Ki/pEhb3SkgFFxYjm8C2F8baipF9U0COpuqM42EFkCvy93UIio4hkUgKeFKfaihBCkv+BoGiYVzTAK+zhFfZwC7oRcw51cQ918fO7+fnd/Lwu3sHr3B/NzvuQs6+Hv7+Lc/Ad1oGrvB3dWHCnR3hAcJB/fHzcqiRmHPg6a2cnc++HvL0fsPe8z/rRzN3vMXe/x3jjXcbu95j7rtF2f0B54x3G7rc5+97m7rvI2vsm96UqWsq2lC0Fp1vf+fLhhBmGp6anvn248IrXS0kIRP/617/279+PnC6NiooymUyzD5V+/PHH9vb2KBTK1tZ28XVDDx8+jIxri89S/vjjj3Nzc+3s7GbY4Ovr+/rrr9+5c2eRkWe0bdu2hQ3iT6InP9Y1o7///e8lJSURERHIF3k8XkdHx+KLZT3T/wpNTExMTU2ZzWbztNk8bYbNZvP09PcTEw9h+POvvn7r0sUsLcSMCAVjI9aRcNtJ+B1EXGpcZFJYcGhYKDsm9g1y0lFi4nES4TiJcJxMOEEmniATT1CIJymkkxTSSSrpFJV8mkY5Q6eeYVBrGLRaBuM0g36STW1kMaqJxIy4GFJ8LC4RC9FppQKBic87J+DWCMSNHFGTkHdWLqgBJfUqWb1SUivh14l4zXJpBwS2yVU1QukBEnkdFpvKZSqUMryYH08mhISEuLi4ODk5+fv7R0ZGBgQE+Pl4xUUEJMRGxxJZceIsfOYh9q5WcXkvcPwv4mN/45T/kVk4zC3oFRX2AEVdYGmvsmJUXj6MEEJS3C8rHQSNo0D5GFDYwy/oFlT9QZZ3gcCS+Pt6hK2KJpCI8UmkONVW+qFublG/JO8yv3CIV9jPO9TNO9TNze9CzMm7zsm7zj3wgzn7r3H2X2Pvu8red5Wx/zJz93XOnqvMfZfoez9gb70WL9/mFuIfEhwUH5cYiWPHKrcytnXS3rjCfuN9xq536D+atvNt2s63qTsukbdfin/tLeKOt1lvvMXe2UrZdDxWf8BPsAncsOdU6zs3//y3L/7172nz9OTk+MPvv5t8+k48M1p6QiD6+OOPV69ejWxK8/n87u5u5PNPPvkEgYe1tfXNmzcXeZfjx48joxuRSFz0I8MwDG/evBkJSKfTF3/Uao5+/ijtUgV/EkIMDw9v2LDBxcUFQXVaWtrM/6Bn+v9EZrN5enJqcnLSbDZPTU09mhifnJ6amjRPjsNmGP5ucurm3VsH9u8WMii8pAQNiZBGJogTYqIiw4MiIjjxcXspSSdIiceIeMQ/oIL0IyrIxJOUHyCBcOIcnX6KRjvJpDQy6IcJpIy4GHJcLC4+EaJRS/l8E49bK+CeFYgbOSKTkNeoENaD4rOA4LREUCMR1kolDVJZo1zZAKlaAcUFobSeyd2DTdLiE8RSNlfES0pKiouLi4qKio+PJ5PJJBKJgMcnJeEJPIixOl+0/6Ky6iZ49CPAeFtQfpNfdkNQPiooGeQXdYuKrgNlPaBhQFExDJQNSYr7RYW9woIehBPi4kFpQRfnUA/b+Ef+vguJNFGAr0dkdCxCiNgfCSH+kRBz2MDJu845eJ2zvwsxe9919r7rrL3XWHuv0fZepu26ynrjCmPvReruy8wtH8ZKX3cJXhEaEpIQnxiJ48Qqt9G3dlB3fcDY8R5tx9uU7W8hJm+7+IO3vkl5tYm1tYmUUxEmXBfNTVn7el7bpauffPr59+OPYHgKhsfh6e/N5onJ6elHk79hB6GnUnd3N5fLRdbxs7OzP/nkk//+7/9GBiZLS8vFd7isqalBhkUsFrskDzyzVfBrvOa/+uqrSHDkoNTS6rXXXvtF/Dx48KCtrU0gECCbDb6+vrt27Vr8Wt8z/a+UGYbNMNLn0QzDU2bz+PTU+MQkPA7D0/A0DI/D8D++/ndjR6tSDTIIBDGVSsUmBEdFBkRG8hIS8qj406TEo4Sko4SkOZx4LCRmE6IaT0iPjSbFxuDiEyHqD4Q4x+fU8EWNbKFJwG0UsesErFoB55yIf04srpUA9WLFWaHsNF/YLJNdVCraJaLjbOZuEjEnPkFOo1Gp1CQ8Pj4+PjExkUgkYhMT4xOTEhhyWvo+wf53uBV/pJfe4xaMKgv7VcVXoeIPFCUfAiXXJeV9wopBbvkwp3RAWNgjKugRFfaKCnvFRX2IRQV9kvyr7Pxeevkf6DvbYkjcQF+P/9veecdHcd4Jfy93l0tycS7BNhgQTahre5netquLXgw2NsUUg6nq0qpLqNHVu2i2CTZNvQsBEsZgx87BG7/nGohtAjEIpG0z8/7xiEWR9fowEjbG8/08f6Bl97ejFcxXM7/ySJVqjCRUCK5YEHXfEDkXzFk9w/RgTO8ypnd9Ww+G5C46qYWO79AntGuTTlGWFl1Euzw88lnPad5e3moVIobNirkxTNQxKr5NG9tMx9a7xEBEnyKia4mYOmzbW+JFKZ5BG4kFmy25JZcuvt936yvWft1uu8lxd3nnbZ7t47l+1mm12h2jEMQjNgTP806n88033wT7hj777LObNm165plnRCLRv//7vz9ES/YwDh06BE6LKpXqIfY0/TYJCQmPLlUwJqPF/398d3v5p59+mp2d7bqhhGFYeXn53//+9zE/DIGfOhzHcRzHAjjO4XB8+bcvM9KzGL1BiUBihb/EY1qITLKR0Sag0C5IvI/SFOnxYh1ZRpE1OH0Q15aTRPE9VZSTeAWBV5JEFU6UUXiJDjtA4wUYulwlI5RSWKOZz1C5gcZDJm11oL4iIOCgMfD1INOBIOP+APOBwICDQYGHgoMOBQcdDgk+EBxUFRK0Pyz4UGjwodDgQ7NC988OycKg50lMZ9CTNIVgKITAKI6RNIWSKBr2QqClIXTnu7PzzoftuBSwuzcs93x47vmwvN7QvN6Q3MEVnNMTnNMz9M+uQlVDzruh2WfCtncYMy8EWGp9sfCpU6YqlXIMVUupIHRZZkBKuy7jHWNGjzG105TaNeLlwtA/6xI7tJZ2raWdjukmouuIxEPK2P1QYosuttHXtPrZKW7+3hNk/p4e/qgkLJqOqtNENqo3vymJOC2LuqCOPI1tPkm/tl+7eje0IFoRtGL5ipU1+w9+/terNrsD/Mh4jh00//01mplMPP8DGAJw69atnJycoePtxo0b99B7Mrs4cuQIiCaVSh96T9OhPFJDbNiwAQRfvXr1mAcf0RAsy545c2bVqlXgzt5//ud/Ll26tK2tbfRZd4EnFe4ewBEgV3H7dl9Vzf7A8FC5Wir380BnTlukUSebjcUkslMt26mW7UPV+1Bol0a5S6PMx+BiEishsFICA4aoIPBKHC+jsBIdVkNhBShyzxDqeTSZE2A4aGSqAnQVZvNBQ8DhQOP+e4ZwSQIYojokcH9Y8MF7hjgwJzSbgBZ/yxAUTWMUgoa/EGhpCt15cU5eb9iOSwF7esNyz4flvhOad36YHoYaYmgrgz7n3ZCs7vDMDmPmOwGWOl8sfIrbFIVSjiIqKRWMvrQdGEKf0WNMbQeGGHatMHS59KC1tOFR7WjUcUPGCW12G576Drmt1kv30gT36WKFr1ihcFcapPNT0IhTsq21cHQttPEo9toR7cYD6LIcX9NqJHhFRHp+0+mLN2/ccGUNOY5zOBw2m21MNqwcyg9kCMBnn32WkJAAtg6dMGHCsIkXD8GxY8fAadHf339MUqyP1BBr164FwdetWzfmwV23sIB+bty4UV1d7apQ8vT0TElJEbYDEvhf4YYADOF0Olkn53A4L37w/uboLRihQeT+JrV8qUqeIJfmoVghThRq1Hs0st2Ucp8BLaSxQgItIlAgiTICA4YoJbFiLbqfwvJR5GWlFFdIILVqLkVkm/UHDHSlWVtuMh3Qmw8FGGoCDTVmk+syAkjiQFBgdUjggbDgQyHBB4ODDoWFHJgTmkNAz5OYVq8bZgiURJCwpYGWptCdl+bk9YblXTLv6Q3NOR+W88639eBaQfdaGcDSZV8I3n46LKPdkHHenFDrg4a5TXaTK2QIrJSQQciyTHNymzb9vD69x5DSbkzpdLlBn9Q5bAE3MAltdHwrHddiTDsLRZ1EYk5BMR2qbb3ohuPehhefnTFlio+Pu1gxTWmUL0zUxddh0XWq1w4ZVmcxi7cqTEv1c1fsLKi6du1rnuN41gl+WKDiwPWzG/N/Dz+oIQADAwPgRPzLX/4yJiZmNBNeT506Bc6APj4+o99tgh8yu2L+/PmjjzaM1atXg+Dr168f28gffPBBeHg4CB4cHGyxWKZPnw6+NBqNhw8fHk0bh8DPkGFXEpyTczgcVqfj61t/b2pvionbNjvcPIvBXtHi0Xo6DUXzlMoiAirRQntI+V5CmU9ABThURMDFBFyCw6UEUo4hJQRaxCA1JLoPgV9SSDC5GFIp51B4lkm3X09VmJhSo7FGZzpo1lcH6KtNRpckgCf2BwZUBwUcCAkC950OhYUcmBWSjWkWE6hWryMoEkYRDQwhGErSFDBEgKUxZMe7s3N7wvIumnf3hOb0huacD87rDc7rDcrtASsw55xrgXJVV8WqNuud4O2nQzPa9Om9pvhT3kio22Q3uVyKwEoxEQi/mGFKamXSenVp5/TJbfqkNn1SO1i6xDZdYpvW0upaTEILk9BCxTWRsY1kTAOT2g5Hn9LGd+ss7xPRF6iNb7qTs3497rfTPL0kcpWvivQzvah6IV21LEu5yEKGLXnp1Q2vHzvRN2DleZ633eXu3uKcAzabDRQaPNJ/CT+CIQBHjhwBrWoKhaK5ufnhgjQ0NLh+R+7re/iaXxeu+Xffa4zHA7Jy5UoQfOPGjWMY9ty5c7/97W9F/8z48ePXr18/+kyPwM+Wf0pIsKzdbndwrIPnWJ7vG7hzrO748y8/jxCqEBxaQxCpFL2bIHfD6l1q2R5UuZfQ7MM1BThUiENFOFRMwGUoXIwjhTRcTSB7YWiZXIzJxRqlchaBZhqYGi1ZbqRLDIZqrfGASVdl1lUZDS5JAE/sDzDXBJoPBgcdDgo6FBR4ODT40KyQXEyzGEcZnfafDEFRKAkjYUsDEgYNEZp70bS7JyS7NyTnvEsP33bD0FYG0/ZuZvv5oMyukPRWYAgvOHTypMkymQSGFP54APRCujGxhU7t0aae1SW16hJbh1oBKIFJaKHjm+n4ZiquiYxtImIaiJgGIrpBHXlMtektQ0yXPrpHG9li2FAybJGIAAAeWklEQVTsRwU+5zbeZ+b0Gc89Pd3tOR85LNXNDV62JTG78Pz7H95l7WCUlsNptzttToeNdViHuoFl2Uekih/NEDzPX716ddWqVSKR6Be/+MXGjRsfYtSraz8id3f3Mfk1+ZEaYvny5SD4li1bxirmjRs3wIZ6K1asiImJiY6OjoqKKioqEmayCowe15WEk3VarVYny9pZtm9gwM5x/Q57e++ZDXERQaEBOki5CFVvQJF4BMshqN04uhuD9mDQPhzOx+BCHCnCkBIEKcLgAgquxOE9kOZFmT8q81crFOE4kqGnqxi8VE8W6XSVtL7GwFQamSqjYZgkasymmgDzwaDAw4GBhwMDXw8OPhQekotoFmPIUEPAKEJQJELAcOiSQUPknAvNfde061xIdk9I9vB0NLihNGIrA53ZG5jRGZLWqkvrMcad9IRCJk2cJJWKIY3cDzNrlqYZLM10yjkm5YwuqUVraWUS2sCi41tdi4prIWObiZhmPLoRi2pAIxvQyAYo6ji0+W1m4yl6/R+p9cWKeWsmeHg/8/vfTZ80CZd5m0nF0qWLSg8evvrV33me5TnWwfF3rXYnxw04nNdv3brVP+DkeafT+ejE4OLHNATg5MmTfn5+4E7R22+//b1e297eDgo3p02bduPGjdEfzCM1BBiHJxKJIiIixiTgpUuX9Hq9SCRavnz5mAQUEBgGMISDc9iddo7jWKez/26/1WpnOZ5j+a+uXT/8xz+uXL+GNpBaWLEQRV4jyGwc2Ytq9qCavahmHw7n43A+BhfBcBEK5VOaCgzao1G/KPNHZH4quTwMg9N1VCWNleiIQq22gtJV6+lKI1Np0A+VhGsBQ7wODBEWnAurF2EIo9PiJAEhsBrSwChCkCRCQHDoEnN8Y3DehVk550JyLhqHGGKYHoAhhrcyZJymM3sD0juCU1u0qecMsSc8NMETn5sokYo1apkfZtYsTTUkNFEp5+iUbm1iM5PQwgy1wr1FxDTh0Y14dCMW3YhG1iMRdUhEHRRxgthSa9h4DFu+13v2yqflcplauWbZysDgBVs2bGhtOGZ19HM8b7XbWFvfwO0+1u7kWY7nODvrYHnewbM27n7uwel0gmzEmNRzDuPHNwTP89evX9+yZcu//du/iUSil1566cEn+nV3d4OmPDc3tzFpcHukhli6dCkIHh0dPZo4Vqu1rq5uzpw5YAbiggULHnD8uIDA92XwIgLUTA6ponQ6ONbK8jbeyfF//uR/dpYVzH1+PokgwTC8gUYtNLydwvbQeD4G5yPqQlRdjMLFGFpEIeUEkgOrl4h9MH9flUIegsEpWrKSQku0WDHDVJLaah1dYaAr9dpKva7KoKs26GuMhhqjodqo3282HggwHTSbDgWYDwUFHAwJ3AGrn8cQmqExAtdAkEqt1kAQhmEwBiHBz5tiTwblvhueey4wp9ewszc4qyd4e09Qdk9g1rnArHMB28+CZc48Y8roBsuYfnpwpXVRGT3mtPaApEYm5awu+thMdZDbZDeJxF+lkvkgJtXzqbr4RirpDJ10WmdpwuKa0fgWPL6ZjG9i4ht1sfW66FN05Ek0ooGKayVjW5CIOjSyHotugiLq4dUF6AuZmlnR05DwX83wdBN7ZGWnDtzq+58vboBtpZ08bxssVnXwLMuzLO9keY7jeSfPOx2czcHdr2KyWq137961Wq1jUs85jMfCEICOjg5Q5uTm5lZeXv4g3+25c+eAVyZOnDgm+2U+UkMsWrQIBI+Li3u4CNevXy8qKgKfkkgk0mg0paWlQumqwI/CYA0+z/M8P9Df39PTk56eET47nGY0obRqJQlbSCwXg3eqZQWIvIREClC0CFbno5pURLnUz4v08pTLpWYcSWKoKhoupTWlFFmF05UMU6mjKxmqCgzt0NLVOqZax9TotQeN+v0GXY1Bt99sqAkw1gQa9yDqpRhMURSKoiqVSqFQKJVKCII0GjVqXqDf9kZA9nuhuT3G7E5t3jshWT1BmWfNmefMmedMGedMGWdNGWeN6WCdAcuQ1q1P7TakdRtST5PpPYaUFkN8HZXYTW394wyFaca06WKpWKaQeUBGxeIUJq6etHTRiZ2GhDo4rl4T34BaGomEBjqujok+yWx9i9h6DIpqgSIa4a2n8K1vk1vfVK8p91iUqzTN85JIxrtN8vD2DAsNysvO+D//fZHnH8f/yI+RIXiev337dmpqKsi7hoSEvPfee9/9/AsXLoBtosePH//Xv/519AfgGiceHh4++mjDWLBgAQhusVi+72svX74cGxs7ZcoUUAM2d+7c+vp6q/XhRzYKCIwSUAvL37shzvP8zZs36+tqI7auD9HjJoXf8xrZJlSdiMO5FL6bxvdhSCmkrkHhvSi8ys8b9ZjuK/YxolAyQ1XScAmtLqaISpyupKlKHTU4roOhq7R0tXbQEAeMejBXvMZoqDYbawKNu2HVEhQmSRIM3pDL5UqlUqPRaDRqxLxAv+3NgOz3QnN6jNldTF5vSFZPUMZZc8Y5M9BD+lkTcEPaPT2kdhvSuvUpp/Upp/XfNoTcNH3qVH+JWKqQzYSM8sUpTFw9bukiE9q1cbVk9Nt07AnG0kTEN0PRzYqINmV0pybuDBTbAkWcUK2tUCxJk4dt8KPmTZNQT0/1EGvQ5WtfLa2sev9P7w303+Z5djR7hT46Hi9DAC5evAhmdTz11FOpqanfcQvlvffeA7PEn3766U8//XT0b719+3ZwEn8U28DNnTsXBE9OTn7Al7As29HRsWTJErB/6vjx4zdv3vz++++P+bEJCDwEoMbJarXa7XZQecmy7KeffnL49f0vr1iixVXhuGa1loxi6CSa2kUTVSTxJkGUIMir/r6Er4eP3EePqRMpooKEikl1MUlUYFQFTZXryAqGqNCSFVqyUktW3hsnvt+grdbTVXq6xqirNuuqzLpdkOJ5RDPUEAqFAhgCNs/Xbn3dvP1iSO5Z/fYOJqc3KPNsQEa38d4ypJ8GS5/WpUsFq1Ob0qlN6dCmdDDJHVjqGV1Sky72FGk5TW45Mk1unDp1qr/YX6qQzoSM0oVJVEwtEteOxTSTUcfhLUeRrcfRyDo4okG5tUG6uUmytVW+uU62fLffwiTvoLVTlKanJ8/0nDktVI/FxMW/Xdd47eu/38sycxxnZ+2P436Oj6MheJ632+2lpaWTJ08WiURKpbK2tnbEp33wwQdglviY7DbBP2JDzJ49GwRPTU39X598+/btoUO5JRLJzp07hQolgccKlmVtNhuYFT9YEetw8Dx/12F/98qHucW75ywIN6OahTD8KkkkM9RODMtXqXeqNVsgTQCsEqslOlRlIfFyQlNEqIoIvBwlyymyXEuUM3g5g1doCbAqdWSVjqrR01U6slJHVhuYKhNTaWJ2amTAEDAMKxQKmUymUCjUarVarYJM85gth02Z7wZnn9FlttPZPYEZZ8zpXYaM0/r0Ln16ly6tEyxtageT0s6ktDMpbXRKG53cSie3UkmtSMppbWKjNuYkkdBFbH5zqswwxW2Kn9hXqpC4awySBYlE1EkougWObMC2HZVsqhNvblJHNlMxjbrI49SG/eqX9srmJkjpsMl+8B/cPDx8/efNn52/N/vCuabbt+83gXEsx3NOjrU77Y/jLYHH1BCATz/9dMWKFeAUuWzZsm+3BF++fBnM6/7d7373l7/8ZfTv+EgNERYWBoJnZGR8x9OuXr2al5cH6rtEIpHZbD569OgDbgMuIPADA64bbDYbyJSyLGt1cHccjj6Wvd5/p/tCT0ZacrhRb5JLl2gUW3A0kcAsFLGGxIywxk8h0UGqBAovw9WFuLIQx8oQoowkyhgwP5yoYMhKsLRUlZau0TNVWqpCS1XpmUqjtsKo3aGWL4Y1BEG4DCGXy4EhNMZ5zObDxsx3g7LOaDPaqKxzAendprTThvRufdppfdpp/eB1Q5c2pZNJ7mCSO+ikdiqxzbWQ5G7G0sBEn8DjO/FNb0yR6t0mufn6+0rlUneNQTzfgkUcV0c2qbfVQRvfkG5rUES04BG1ui0HDKvysPBX/eBgd0+Fl9t4TCnevP6Vk8eP/N9P/nJ74Da4bmCdrLV/gHU4wRbig+vx47E2BKChoQHkZseNG5eVlfWPf/zD9VcfffTRf/3Xf4lEot/85jeXL18e/Xs9UkOEhISA4FlZWSM+4f3339+0aROYffvUU0+9/PLLZ8+eHfPDEBAYK4AbHA4HyEmwLGt3OPptdqvTaXc67VabzWr98qu/Ha89vnb1ygAMnoWqF+GaJRQSDKkQuVIqVxlgTTyJleKqAlxRgKGlMF5K4GU0AfaZqKBJ13TYSoaq1jGVDFXBUJU6psKgrTBq81SyxZD624ZQKZVqw1x60yFDxoXAzG5tRhuZdTYgvduU2qVPPa1PPa1L6dKldGmTO7XJnUxSB53YTie2U5Y2MqHVteCkbiahno46jsV1YBtfd5PoJk+c7OPnM2iIeQnI1rcVW+sVm08q1x9G11fja4qhJWl+xhXTZDp3b5nEzy9QR+7OTD7T3nTj+t9AIprl+X6nw8mxHMuyTgfHcjzHO+0s62RHO2Pv0fATMATP83fu3MnNzQWnTrFYfPDgwYGBAZ7nr127Nm7cOJFI9B//8R8ffvjh6N/okRoiMDAQBM/NzR36uMPhaG5unj9/PqhedXNzi4+PF4ZyCzzmgDL8e0NgB09vLMc5OJbjeN7Bc1aWszpY1tHnsH70188Pvn5oyQvzMURCEwoCVkMKSK3CjAgShyNlmKoAG8EQlTRZOUQSVVq6gibLabJSx1QYmHID4zIEBEFyuVwqlcrlcpVKpVIp1Ya51KaDhvR3ArefZtJbye1nzWmnjSldw/QADEFZ2obqgYhvIeNboMTTTEI9c98QWmAIiVw6Q633n2eBtx2XbWuUb66Vb3xLMzdSZXrRGw4e7y5zc/eeNWd2dWXx/7ny4fVv7jh5DnwyrNPOcXaOs3JOB2uzOfv7OYeT53iO5Tgn/wiaGcaAn4YhAB9//PGaNWvAaVSpVGZnZx8+fPj3v/+9SCT61a9+NSbXEK6Nr4OCgkYfbRgg/S4SiXbu3Ake4Tju6NGjJEmCx1UqVVFR0UP0lgsI/Ch8V0Pvt+ZPW222y1cu5+bmmANMCIJgGK6SSAN9vCNh1U5Ss4uQ7qGU+QRSijFlhLaIIvJpYq+W3Ksli2iynKTKCbKMIspoooqhqhmqnCHL9XQerFwAqTEMgyDIVe2qVqmUSrlCG4ZvqNal9RrT2+n0VjTtjCGp25jUqU/qBGNWB/ufE1qJ+FY4ph2J68QtnURSB57UCic0qGNr0fha2ba3/TY3aGLPqta98axqzjMTJ4p9p/qLIU+5Vml8ybjMYnoxAQl8WawO8BUrprvPlMoUr67f0NDYeP369RFmiXL3PxR+sM/ksbxwGMJPyRCAd955Z/HixaDI1cW//uu/njp1avTBd+zYAQIGBASMPtowjEYjCJ6fn9/f33/ixAmTyQQeCQ4OPnHihFC9KvCkYrPZ7ty543A4+vv7u7u7N23aBMOITCoOIjUbGCwLVpVAiv00XKmni0i6ECOKCaKQIvbRRD5DFlFkKUGWEUQJhZdRRBU9aIgyHZUHKRZAahRFhxlCoZQrtKHYhkpt2jlDahuV2oKmduuTThsSO1xTuMF4DCquhUloNSS16xJb6fgmIraBiK3H4xrw+EZN7EnE0qSIaMQimhQv7nlGFuju56NWzJwx032ql/80GTZNqZ3sB031FPv5+8+ePWvHjh1//vOHd+/edTqd4Obbj/2pjwE/PUMArly5UlpaumbNmrCwMIZhfvGLX2i12tE3nT9SQ2i1WhBcqVT6+vq6EtGdnZ1j/l4CAo8bQ+eK37x58/ChQ6FzZ8tw1QIdmaM3VGF4mVJRAKn24mgxipejeAmOFxFEIUkUkkQxRZYQRAmJl1J4JU1W0WQZTZTpqFxIMV+jGmoIhUKhUqkUCrmcCUHXVzCpZ/UprWRKM5JyWpfYpb/nBpceyNhmOq7RGF9riKvVxdTSUXVEZC0WUYdta1BE1iIJTZrXXg+NfsPwYtIfpsmemTTRfeYEb8+JYpmPl0I60dvHQyZZtuKFNw6XfvbZ/4CarqHf76MYg/ED81M1xFDsdntQUJBIJKqoqBhlqEdniIqKClCYC5gwYcLSpUtbWloe9eAtAYHHAYfDAU6gruyFzWbrvXRxS7Jl8axZr1HaBI1mu0aVj2NFMFyihsoRrBTFSjC8iMALCbyIJApJrIhASkikgsIqKayUQku1eI5GOl+jQFFUo9G4+iFUSqVcLpNSQci6Mjr5rC65hUhugpI7tQkduoRWMG91cBB3bCMR00DE1JMxdXjUKWTbSWjLKXhzA7KlGd3a6vHKYTzqbf2GYmTWa35q/VR3r2me7h6+M+SSmV6eU2EM3hIV2drRevv2DZ67y/NOjuMGBgZsNhvI2/8Ao7l/AJ4EQ/A839XV9ctf/lIkEs2bN280218/CkN88cUXr776qkgk+sMf/lBRUdHV1dXb2/v111+PVXwBgcefoQPmhj5+9dpXxXvyl4WHLNZhaw14Mk2UQEQZhBYiaCGCFqNYEYYVYVghjucTaCEOlxBwOYlWkGgJiZQwWLZaMk8tRxDEZQjQVi2XSyVkILy2jEzqZhKb8aRGTVIHHd/OxDVTcU1AD0RMAx5dj0fXoTGNUFy7OrpFubVBubFWvbEW3lSLb27QR/0RXZkDhb8q1uh9ffynTp38hwnjPP18wgODCvcWfPLxFyChwDqcjn6rdWAA3FYCVnC1hvzUeUIMwfN8Y2MjSPn++te/3rx58xdffPEQQcbQEN98883Zs2djYmImTZokEolkMtmZM2dGGVNA4CeKa49MsF/mIHYHz/L2u9aWlsYV65aZDfArBioRJjLVUC6J7MKQfShaiKJFGFaAY/twtABDinGkjMDKCayYQItpPEslnatSIAiiVqtd1a5KpVImk4hxs2Z1CZHYRVsaUUu92tJOxbXRsc1kbPP9eatRDWhkvWZbvWRroyqqCY+ppyOOk+tr4GV7FAsyfLTLn/UmZ/ghvn5SDIZCQwJeWLaksqbmy6vXWTvHc7zTxlrvOpxWjnfe304DXEY8AVcPgCfHEDzP22y28vJyT09PkUg0ceLE3Nzc77uB3e7du4EhjEbjQx/GZ599lpKS4u7u7rqhlJiYePPmzYcOKCDwBMCyLOic4DjOZrPZbDaOZXmW41metTv++6PLGTszgs30QhyJ1lNpDJxDIbtxpABFC1E0H0P3YUg+ChdhSBmOlRNYEYEWUdh2pWSuSg7DsMsQoK1aKhX7YybVK8WYpZNKaEAS6pQJbWRsKxXTBPSARTUAPSARddC2OuWmE+oNb8KvlEBLUhXB68TEbG855eejmDnNw8vTZ9ac2cdPnbj3fYDtP1m7td9hvctzdp4fFIPdbrfb7f39/QMDA4IhHl+uX7+ekpLy9NNPg+aJAwcODMsgfQf79u0Dp3WdTvcQb/3hhx9u2rQJvPUzzzyzcOHCiooKYVSGgMDgEHGe53ketFCAh3neybMs7+Q5J/fFl1cPHjm47KXn51GadbQmlkYzCWwXihQgcDGGFBLIHkSzD4VKcbQcQ0sxpIzE8+SSeUqFK00N7jIpFHKxROyLmtFXChhLGx3XgMXVQfFtWFQrHtWIRdZjkfVoZD0aWYdG1iNR9VTECfNr5fDCJC/tsqkyw8QZ/pPdJrtPmYCIfeYGmpLj43p7e2xO1smxNruV4x1Ozsbxdp63ctwAz1s53s7em9U9NPfwZEjiCTQE4KOPPlq9ejXYPYJhmJaWlgd51UMboru7e+nSpSAXMm3atNTU1Aff5UJA4OcJy3IOhwM0Y9tsNtbJOhyO8+ffiUmICw0JmoNj6zEynaDyUGgvqiykNLswaJdGXQRD5TBSgSAVKJIvly1WKzUajSsDoVKp5DKZl5/UEw4mX8owRh+nIhqZyCZtbJt8c6NqSwMe1YhH1KKb3sI3v4FvOqhcVaxZlBhgDpX5i6dMmjzpuQnTp03Gcc3KVcuq91d//Mkn4FAddjvoXXgCypO+F0+sIQA9PT2zZs0CJ/2FCxf+r0ns72sIu91+6tSp4OBg8CqJRFJQUCC0vAkIPAgcx7kyumDwH3j8y799eeLo0W2rVi3CsFUIHMPgSQSUiWryMaQYQ4pReK9GtRtT7WQ0KYg4XCNTq9UuQyiVSplE6uMn8UFD4Jey8OgGZWSnOqKFjGkiohuUW06iUXXaqGPYmiLl/FixYdkUmWH8dNn06V5Tp7iL/aWzZ8/JyEjv6Gzru/MP10G6msZBvv3H+rh+FJ5wQ/A8z3HcqVOnMAwDwznWr1//HVNgH9wQfX19+/fvB2FFIhFN06+//np/f/9YH76AwJMMOP+6riQGt5rgeN7OfXTlSlH+7hfnhc6ClStJNF5L78LxfBTZC2lyldIdqHyXDrLA3mFqCTAEyEAoFAqpROLrJxHjIfjKHWhCpzimR7q1mYw6aY57G3utUrIs12d2lLdxmbuSmTRlxsRxT82Y+DSOEhvWbzx8+PCVK1fu9UIPL74azJ08EfeOHpwn3xCAgYGByspKb29vkUg0btw4i8Vy7dq1bz/tQQzx5Zdf7tq1C7S8/cu//Et4eHhTU9PP7TcLAYGxAuyj6RoowLIsZ+c4B+/g+W8cA10XziUlxc4PMC5BkUgMScXhXALbiUD7YFUBosqVeM6TiZVKpVQqlUgkg2lqidjXz98fNigWWiQbj0oiW4mYet2WauXSJGngyx5wwCQ/aJKH33OT3Tw9py6aa96Tl9Le1vbll4PbGIPWDY4b7Gm4v4/ewIDVahUM8SRz8+bNrKysiRMngmzBzp07v/nmm6FPKCgoAIZgGObbL//kk08sFoubm5tIJPrNb36zfPny3t7eH+rYBQSeWFxlToNnZJZnnZzVyQ7w/F2e++LraydPnoh5bcNiClmFw7FaKoPA8jGiHMHyps+Y7e2jUCgkEolYLJZKpTKZTCwWe3p6evhroFmvketL4HWlqudTfM0vj5Pp3NxnTn3u6amTnkUh1avr1xw4fOCDK3++1d83OECKGyxJco1ZBbW5P7fcw1B+XoYAXL16NSYmBoz88/HxKS4u7uvrA39VUlICDEGS5NCXXLp0ad26dWDS+IQJEyIjI4XZqwICowecgkGXNc/zoE3CyTo5nuU41maz2uw2nuftLPvp558d3l+xYv7sMJlkHYamGw3bKTxR7h8mk8rlcrFY7O/vDwzh7+/v7e3l6e3vpTL40Yv8yXkeUvy5Gd6/n+ru4TFjXkjArpzM053t1776m5PnWZ4f4Dib4y7HOThucE4tx/J2G+twOAe/5DjX9YRwDfFz4cqVK+vWrQObmEql0vLy8r6+vsrKSmAIiqLA065du7ZixQowUNbd3T0zM/PhevEEBASGAc68IP0AJDHYdMYN9Dv7nPYBbsDK9zt4O2ezc3dZ9vbAwIcfvFe8I+vlYONCRPaKEVmpU+ohOTCEWCyWSCRSqdTP39/Px8fHy2e6u6+Hl9Rv5kyPZ3+r8p+xfPXLB48e++AvH9/q7+d53sHzNqeD5VmWtztZK8/bweQMjuV5jmednCs77Wr0+xleTPx8DQH405/+tHz5clCl6uPjQxAEMIRKpWptbbVYLFOmTAEd0WVlZUM3LxIQEBg9Q7sH7jdM8CzLOTmO5TlusKWO5exOp93p5Hiur+92R1vLts0bTXrGbGC0DKXRaHx8fGbMmOHn56dUKv39/T08PGa6u0+aNHn6tGkBRkN2Rur5c2e+/vorB3v/CoAdfMdhS+Cf+LkbAvDee++98soroNNtGOPGjYuLixuWrhAQEPjhcRWeOln28y++KC0rCwgMhGBYpVL5+fmBG00zZsyYMWOGl5eXUqlcu3btW28d/fjjj/v7+zmOu3PnjsPxoM2zAgDBEPe5du3akSNHIiMjlyxZsmDBgrVr11ZUVHz++ec/9nEJCAgM3pICkgB3e27dutXT05OcnBwaGgok4eHh4eXlpdPpLBZLb28v2MbHbrfbbDbw2p9bFmH0CIYQEBD4KQEasEF9ObgyuHTpUklJydatW7ds2VJRUXH58mXXZCRXFgF05P0MEwmjRDCEgICAgMDICIYQEBAQEBgZwRACAgICAiMjGEJAQEBAYGQEQwgICAgIjIxgCAEBAQGBkREMISAgICAwMoIhBAQEBARGRjCEgICAgMDICIYQEBAQEBgZwRACAgICAiMjGEJAQEBAYGQEQwgICAgIjIxgCAEBAQGBkREMISAgICAwMoIhBAQEBARGRjCEgICAgMDICIYQEBAQEBgZwRACAgICAiMjGEJAQEBAYGT+H5SZ+H6GkDuVAAAAAElFTkSuQmCCAA==" /></a></div>
<br />
<br />
En Excel, en la mayoría de casos se trabaja con arrays de 1 o de 2 dimensiones, Por ejemplo:<br />
<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="about:invalid#zClosurez" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="" border="0" src="data:image/png;base64,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" /></a></div>
<br />
Los arrays se suelen utilizar para procesar grandes cantidades de datos de forma muy rápida. Están indicados en los casos en los que la información que hay en un conjunto de datos (normalmente un rango de Excel) debe ser procesada (reorganizada, calculada, modificada, etc.).<br />
<br />
La <b>filosofía de trabajo con un array</b> debe ser clara:<br />
<ol>
<li><b>Crear el array</b></li>
<li><b>Asignar valores (llenar el array) </b>con la información (normalmente se hace mediante bucles For...Next)</li>
<li><b>Volcar la información</b> en un rango de Excel o en un objeto</li>
</ol>
<span style="color: #b45f06;"><span style="font-size: large;"><b>1. Crear un array</b></span></span><br />
<br />
<div style="text-align: justify;">
<b>OPCIÓN A). Solo declarar el array (y después dimensionarlo)</b></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Por ejemplo:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: blue;"> Dim miArray() As TipoDato</span></div>
<div style="text-align: justify;">
<span style="color: blue;"> ReDim miArray(miVariable, 7)</span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
... o también...</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
<span style="color: blue;"> Dim miArray() As TipoDato</span></div>
<span style="color: blue;"> ReDim miArray(3, Range("A1"))</span><br />
<span style="color: blue;"> </span> <br />
<div style="text-align: justify;">
Esta opción se utiliza cuando el número de elementos de cada dimensión no es conocido en el momento de escribir la línea de la declaración. Un ejemplo de esto es cuando ese número de elementos deben ser variables, constantes o referencias a rangos de Excel. Hay que tener en cuenta que, <b><u>en principio</u>, solo es posible dimensionar un array con un par de números</b>. Es decir, <b>el código siguiente no sería admitido</b>:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: #cc0000;"> <b>Dim miArray(miVariable,4) As Integer</b></span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Así pues, esta Opción A (como hemos visto anteriormente) consistiría en declarar el array con la instrucción Dim y posteriormente, dimensionarla con ReDim... ¡¡Qué SÍ permite variables, constantes y referencias a celdas!!.</div>
<br />
<div style="text-align: justify;">
<span style="color: #b45f06;"><b> </b></span><b>OPCIÓN B). Declarar el array y dimensionarlo al mismo tiempo</b></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Por ejemplo:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: blue;"> Dim miArray(6,3) As Integer</span></div>
<br />
<span style="color: #b45f06;"><span style="font-size: large;"><b>2. Asignar valores al array (llenarlo)</b></span></span><br />
<br />
<div style="text-align: justify;">
<b>OPCIÓN A). Posición a posición con líneas de código<span style="color: #b45f06;"></span></b></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Por ejemplo:</div>
<br />
<span style="color: blue;">miArray(2,3) = Range("A1")</span><br />
<span style="color: blue;"> miArray(4,3) = 836</span><br />
<br />
<div style="text-align: justify;">
<b>OPCIÓN B). Posición a posición mediante un bucle<span style="color: #b45f06;"></span></b></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Por ejemplo:</div>
<br />
<span style="color: blue;"> Dim miArray(6) As String</span><br />
<br />
<span style="color: blue;"> For i = 1 To 6</span><br />
<span style="color: blue;"> miArray(i) = i</span><br />
<span style="color: blue;"> Next i</span><br />
<br />
En esta fase de llenado o asignación de valores al array es cuando se puede procesar la información al mismo tiempo que se produce el llenado. Por ejemplo:<br />
<br />
<span style="color: blue;"> Dim miArray(6) As String</span><br />
<br />
<span style="color: blue;"> For i = 1 To 6</span><br />
<span style="color: blue;"> miArray(i) =Left(Cells(i, 3)) & "-" & Right(Cells(i, 4))</span><br />
<span style="color: blue;"> Next i</span><br />
<br />
Con el código de arriba se llena la única columna de miArray* con los 3 caracteres de la izquierda de los datos que hay en las 6 primeras celdas de columna 3 de Excel, más un guion, más los 3 caracteres de la derecha que hay en las 6 primeras celdas de la columna 4 de Excel.<br />
<br />
<span style="font-size: x-small;"><i>*Trabajando con arrays de una sola dimensión (una sola columna o fila) no es necesario especificar un par (x, y) </i></span><br />
<br />
<span style="color: #b45f06;"><span style="font-size: large;"><b>3. Volcar la información</b></span></span><br />
<br />
Una vez que el array está lleno con la información procesada (si hubiera sido necesario), lo normal es volcar los datos en un Rango de Excel o en un objeto, como puede ser un combo - box o un cuadro de lista de un UserForm. Un ejemplo del primer caso sería:<br />
<br />
<span style="color: blue;">Range("A1:A6") = miArray</span><br />
<br />
<b>¡¡Atención!!, el rango destino debe tener el mismo tamaño (filas x columnas) que el array.</b><br />
Otra cuestión que podemos apreciar en la última línea de código de ejemplo es que, al hacer referencia al array de forma global (no por posiciones), no es necesario aludir al par (x, y).<br />
<br />
<br />
<br />
Los arrays tienen algunas ventajas frente a las variables - matriz:<br />
<ol>
<li><b>Los arrays pueden ser dimensionados para cualquier tipo de dato</b>, no solo el tipo variant.</li>
<li><b>Los arrays pueden ser llenados de valores uno a uno</b> (posición a posición) desde la primera vez que se les asignan valores. Recordemos que las variables-matriz deben ser llenadas en bloque desde un rango de celdas de Excel.</li>
<li><b>Los arrays pueden tener más de 2 dimensiones</b> y, además, estas pueden ser variables, referencias a rangos, constantes, etc.</li>
</ol>
<br />
José Manuel Pomares Medrano<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9KQqil0ZjeEhnSJppa1gv6cCqaS4_Jlfk1qvaG8K70bJy6ZqHG6XIWzi7sWyC4EGBHgfWkhpjCUlAWaFtYMddo5w-AjylCcn8AWIvacdSJbPx1u50Zlc7A0B7FUyiaYX6HrOZt3gJedN/s1600/Cabecera+t%25C3%25A9mporaExcel.PNG" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="96" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9KQqil0ZjeEhnSJppa1gv6cCqaS4_Jlfk1qvaG8K70bJy6ZqHG6XIWzi7sWyC4EGBHgfWkhpjCUlAWaFtYMddo5w-AjylCcn8AWIvacdSJbPx1u50Zlc7A0B7FUyiaYX6HrOZt3gJedN/s640/Cabecera+t%25C3%25A9mporaExcel.PNG" width="640" /></a><br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
Témpora Consultoreshttp://www.blogger.com/profile/09000632812723289961noreply@blogger.com10tag:blogger.com,1999:blog-8253525174733356300.post-48791030791126200132017-10-04T01:18:00.000+02:002017-11-21T03:02:47.281+01:00Variables-matriz: proceso de datos ultrarápido con VBA<div style="margin-left: 1em; margin-right: 1em;">
</div>
<br />
<div style="text-align: justify;">
Normalmente, se habla de variables de dos tipos: las variables de datos y las variables de objetos. Mientras que las variables de datos sirven para almacenar un solo valor (venga de donde venga y se obtenga como se obtenga), las varibles de objetos sirven para almacenar objetos.</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
En este artículo, vamos a hablar de las variables - matriz. Una variable matriz es un lugar de la memoria RAM de nuestro ordenador al que se le da una forma de cuadrícula de dos dimensiones (filas x columnas) para que pueda almacenar datos de cualquier tipo provinientes de celdas de Excel y ordenados de esa forma matricial.</div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_4DwloLcAQP-GNHurTrFevrzw9sM3kQlqFWzeRuPOeLf5u-aZZ13eKRrGEUSO-lpU8-zU3cTt1qh0WjUnlfNLVvUdkzqvLomiPUSsvZ7Oi2ZbiD81AaCHqD6Lq2YKFh2x_KDUHuRd3wjG/s1600/Variables-martiz.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="260" data-original-width="492" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_4DwloLcAQP-GNHurTrFevrzw9sM3kQlqFWzeRuPOeLf5u-aZZ13eKRrGEUSO-lpU8-zU3cTt1qh0WjUnlfNLVvUdkzqvLomiPUSsvZ7Oi2ZbiD81AaCHqD6Lq2YKFh2x_KDUHuRd3wjG/s1600/Variables-martiz.PNG" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div style="text-align: justify;">
Por lo tanto, una variable - matriz <b>SIEMPRE </b>se ha de dimensionar como una variable del tipo <b>Variant </b>a la que se asigna una serie de valores que se encuentran en un determinado rango de celdas.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: #b45f06;"><span style="font-size: large;"><b>1. Dimensionar (crear o dar forma) una variable - matriz</b></span></span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Una variable matriz se debe dimensionar mediante la instrucción Dim antes del nombre de la propia variable (que debe seguir las mismas normas que para las variables de datos y de objetos). Seguidamente, se puede explicitar (no es necesario) que la variable será del tipo variant:</div>
<br />
<div style="text-align: center;">
<span style="color: blue;"> Dim miVariable</span> .. o bien... <span style="color: blue;">Dim miVariable As Variant </span><span style="font-size: x-small;"><i>(recomendable)</i></span></div>
<br />
<span style="color: #b45f06;"><span style="font-size: large;"><b>2. Asignar valor a una</b></span></span><span style="color: #b45f06;"><span style="font-size: large;"><b> variable - matriz</b></span></span><br />
<br />
<span style="font-size: small;"><span style="color: #b45f06;"><b>a) La primera vez</b></span></span><br />
<br />
La primera vez que se asignan los valores a una variable - matriz se debe hacer de una sola vez, igualando el rango de Excel a la variable:<br />
<br />
<div style="text-align: center;">
<span style="color: blue;"><span style="color: blue;"> miVariable</span> <span style="color: blue;">= miRango</span></span></div>
<div style="text-align: center;">
<span style="color: blue;"><span style="color: blue;"> </span> </span></div>
<div style="text-align: center;">
Por ejemplo... <span style="color: blue;"></span></div>
<div style="text-align: center;">
<span style="color: blue;"><br /></span></div>
<div style="text-align: center;">
<span style="color: blue;">miVariable</span> <span style="color: blue;">= Range ("A1:C10")</span></div>
<br />
Con el código anterior conseguimos una variable - matriz de 10 filas por 3 columnas<br />
<br />
<span style="font-size: small;"><span style="color: #b45f06;"><b>b) Cuando la variable ya contiene valores</b></span></span><br />
<br />
<div style="text-align: justify;">
Si la variable ya tiene valores almacenados podemos:</div>
<ul style="text-align: justify;">
<li>Volver a asignar valores de la misma forma que la primera vez (ver punto anterior)</li>
<li>Asignar valores posición a posición dentro de la matriz de datos. Puesto que la variable - matriz ya tiene una determinada estructura, ya podemos hacer referencia a ella con un par de índices (x, y)* separados por una coma y encerrados entre paréntesis, que corresponden al número de filas y número de columnas que tiene:</li>
</ul>
<div style="text-align: center;">
<span style="color: blue;">miVariable(10,3)</span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-size: x-small;"><i>* Siempre se debe explicitar un par de parámetros, aunque el rango sea una sola columna o una sola fila. El parámetro x = nº fila y el parámetro y = nº columna</i></span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Por lo tanto, ya podemos asignar valores a cada una de las posiciones de la variable - matriz. Por ejemplo de este modo:</div>
<br />
<div style="text-align: center;">
<span style="color: blue;">miVariable(1, 1) = miValor</span></div>
<br />
<div style="text-align: justify;">
De la forma anterior, asignamos un valor a la posición (1, 1) de la variable - matriz (que corresponde a la celda de su primera fila y primera columna).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Si queremos asignar valores de forma mucho más rápida a todas las posiciones de una variable - matriz lo podemos hacer mediante un bucle For...Next, por ejemplo. Un código completo de ejemplo podría ser así:</div>
<br />
<span style="color: blue;">Sub llenadoDeVariable ()</span><br />
<span style="color: blue;"> <span style="color: #38761d;"> </span></span><br />
<span style="color: blue;"><span style="color: #38761d;">'Dimensionado de variable - matriz</span></span><br />
<br />
<span style="color: blue;"> Dim miVariable As Variant</span><br />
<span style="color: blue;"> miVariable = Hoja1.Range("A1:C10")</span><br />
<span style="color: blue;"><br /></span>
<span style="color: blue;"><span style="color: #38761d;">'Dimensionado de variables para contadores del bucle For...Next</span></span><br />
<span style="color: blue;"><span style="color: #38761d;"> </span></span><span style="color: blue;"> Dim miFila As Integer</span><br />
<span style="color: blue;"> Dim miColumna As Integer</span><br />
<br />
<span style="color: blue;"><span style="color: #38761d;">'Bucle de asignación de valores posición a posición</span></span><br />
<span style="color: blue;"><span style="color: #38761d;"></span></span><br />
<span style="color: blue;"> For miFila = 1 to 10</span><br />
<span style="color: blue;"> For miColumna = 1 to 3</span><br />
<span style="color: blue;"> mivariable(miFila, miColumna) = miVariable(miFila, miColumna)*4562</span><br />
<span style="color: blue;"> Next miColumna</span><br />
<span style="color: blue;"> Next miFila</span><br />
<br />
<span style="color: blue;">End Sub </span><br />
<br />
<div style="text-align: justify;">
Lo que hace el anterior código es re-asignar los valores a todas las posiciones de la variable - matriz. Después del código, la variable - matriz tiene todos sus valores multiplicados por 4562. Es un ejemplo de código donde se leen, uno a uno, los datos de una variable - matriz y donde se reescriben también, uno a uno, los datos de esa cariable - matriz.</div>
<div style="text-align: justify;">
(debemos recordar que con este código aún no hemos volcado los nuevos datos de la variable - matriz en ningún rango, sino que permanecen en dicha variable)</div>
<br />
<span style="color: #b45f06;"><span style="font-size: large;"><b>3. Volcar los datos de la matriz en un rango de Excel</b></span></span><br />
<br />
<div style="text-align: justify;">
Para volcar los datos de una matriz (ya estén procesados como en el ejemplo de código anterior, o no) se nos pueden presentar dos casos:</div>
<ul style="text-align: justify;">
<li>Los datos deben ser volcados en un rango de Excel <b>con la misma forma matricial que la propia variable - matriz (¡¡Importante!!)</b>. En este caso, tan solo tenemos que hacer el proceso inverso a la primera asignación de datos en bloque. Es decir:</li>
</ul>
<div style="text-align: justify;">
</div>
<div style="text-align: center;">
<span style="color: blue;"><span style="color: blue;"> miRango = miVariable</span></span></div>
<div style="text-align: justify;">
<span style="color: blue;"><span style="color: blue;"> </span> </span></div>
<div style="text-align: justify;">
Por ejemplo... <span style="color: blue;"></span></div>
<div style="text-align: justify;">
<span style="color: blue;"><br /></span></div>
<div style="text-align: justify;">
<span style="color: blue;">Range ("A1:C10") = </span><span style="color: blue;"><span style="color: blue;">miVariable</span><span style="color: blue;"></span></span></div>
<div style="text-align: justify;">
</div>
<ul style="text-align: justify;">
<li> Los datos deben ser volcados en algún objeto como un combo - box o un cuadro de lista de un UserForm. En este caso debemos utilizar un bucle para hacerlo.</li>
</ul>
<div style="text-align: justify;">
Por lo tanto, nuestro código de ejemplo del punto anterior podría quedar completado con esta última línea (volcado de datos desde la variable - matriz hasta el rango de celdas de Excel):</div>
<br />
<br />
<span style="color: blue;">Sub llenadoDeVariable ()</span><br />
<span style="color: blue;"> <span style="color: #38761d;"> </span></span><br />
<span style="color: blue;"><span style="color: #38761d;">'Dimensionado de variable - matriz</span></span><br />
<br />
<span style="color: blue;"> Dim miVariable As Variant</span><br />
<span style="color: blue;"> miVariable = Hoja1.Range("A1:C10")</span><br />
<span style="color: blue;"><br /></span>
<span style="color: blue;"><span style="color: #38761d;">'Dimensionado de variables para contadores del bucle For...Next</span></span><br />
<span style="color: blue;"><span style="color: #38761d;"> </span></span><span style="color: blue;"> Dim miFila As Integer</span><br />
<span style="color: blue;"> Dim miColumna As Integer</span><br />
<br />
<span style="color: blue;"><span style="color: #38761d;">'Bucle de asignación de valores posición a posición</span></span><br />
<span style="color: blue;"><span style="color: #38761d;"></span></span><br />
<span style="color: blue;"> For miFila = 1 to 10</span><br />
<span style="color: blue;"> For miColumna = 1 to 3</span><br />
<span style="color: blue;"> mivariable(miFila, miColumna) = miVariable(miFila, miColumna)*4562</span><br />
<span style="color: blue;"> Next miColumna</span><br />
<span style="color: blue;"> Next miFila</span><br />
<br />
<span style="color: #38761d;">'Volcado de datos desde la variable - matriz hasta el rango de Excel</span><br />
<br />
<span style="color: blue;"> </span><span style="color: blue;"> Range ("A1:C10") = </span><span style="color: blue;"><span style="color: blue;">miVariable</span></span><br />
<br />
<span style="color: blue;">End Sub</span><span style="color: blue;"></span><br />
<br />
<span style="color: #b45f06;"><span style="font-size: large;"><b>Resumen de características de las variables - matriz</b></span></span><br />
<br />
<div style="text-align: justify;">
Las variables - matriz son una forma rápida de "subir" a la memoria RAM de nuestro equipo una serie de datos para, posteriormente, manejarlos (trasladarlos a otra ubicación en Excel, modificarlos, realizar operaciones matemáticas, etc.) de forma muy rápida. Son, por tanto, una alternativa a las matrices o arrays, aunque con algunas ventajas y desventajas: </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: #b45f06;"><b>Ventajas:</b></span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<ul style="text-align: justify;">
<li>Código más simplificado que en el caso de los arrays. Se dimensiona como una variable cualquiera (más rápidamente que un array, al no tener que explicitar ni las dimensiones ni los elementos por dimensión).</li>
<li>Se pueden asignar valores en bloque, lo cual resulta más rápido (respecto de los arrays, en los que se debe asignar valores posición a posición) cuando es posible hacerlo.</li>
</ul>
<div style="text-align: justify;">
<span style="color: #b45f06;"><b>Desventajas:</b></span></div>
<ul style="text-align: justify;">
<li> Debe estar, obligatoriamente, dimensionada como variable del tipo "variant" (el tipo de datos más "pesado").</li>
<li> La primera asignación de datos debe ser, obligatoriamente, desde un rango de celdas de Excel, pues esto es lo que genera la estructura de una variable - matriz con (x, y) elementos en filas y columnas, respectivamente. De esto se deduce que siempre serán matrices de dos dimensiones.</li>
</ul>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Allá donde podamos "subir" en bloque (no uno a uno o por separado) los datos de un rango-origen a una variable, hay muchas probabilidades de que la mejor opción sea utilizar una variable - matriz para procesar esos datos y volcarlos posteriormente en un rango-destino de Excel o de cualquier otro tipo (por ejemplo y como ya se comentó anteriormente, para llenar un combo - box o un cuadro de lista en un UserForm de VBA).</div>
<br />
<br />
<br />
<br />
José Manuel Pomares Medrano<br />
<br />
<br />
<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9KQqil0ZjeEhnSJppa1gv6cCqaS4_Jlfk1qvaG8K70bJy6ZqHG6XIWzi7sWyC4EGBHgfWkhpjCUlAWaFtYMddo5w-AjylCcn8AWIvacdSJbPx1u50Zlc7A0B7FUyiaYX6HrOZt3gJedN/s1600/Cabecera+t%25C3%25A9mporaExcel.PNG" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="96" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9KQqil0ZjeEhnSJppa1gv6cCqaS4_Jlfk1qvaG8K70bJy6ZqHG6XIWzi7sWyC4EGBHgfWkhpjCUlAWaFtYMddo5w-AjylCcn8AWIvacdSJbPx1u50Zlc7A0B7FUyiaYX6HrOZt3gJedN/s640/Cabecera+t%25C3%25A9mporaExcel.PNG" width="640" /></a><br />
<br />
<br />
<br />
<br />Témpora Consultoreshttp://www.blogger.com/profile/09000632812723289961noreply@blogger.com4tag:blogger.com,1999:blog-8253525174733356300.post-74185476323519644222017-09-01T19:27:00.000+02:002017-11-20T19:35:07.953+01:00Referencias a partes de una Tabla de Excel mediante VBA<div style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;">
</div>
Las Tablas de Excel son un enorme apoyo para la programación en VBA,
entre otras cosas,porque son unos objetos que llevan implícitos unos
nombres de rango que podemos utilizar a la hora de diseñar nuestro
código.<br />
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Una determinada Tabla de Excel ya tiene un nombre de rango que hace referencia a ella misma, pero también nombres de rango particulares para la fila de encabezados y para la fila de totales. También, cada una de las filas y de las columnas tienen unas formas de ser referenciadas.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Vamos a ver a continuación cuál es el código necesario para referirnos a esas partes de una tabla o a la tabla entera:</div>
<br />
<span style="color: #b45f06;"><b><span style="font-size: large;">1) Para seleccionar la TABLA ENTERA (encabezados y totales incluidos)</span></b></span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5YP_aR5Ks98k8AxApgcHSGENpeMv2-GRhmhzM9D365QSBIh3VGl_UwLe-tTYohENc5JGWSe6FZPHyWgScU72b7SYrtRgaLpE9PLUJRc1CHaHIiYdUzRg9rk1y857YOVZBha1MDxNmo_sW/s1600/Range.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="190" data-original-width="330" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5YP_aR5Ks98k8AxApgcHSGENpeMv2-GRhmhzM9D365QSBIh3VGl_UwLe-tTYohENc5JGWSe6FZPHyWgScU72b7SYrtRgaLpE9PLUJRc1CHaHIiYdUzRg9rk1y857YOVZBha1MDxNmo_sW/s1600/Range.PNG" /></a></div>
<br />
<span style="color: blue;"> ActiveSheet.ListObjects("</span><span style="color: blue;"><span style="color: blue;">NombreDeMiTabla</span>").Range.Select</span><br />
<br />
<span style="color: #b45f06;"><span style="font-size: large;"><b>2) Para seleccionar solo el CUERPO de la tabla (sin encabezados ni totales)</b></span></span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXML6OL2STC08Y2if1NG0ISjeb6x75z0YRtHjTZB2enXtYvlXzt25QSNwriYP7WnyS2pdxkKl26J5YeK4FuUwlDhIZp9HN7GuUME_y1sq1XxR3kiVff6djNb0YB7pUZ9YJEyIFxlA-vSUU/s1600/Body+Range.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="187" data-original-width="328" height="182" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXML6OL2STC08Y2if1NG0ISjeb6x75z0YRtHjTZB2enXtYvlXzt25QSNwriYP7WnyS2pdxkKl26J5YeK4FuUwlDhIZp9HN7GuUME_y1sq1XxR3kiVff6djNb0YB7pUZ9YJEyIFxlA-vSUU/s320/Body+Range.PNG" width="320" /></a></div>
<span style="color: blue;"><br /> ActiveSheet.ListObjects("</span><span style="color: blue;"><span style="color: blue;">NombreDeMiTabla</span>").DataBodyRange.Select</span><br />
<br />
... o bien...<br />
<br />
<span style="color: blue;">[</span><span style="color: blue;"><span style="color: blue;">NombreDeMiTabla</span>].Select</span><br />
<br />
(Al fin y al cabo, un nombre de tabla es un nombre de rango para VBA)<br />
<br />
<span style="color: #b45f06;"><span style="font-size: large;"><b>3) Para seleccionar solo la FILA DE ENCABEZADOS de la tabla </b></span></span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEho-4BnLnWGoZXRRC5Orky2KK7V4GjNkj4NUCCJRQT0XV9ZetncK46rlK9frz-SB3hNArLzv0qaXo03ojfRDeB6-wB-IT_IGd9rxFU_xa8gBD_9L1-QaXLYMA6A2KcVq92B1-fUZO2LwDHV/s1600/Header+Row+Range.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="189" data-original-width="329" height="183" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEho-4BnLnWGoZXRRC5Orky2KK7V4GjNkj4NUCCJRQT0XV9ZetncK46rlK9frz-SB3hNArLzv0qaXo03ojfRDeB6-wB-IT_IGd9rxFU_xa8gBD_9L1-QaXLYMA6A2KcVq92B1-fUZO2LwDHV/s320/Header+Row+Range.PNG" width="320" /></a></div>
<br />
<span style="color: blue;"> ActiveSheet.ListObjects("</span><span style="color: blue;"><span style="color: blue;">NombreDeMiTabla</span>").HeaderRowRange.Select</span><span style="color: #b45f06;"><br /></span><br />
<br />
<span style="color: #b45f06;"><span style="font-size: large;"><b>4) Para seleccionar solo la FILA DE TOTALES de la tabla </b></span></span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="about:invalid#zClosurez" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="" border="0" src="data:image/png;base64,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" /></a></div>
<br />
<span style="color: blue;">ActiveSheet.ListObjects("</span><span style="color: blue;"><span style="color: blue;">NombreDeMiTabla</span>").TotalsRowRange.Select</span><br />
<br />
<span style="color: #b45f06;"><span style="font-size: large;"><b>5) Para seleccionar la 3ª COLUMNA (entera o solo el cuerpo) de la tabla</b></span></span><br />
<div class="separator" style="clear: both; text-align: center;">
<b style="margin-left: 1em; margin-right: 1em;"> <img alt="" src="data:image/png;base64,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" /></b></div>
<span style="color: #b45f06;"><span style="font-size: large;"></span></span><br />
<br />
<br />
<span style="color: blue;">ActiveSheet.ListObjects("</span><span style="color: blue;"><span style="color: blue;">NombreDeMiTabla</span>").ListColumns(3).Range.Select<br /> ActiveSheet.ListObjects("</span><span style="color: blue;"><span style="color: blue;">NombreDeMiTabla</span>").ListColumns(3).DataBodyRange.Select</span><br />
<span style="color: #b45f06;"><span style="font-size: large;"><b>6) Para seleccionar la 3ª FILA de datos de la tabla</b></span></span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="about:invalid#zClosurez" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="" border="0" src="data:image/png;base64,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" /></a></div>
<br />
<span style="color: blue;">ActiveSheet.ListObjects("</span><span style="color: blue;"><span style="color: blue;">NombreDeMiTabla</span>").ListRows(4).Range.Select</span><br />
<br />
<br />
Mediante índices también podemos seleccionar cualquier elemento concreto dentro de los rangos que acabamos de conocer. Por ejemplo:<br />
<br />
<span style="color: #b45f06;"><span style="font-size: large;"><b>a) Para seleccionar el 3er encabezado</b></span></span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="about:invalid#zClosurez" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="" border="0" src="data:image/png;base64,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" /></a></div>
<br />
<span style="color: blue;">ActiveSheet.ListObjects("</span><span style="color: blue;"><span style="color: blue;">NombreDeMiTabla</span>").HeaderRowRange(3).Selec</span>t<br />
<br />
<span style="color: #b45f06;"><span style="font-size: large;"><b>b) Para un dato concreto dentro del cuerpo de la tabla</b></span></span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="about:invalid#zClosurez" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="" border="0" src="data:image/png;base64,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" /></a></div>
<br />
<span style="color: blue;"> ActiveSheet.ListObjects("NombreDeMiTabla").DataBodyRange(3, 2).Select</span><br />
<br />
<br />
<br />
José Manuel Pomares Medrano <br />
<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9KQqil0ZjeEhnSJppa1gv6cCqaS4_Jlfk1qvaG8K70bJy6ZqHG6XIWzi7sWyC4EGBHgfWkhpjCUlAWaFtYMddo5w-AjylCcn8AWIvacdSJbPx1u50Zlc7A0B7FUyiaYX6HrOZt3gJedN/s1600/Cabecera+t%25C3%25A9mporaExcel.PNG" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="96" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9KQqil0ZjeEhnSJppa1gv6cCqaS4_Jlfk1qvaG8K70bJy6ZqHG6XIWzi7sWyC4EGBHgfWkhpjCUlAWaFtYMddo5w-AjylCcn8AWIvacdSJbPx1u50Zlc7A0B7FUyiaYX6HrOZt3gJedN/s640/Cabecera+t%25C3%25A9mporaExcel.PNG" width="640" /></a></div>
<br />
<br />
<br />
<br />
<br />Témpora Consultoreshttp://www.blogger.com/profile/09000632812723289961noreply@blogger.com117tag:blogger.com,1999:blog-8253525174733356300.post-84269309229301302552017-07-05T02:42:00.000+02:002017-07-05T02:42:08.618+02:00La función SI de Excel<br />
<div style="text-align: justify;">
Me atrevería a decir que la función SI es la más utilizada en el
ámbito de Excel. Esta función es capaz de realizar una comprobación (o
prueba lógica) en nuestra hoja de cálculo y, dependiendo del resultado,
nos devolverá algo (un valor, un texto o el resultado de una fórmula).</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKcvB-1VM1yaxbxfdYFpQQMlESZcQ8Htlk8n6ejx-4xDts4YGTTKSklDr_RZ3s0GF5ONlTxUGYtomOHCTc2JN9s-JBsuPse8CIuflBQn2KJTqNtQqTsIO3wW6zVdsx3bj1ER2vJzo6cuue/s1600/Captura.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKcvB-1VM1yaxbxfdYFpQQMlESZcQ8Htlk8n6ejx-4xDts4YGTTKSklDr_RZ3s0GF5ONlTxUGYtomOHCTc2JN9s-JBsuPse8CIuflBQn2KJTqNtQqTsIO3wW6zVdsx3bj1ER2vJzo6cuue/s1600/Captura.PNG" /></a></div>
<br />
<div style="text-align: justify;">
Para
utilizar esta función, necesitamos cumplimentar sus tres argumentos
separándolos mediante punto y coma. La estructura es la siguiente:</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKiBvmzuZD4tFQ3tvaEjSp2s3BQOescC7EYTYecVksKFvO-x40TwXt9Zrb5eQMVU3sQwiYJwdOtc9PIoiEdXCxsHUNLdQe9GXrHGp7Td2lqBeC_CUOPcXo-NlFPZ0tqoDWxteYjAcPjJ3o/s1600/Captura2.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="31" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKiBvmzuZD4tFQ3tvaEjSp2s3BQOescC7EYTYecVksKFvO-x40TwXt9Zrb5eQMVU3sQwiYJwdOtc9PIoiEdXCxsHUNLdQe9GXrHGp7Td2lqBeC_CUOPcXo-NlFPZ0tqoDWxteYjAcPjJ3o/s400/Captura2.PNG" width="400" /></a></div>
<br />
<div style="text-align: justify;">
Por
ejemplo, si necesitamos comprobar si el valor de una celda supera o
iguala el valor de otra celda, podemos utilizar la función así:</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiX04k7-VorzVihAnJqvtoci_gPjjRuChM9p63E-kLMUfa0oyNC7gHugacrSj4_S-EXrv3e5RqlJQAAbNlXnHyK83PKu8jYIfGXkDBKTs0OASIIJ87vdJDb4ocU5igO2buc29-Lrljq1Ayx/s1600/Captura3.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiX04k7-VorzVihAnJqvtoci_gPjjRuChM9p63E-kLMUfa0oyNC7gHugacrSj4_S-EXrv3e5RqlJQAAbNlXnHyK83PKu8jYIfGXkDBKTs0OASIIJ87vdJDb4ocU5igO2buc29-Lrljq1Ayx/s1600/Captura3.PNG" /></a></div>
<span style="color: #e69138;"><br /></span>
<span style="color: #e69138;"><span style="font-size: large;"><b>POSIBILIDADES</b></span></span><br />
<br />
<div style="text-align: justify;">
<span style="color: #e69138;"><b>Prueba lógica</b></span></div>
<div style="text-align: justify;">
En
el espacio donde hay que escribir el primer argumento (la prueba
lógica) necesitamos que se obtenga una respuesta VERDADERO o FALSO. Esta
respuesta se puede obtener con una comparación (como podemos ver en la
imagen de ejemplo anterior) con los operadores >, <, =, etc. Pero
no es la única forma, sino que podemos utilizar, por ejemplo, otra
función que nos devuelva cualquiera de los dos valores requeridos. Vemos
un ejemplo de ello a continuación:</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhniwC8PNROHNvnbRHdd5XFMCksZM4X_8Ug2XeWC5MbVVMZYJlNHaFTWdjQG3TZd8YW4VwIaCpG0WHYD0RqzbxmHYlcDabMEiKA0Al7keGq5HY8AC3qIyu3XIEuZVt8qF-tdYRL3o0-7Aor/s1600/Captura4.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhniwC8PNROHNvnbRHdd5XFMCksZM4X_8Ug2XeWC5MbVVMZYJlNHaFTWdjQG3TZd8YW4VwIaCpG0WHYD0RqzbxmHYlcDabMEiKA0Al7keGq5HY8AC3qIyu3XIEuZVt8qF-tdYRL3o0-7Aor/s1600/Captura4.PNG" /></a></div>
<br />
<div style="text-align: justify;">
Observamos
cómo la función ESERROR comprueba si en H19 hay un error y en caso de
ser cierto, nos devuelve VERDADERO y... eso es precisamente lo que
necesita la función SI en su primer argumento para decidir si tiene que
devolver un 0 (según el ejemplo) o bien el propio valor de H19.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: #e69138;"><b>Valor si falso, Valor si verdadero</b></span></div>
<div style="text-align: justify;">
En
los argumentos segundo y tercero tenemos que decir a la función SI qué
es lo que queremos que nos devuelva en el caso de que el resultado de la
prueba lógica sea VERDADERO O FALSO. Para ello, podemos escribir un
valor directamente (número, texto, fecha, etc.) o podemos hacer
referencia al valor o resultado de otra celda mediante su referencia.
Ejemplos de todo esto también los tenemos en la última imagen donde
aparece la función =SI(ESERROR(H19);0;H19).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Hay que
recordar que, en el caso de que queramos obtener un texto, este debe
estar escrito entre comillas. Un ejemplo de ello lo tenemos en la imagen
siguiente:</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtdxeqEWJC58_VaONm99KtgwQKAtwdALAHJz6jrCOuA_mrL6YyeKxqbmKU2jQuyWZJNRgkeQLBh9GJ6TOE77YI5PfauW6INJ6mRgJ3yZpxQh9XO3VBvHhTVmlZYvYnBy6DVlm_LL4Be9S5/s1600/Captura3.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtdxeqEWJC58_VaONm99KtgwQKAtwdALAHJz6jrCOuA_mrL6YyeKxqbmKU2jQuyWZJNRgkeQLBh9GJ6TOE77YI5PfauW6INJ6mRgJ3yZpxQh9XO3VBvHhTVmlZYvYnBy6DVlm_LL4Be9S5/s1600/Captura3.PNG" /></a></div>
<br />
<div style="text-align: justify;">
Incluso
en cualquiera de estos argumentos podemos utilizar una segunda función
SI anidada para que su resultado sea devuelto por la función principal
(la que contiene o anida a la segunda). Un ejemplo de esto lo tenemos en
la función que vemos en la siguiente imagen:</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_cc8S9EunuplI1Ig4xBqvfld6HsT0vTxLrMx1h0PxxbA_kq0dKTtE3z8Z9942gbycbHO6eoUo5YLCjzVCbQLBiqAKFj9HBa06DnSnMH1zAQs9uSRTEVrI2fLeKQjBzaDYbddjhrv_u2fD/s1600/Captura5.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_cc8S9EunuplI1Ig4xBqvfld6HsT0vTxLrMx1h0PxxbA_kq0dKTtE3z8Z9942gbycbHO6eoUo5YLCjzVCbQLBiqAKFj9HBa06DnSnMH1zAQs9uSRTEVrI2fLeKQjBzaDYbddjhrv_u2fD/s1600/Captura5.PNG" /></a></div>
<br />
<div style="text-align: justify;">
El
objetivo de anidar la función SI de la imagen anterior es realizar una
nueva prueba lógica en el caso de que la primera sea fallida (sea
FALSO). De esta forma conseguimos 3 posibles respuestas:</div>
<ul style="text-align: justify;">
<li style="text-align: justify;">Si la prueba lógica de la función SI principal da como resultado VERDADERO, obtenemos un 2 en la imagen del ejemplo...</li>
<li style="text-align: justify;">... en caso contrario, la función SI anidada entra en funcionamiento determinando si se devuelve:</li>
<ul style="text-align: justify;">
<li> un 1....</li>
<li>...o un 0 (cero)</li>
</ul>
</ul>
<br />
<br />
José Manuel Pomares Medrano <br />
<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9KQqil0ZjeEhnSJppa1gv6cCqaS4_Jlfk1qvaG8K70bJy6ZqHG6XIWzi7sWyC4EGBHgfWkhpjCUlAWaFtYMddo5w-AjylCcn8AWIvacdSJbPx1u50Zlc7A0B7FUyiaYX6HrOZt3gJedN/s1600/Cabecera+t%25C3%25A9mporaExcel.PNG" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="96" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9KQqil0ZjeEhnSJppa1gv6cCqaS4_Jlfk1qvaG8K70bJy6ZqHG6XIWzi7sWyC4EGBHgfWkhpjCUlAWaFtYMddo5w-AjylCcn8AWIvacdSJbPx1u50Zlc7A0B7FUyiaYX6HrOZt3gJedN/s640/Cabecera+t%25C3%25A9mporaExcel.PNG" width="640" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />Témpora Consultoreshttp://www.blogger.com/profile/09000632812723289961noreply@blogger.com1tag:blogger.com,1999:blog-8253525174733356300.post-82847319608699890962017-04-30T20:38:00.001+02:002017-04-30T20:39:43.262+02:00Agrupar tablas dinámicas por número de semana<div style="text-align: justify;">
Cualquier usuario de Excel que utilice frecuentemente tablas dinámcias sabe que es posible agrupar la información que estas ofrecen por periodos (minutos, horas, días, meses, trimestres, años).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Aunque de forma indirecta, también podemos agrupar los datos de una tabla dinámica por el nº de semana correspondiente. Esto es algo que, según he comprobado con mi experienccia al impartir clases de Excel a empresa, es más frecuente de lo que podamos pensar y... este será el tema de este post.</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYeLew3GaFGW8mv8S6cWLyVnqOjutVWwQA0SDesdXGN5Gdh8e7caXADw2PWda2lBl45az0-QPE0NcQBvUVyeNhMgD2OX3EC012qOWJFdcliI8eb_kQmFf6w9lSUDtEd24HhRACntqFXqd5/s1600/calendario.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="266" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYeLew3GaFGW8mv8S6cWLyVnqOjutVWwQA0SDesdXGN5Gdh8e7caXADw2PWda2lBl45az0-QPE0NcQBvUVyeNhMgD2OX3EC012qOWJFdcliI8eb_kQmFf6w9lSUDtEd24HhRACntqFXqd5/s320/calendario.png" width="320" /></a></div>
<div style="text-align: justify;">
<br />
Como decíamos, es posible realizar este tipo de agrupación de forma indirecta. Es decir, creando previamente en la tabla de datos original un campo (columna) cuyas celdas contengan una función que nos calcule el número de semana.</div>
<br />
Dicho gráficamente, tenemos que conseguir que el campo FECHA de nuestra tabla...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAdmE9iwsd3BdF-XwCIB1nMBvYNHafvepyWmmxJsvRDdyjsFgwypvhnZZXoWdxHIKsBLrZ6rjZcgS3nGldXhqjwdIONMfxPvdCgb1bBMaBx56lSZqDXC9WAQ1RzeKVaUk_TA7eYYLk0oEI/s1600/Tabla+sin+NSemana.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAdmE9iwsd3BdF-XwCIB1nMBvYNHafvepyWmmxJsvRDdyjsFgwypvhnZZXoWdxHIKsBLrZ6rjZcgS3nGldXhqjwdIONMfxPvdCgb1bBMaBx56lSZqDXC9WAQ1RzeKVaUk_TA7eYYLk0oEI/s1600/Tabla+sin+NSemana.PNG" /></a></div>
<br />
...tenga un campo compañero con el número de semana calculado....<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiabwMckCyAPIO4L2tS4WKHWZwhuNtt3W27kGgDS7pYg8dqhrObsMHT07stCWGuWkc5JxCbX0OnPXS2KFiSpbDsLSpt1hUXeFTD82r-BiC_CmTC4UT9UqRlUqiCXT3WZOM7jIhpQMZdrsN/s1600/Tabla+con+NSemana.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiabwMckCyAPIO4L2tS4WKHWZwhuNtt3W27kGgDS7pYg8dqhrObsMHT07stCWGuWkc5JxCbX0OnPXS2KFiSpbDsLSpt1hUXeFTD82r-BiC_CmTC4UT9UqRlUqiCXT3WZOM7jIhpQMZdrsN/s1600/Tabla+con+NSemana.PNG" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
Esto se puede conseguir si introducimos en cada celda de la tabla la fórmula...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiL4dbawiBgJD9FmYa9yfo5IkoMUvpNGaqYaho33MJUnmjJ-b-3s8pSzs4TCO6JbYo2rtkcpmOUCP07FpKAfVE1E_A9jgBJ6N2NpqAyzCEVTt0mz_hliYbf3QTiTaMD3738tmSSV5U7TpVd/s1600/Detalle+f%25C3%25B3rmula+fin+de+semana.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiL4dbawiBgJD9FmYa9yfo5IkoMUvpNGaqYaho33MJUnmjJ-b-3s8pSzs4TCO6JbYo2rtkcpmOUCP07FpKAfVE1E_A9jgBJ6N2NpqAyzCEVTt0mz_hliYbf3QTiTaMD3738tmSSV5U7TpVd/s1600/Detalle+f%25C3%25B3rmula+fin+de+semana.PNG" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
... donde podemos ver concatenados mediante el símbolo ampersand (&):<br />
<ul>
<li>La palabra "Semana " (con espacio al final y entre comillas)</li>
<li>La función NUM.DE.SEMANA que tiene dos argumentos separados por punto y coma:</li>
<ul>
<li>En el primero de ellos debemos hacer referencia a la celda que tiene la fecha (la celda de la columna FECHA).</li>
<li>En el segundo argumento debemos escribir un código que determinará el sistema de numeración de semana que deseamos. Por ejmplo, el Sistema 2 que se ajusta a la norma ISO europea necesita el código 21 (como vemos en la imagen anterior). Si deseamos otro sistema de numeración de semana, para conocerlo debemos acudir a la <a href="https://support.office.com/es-es/article/NUM-DE-SEMANA-funci%C3%B3n-NUM-DE-SEMANA-e5c43a03-b4ab-426c-b411-b18c13c75340" target="_blank">página de ayuda de la función NUM.DE.SEMANA de Microsoft. </a></li>
</ul>
</ul>
<br />
Una vez llegados aquí, en nuestra tabla dinámica solo tenemos que:<br />
<ul>
<li>Actualizar (Alt+F5), para que el campo esté disponible en la lista de campos </li>
<li>Insertar el campo "SEMANA" (arrastrándolo, normalmente al cuadrante "Filas")</li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7Mqj3_Kfiuj62RJbBYx4LQLV0gkJAKmRPV-kt6G1lvz_fzlAilIRqgJ-daf1u3Gx-gg8bcPEC53LSeFk8ChL2ysD5bq8jhNc7TsFoHSfszc7YBptAJIU3ZrUSsCNQFb746HkJKLw1PT-c/s1600/Tabla+con+NSemana.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7Mqj3_Kfiuj62RJbBYx4LQLV0gkJAKmRPV-kt6G1lvz_fzlAilIRqgJ-daf1u3Gx-gg8bcPEC53LSeFk8ChL2ysD5bq8jhNc7TsFoHSfszc7YBptAJIU3ZrUSsCNQFb746HkJKLw1PT-c/s1600/Tabla+con+NSemana.PNG" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<br />
José Manuel Pomares Medrano <br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9KQqil0ZjeEhnSJppa1gv6cCqaS4_Jlfk1qvaG8K70bJy6ZqHG6XIWzi7sWyC4EGBHgfWkhpjCUlAWaFtYMddo5w-AjylCcn8AWIvacdSJbPx1u50Zlc7A0B7FUyiaYX6HrOZt3gJedN/s1600/Cabecera+t%25C3%25A9mporaExcel.PNG" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="96" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9KQqil0ZjeEhnSJppa1gv6cCqaS4_Jlfk1qvaG8K70bJy6ZqHG6XIWzi7sWyC4EGBHgfWkhpjCUlAWaFtYMddo5w-AjylCcn8AWIvacdSJbPx1u50Zlc7A0B7FUyiaYX6HrOZt3gJedN/s640/Cabecera+t%25C3%25A9mporaExcel.PNG" width="640" /></a><br />
<br />
<br />
<br />
<br />
<br />
<br />Témpora Consultoreshttp://www.blogger.com/profile/09000632812723289961noreply@blogger.com1tag:blogger.com,1999:blog-8253525174733356300.post-87530216590810519782017-02-09T13:45:00.000+01:002017-11-20T18:34:27.238+01:00Introducción de datos en Excel con un cuadro de diálogo<div class="separator" style="clear: both; text-align: center;">
</div>
<div style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;">
</div>
<span style="text-align: justify;"><b>Veamos </b>en este artículo <b>una forma alternativa de introducir datos en Excel</b>. <b>A veces, al usuario le puede resultar un incordio o muy complicado introducir un valor</b> en determinada celda de nuestro libro de Excel y necesita una forma de "canalizar" dicha introducción de datos. <b>Las razones podrían ser:</b></span><br />
<br />
<ol>
<li><span style="text-align: justify;"><b>La celda está en una hoja distinta</b> a la que se encuentra el usuario cuando necesita introducir el dato. De esta forma, el usuario tendría que activar otra hoja, seleccionar la celda adecuada, introducir el dato, presionar "Intro" y activar de nuevo la hoja donde se encontraba.</span></li>
<li><span style="text-align: justify;"><b>La celda se encuentra en la misma hoja, pero es necesario realizar un scroll de la pantalla muy largo</b> y tedioso hasta encontrar dicha celda y posteriormente volver a la situación inicial posiblemente con el mismo scroll.</span></li>
<li><span style="text-align: justify;"><b>La celda se encuentra oculta tras un objeto</b> (forma, imagen, gráfico, etc.) <b>o bien tiene un formato que hace imposible su distinción</b> (color de fuente igual al color de fondo, por ejemplo).</span></li>
<li><span style="text-align: justify;"><b>El valor que deseamos que aparezca en la celda es distinto al que conoce el usuario</b>. Por ejemplo, el usuario podría conocer una base imponible y nosotros desear que el valor introducido finalmente en la celda objetivo sea baseimponible*IVA.</span></li>
<li><span style="text-align: justify;"><b>El valor debe cumplir con alguna condición</b>. Por ejemplo, podríamos impedir al usuario que continúe utilizando la aplicación de Excel, obligándole a que introduzca un dato "sí o sí".</span></li>
<li><span style="text-align: justify;">Incluso es posible que la pretensión no sea que el dato a introducir se visualice, sino que <b>solo es necesario a nivel interno de Excel para algún proceso</b>.</span></li>
</ol>
<br />
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_CCnfGChsny5WXcXKvpX6w31bgsq1cQov7yKuFKwwcNYv4-wt4ZVTye_8uGaMzYHZsp3dSiP5IEF5lPtEbHBopPch5ipQt7mH9FCj0OUsLStFmpVVIUA7x3qbn_MP03yrl523pSU1nxtO/s1600/Entrada+de+datos.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_CCnfGChsny5WXcXKvpX6w31bgsq1cQov7yKuFKwwcNYv4-wt4ZVTye_8uGaMzYHZsp3dSiP5IEF5lPtEbHBopPch5ipQt7mH9FCj0OUsLStFmpVVIUA7x3qbn_MP03yrl523pSU1nxtO/s400/Entrada+de+datos.jpg" width="400" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
La solución a estas eventualidades es ofrecer al usuario que el dato lo introduzca cómodamente en un cuadro de dialogo que emerge en la pantalla y que Excel (mediante código VBA) se encargue de "llevar" ese dato a la celda correspondiente, allá donde esté.</div>
<br />
Esto se consigue mediante la función de VBA: <b><span style="color: #990000;">Inputbox</span></b>, cuya sintaxis es:<br />
<br />
<div style="text-align: center;">
<b>InputBox(Mensaje, Título, Valor por defecto, posición x, posición y)</b></div>
<span style="font-size: x-small;"><br /></span>
<div style="text-align: justify;">
<i><span style="font-size: x-small;"><b>Mensaje</b> = Mensaje que vemos justo encima del campo donde el usuario introduce el valor.</span></i></div>
<i style="text-align: justify;"><span style="font-size: x-small;"><b>Título</b> = Título del cuadro de diálogo que se muestra en la barra superior de este.</span></i><br />
<div style="text-align: justify;">
<span style="font-size: x-small;"><i><b>Valor por defecto</b> = Valor que se muestra en el campo donde el usuario introduce el valor y que se considerará por defecto en el caso de que no se introduzca expresamente ningún valor.</i></span></div>
<div style="text-align: justify;">
<span style="font-size: x-small;"><i><b>Posición x</b> = nº de twips que el cuadro se situará hacia la derecha, desde el borde izquierdo de la pantalla (15 twips = 1pixel).</i></span></div>
<div style="text-align: justify;">
<span style="font-size: x-small;"><i><b>Posición y</b> = nº de twips que el cuadro se situará hacia abajo, desde el borde superior de la pantalla (15 twips = 1pixel). </i></span></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2cuhPnQLWJPyLe1SaEgqdmmabsq5-aeXnMYb1PW-zerm7yegmFbg2yTCqnDQpcrOPwJc9pj2mGthSDEeP4-f0kGSaj2jEvLVioF5QNqtbrIk-Ft4ab6sN2hiH3T8Jq9vEwPUJzXUEepq7/s1600/Captura.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="173" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2cuhPnQLWJPyLe1SaEgqdmmabsq5-aeXnMYb1PW-zerm7yegmFbg2yTCqnDQpcrOPwJc9pj2mGthSDEeP4-f0kGSaj2jEvLVioF5QNqtbrIk-Ft4ab6sN2hiH3T8Jq9vEwPUJzXUEepq7/s400/Captura.JPG" width="400" /></a></div>
<br />
<br />
<div style="text-align: justify;">
<b>A continuación proponemos un ejemplo de código para cada caso</b> de los que enumeramos al principio, donde <span style="color: #38761d;"><b>el lector podrá personalizar el código que aparece en verde</b></span>, según sus necesidades. <b>Excepto en el ejemplo nº 5, </b>e<b>l código se debe escribir en un Módulo</b> ya existente o en uno nuevo (para insertar un módulo, ir al Editor de VBA (Alt+F11) y después hacer click en el menú Insertar / Módulo.) y se debe ejecutar, por ejemplo, asignando la macro resultante "EntradaDatos" a un botón o activando la ficha "Vistas" / Grupo "Macros" / "Ver Macros" / "Ejecutar".</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b><span style="color: #990000;"><span style="font-size: large;">Caso 1</span>: Introducción de un texto </span></b><b><span style="color: #990000;">(sin condiciones)</span></b><b><span style="color: #990000;"> desde un cuadro de diálogo en la hoja3, estando en la hoja1.</span></b></div>
<br />
<span style="color: blue;">Sub EntradaDatos()<br /> Dim Entrada As String</span><br />
<span style="color: blue;"> Entrada = InputBox(Chr(13) & Chr(13) & Chr(13) & Chr(13) & "</span><span style="color: #38761d;">Introduzca su nombre</span><span style="color: blue;">", "</span><span style="color: #38761d;">Nombre</span><span style="color: blue;">", "</span><span style="color: #38761d;">Introduzca aquí su nombre</span><span style="color: blue;">", </span><span style="color: #38761d;">1000</span><span style="color: blue;">, </span><span style="color: #38761d;">1000</span><span style="color: blue;">)<br /> If Entrada = "</span><span style="color: #38761d;">Introduzca aquí su nombre</span><span style="color: blue;">" Then Entrada = ""<br /> Sheets("</span><span style="color: #38761d;">hoja3</span><span style="color: blue;">").Range("</span><span style="color: #38761d;">A1</span><span style="color: blue;">") = Entrada<br />End Sub</span><br />
<div>
<br />
<b><span style="color: #990000;"><span style="font-size: large;">Caso 2</span>: Introducción de un texto </span></b><b><span style="color: #990000;">(sin condiciones)</span></b><b><span style="color: #990000;"> desde un cuadro de diálogo en la celda A1000 de la hoja1, estando en la celda A1 de la hoja1.</span></b><br />
<br />
<span style="color: blue;">Sub EntradaDatos()</span><span style="color: blue;"><span style="color: blue;"> Dim Entrada As String</span></span><br />
<span style="color: blue;"><span style="color: blue;"> </span> Entrada = InputBox(Chr(13) & Chr(13) & Chr(13) & Chr(13) & </span>
<span style="color: blue;">"</span><span style="color: #38761d;">Introduzca su nombre</span><span style="color: blue;">", "</span><span style="color: #38761d;">Nombre</span><span style="color: blue;">", "</span><span style="color: #38761d;">Introduzca aquí su nombre</span><span style="color: blue;">", </span><span style="color: #38761d;">1000</span><span style="color: blue;">, </span><span style="color: #38761d;">1000</span><span style="color: blue;">)</span> <span style="color: blue;"><br /> If Entrada = "</span><span style="color: #38761d;">Introduzca aquí su nombre</span><span style="color: blue;">" Then Entrada = ""<br /> Range ("</span><span style="color: #38761d;">A1000</span><span style="color: blue;">") = Entrada<br /> Range ("</span><span style="color: #38761d;">A1</span><span style="color: blue;">").Select<br />End Sub</span><br />
<br />
<div>
<b><span style="color: #990000;"><span style="font-size: large;">Caso 3</span>: Igual al anterior</span></b><b><span style="color: #990000;">.</span></b><br />
<div style="text-align: justify;">
<b><span style="color: #990000;"><br /></span></b></div>
<div style="text-align: justify;">
<b><span style="color: #990000;"><span style="font-size: large;">Caso 4</span>: Introducción de un número que es una base imponible en un cuadro de diálogo, para que Excel convierta dicha base imponible en el TOTAL (Base Imponible + IVA).</span></b> <b><span style="color: #990000;"><br /></span></b></div>
<br />
<span style="color: blue;">Sub EntradaDatos()</span><br />
<span style="color: blue;"><span style="color: blue;"> Dim Entrada As Double</span></span><br />
<span style="color: blue;"><span style="color: blue;"> </span> Entrada = InputBox(Chr(13) & Chr(13) & Chr(13) & Chr(13) & "</span><span style="color: #38761d;">Introduzca la base imponible</span><span style="color: blue;">", "</span><span style="color: #38761d;">Convertir Base imponible en TOTAL</span><span style="color: blue;">", 0</span><span style="color: blue;">, </span><span style="color: #38761d;">1000</span><span style="color: blue;">, </span><span style="color: #38761d;">1000</span><span style="color: blue;">)</span><span style="color: blue;"><br /> Range("</span><span style="color: #38761d;">A5</span><span style="color: blue;">") = Entrada *</span><span style="color: #38761d;"> 1.21</span><br />
<span style="color: blue;">End Sub</span><br />
<br />
<div style="text-align: justify;">
<b><span style="color: #990000;"><span style="font-size: large;">Caso 5</span>: Al abrir el archivo, el usuario debe introducir algo en el campo del cuadro de diálogo. Mientras no sea así, el cuadro no se puede cerrar. Si el valor introducido no coincide con una contraseña, Excel se cierra sin otra posibilidad.</span> <span style="color: #990000;">Si este código se introduce en el objeto "Thisworkbook" con el evento "open", hace un efecto similar al cifrado del archivo mediante contraseña.</span></b></div>
<br />
<span style="color: blue;">Private Sub Workbook_Open()<br />Dim Entrada As Variant<br />Do<br /> Entrada = InputBox(Chr(13) & Chr(13) & Chr(13) & Chr(13) & "</span><span style="color: #38761d;">Introduzca la contraseña</span><span style="color: blue;">", "</span><span style="color: #38761d;">Contraseña</span><span style="color: blue;">", "</span><span style="color: #38761d;">Introduzca aquí la contraseña</span><span style="color: blue;">", </span><span style="color: #38761d;">1000</span><span style="color: blue;">, </span><span style="color: #38761d;">1000</span><span style="color: blue;">)<br />Loop Until Entrada <> ""<br />If Entrada <> "</span><span style="color: #38761d;">temporaexcel</span><span style="color: blue;">" Then<br /> ThisWorkbook.Close True<br />End If</span></div>
<div>
<span style="color: blue;">End Sub</span></div>
</div>
<div>
<br />
Si queremos ver un archivo con los ejemplos 4 y 5, podemos descargarnos el libro Excel:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.dropbox.com/s/0g5ly3lxui3isj0/Input%20box.xlsm?dl=0" target="_blank"><img alt="https://www.dropbox.com/s/0g5ly3lxui3isj0/Input%20box.xlsm?dl=0" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlJe9UmBmPqRJA6MbLC2O8zjLTDkqnxMd7ffxtAo9t_4ytRKuhsVhevMKJD6Ux4ZAx9PWPj0zJc-lcd6NvVshhw85iKoxjLHHAOYP9qsNeEb4ppuP7A07OHNzBq5N7hmHfFwzZG3d4hv4S/s1600/Descargar-icono.PNG" /></a></div>
<br />
Si deseamos saber cómo proteger nuestro código escrito en VBA, visitar este artículo:<br />
<br />
<a href="http://temporaexcel.blogspot.com/2012/03/proteccion-del-codigo-vba-en-excel.html">Protección del código VBA en Excel</a><br />
<br />
<br />
<div style="text-align: justify;">
<b style="color: #0b5394; font-size: x-large;"> José Manuel Pomares Medrano</b></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPbjGglrcrMY5YRV7bRCpbd2xAXgtOLqVAcZt0bjjRKc8_B9u3Uv5hhzgqCuZYRrBuRieD2xHaDEHJUIGyK-VZgBeo0sGg3bl9IzfTPz3DAOQtl-_S2VvDgxUKmcMPtjtgFpkbgDCsKKHh/s1600/Publilogo.PNG" imageanchor="1" style="clear: left; display: inline !important; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="226" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPbjGglrcrMY5YRV7bRCpbd2xAXgtOLqVAcZt0bjjRKc8_B9u3Uv5hhzgqCuZYRrBuRieD2xHaDEHJUIGyK-VZgBeo0sGg3bl9IzfTPz3DAOQtl-_S2VvDgxUKmcMPtjtgFpkbgDCsKKHh/s400/Publilogo.PNG" width="400" /></a></div>
<br />
<br /></div>
Témpora Consultoreshttp://www.blogger.com/profile/09000632812723289961noreply@blogger.com2tag:blogger.com,1999:blog-8253525174733356300.post-17506574645128210952017-01-18T02:23:00.000+01:002017-11-20T18:40:25.091+01:00Cómo hacer referencia a celdas en VBA Excel (III)<div style="text-align: justify;">
El tercer capítulo de esta serie "Cómo hacer referencia a celdas en VBA Excel" lo vamos a dedicar a conocer la utilización de nombres de rango para utilizarlos a la hora de referirnos a celdas o rangos. También veremos otras formas de hacer referencia a celdas o rangos distintas a las vistas hasta ahora.</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_HxToOmf8jxdHBNtFY7zGPe6U4XkJlZiYgv8-s9aQOHftWLnub5w_7QMcWCrRw7hGpD8OagOhKWS3YSPzZ9ONPbR7pJciPbjh7ayCJz_Cxo51evAbJKSokBzwHH5UjJxlFTO73rtNvmZR/s1600/Range.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="242" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_HxToOmf8jxdHBNtFY7zGPe6U4XkJlZiYgv8-s9aQOHftWLnub5w_7QMcWCrRw7hGpD8OagOhKWS3YSPzZ9ONPbR7pJciPbjh7ayCJz_Cxo51evAbJKSokBzwHH5UjJxlFTO73rtNvmZR/s320/Range.PNG" width="320" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b><span style="color: #990000; font-size: large;">Referencia a celdas o rangos con nombres de rango</span></b></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Los nombres de rango ofrecen dos ventajas frente a la utilización de propiedades como "<b>Range</b>" o "<b>Cells</b>":</div>
<div style="text-align: justify;">
</div>
<ol>
<li>Actuan como variables. Es decir, si posteriormente a escribir el código se insertan o eliminan filas o columnas, el nombre de rango siempre mantendrá la referencia a las celdas correctas.</li>
<li><span style="text-align: start;">No es necesario anteponer el nombre de la hoja que contiene el rango</span></li>
</ol>
<br />
<br />
Para utilizar un nombre de rango con la finalidad de hacer referencia a una celda o rango de celdas, lo podemos hacer así:<br />
<br />
Range("NombreRango").Select<br />
<br />
... o con el método abreviado, con corchetes:<br />
<br />
[NombreRango].Select<br />
<br />
<br />
<div style="text-align: justify;">
<b><span style="color: #990000; font-size: large;">Combinación de "Range" con "Cells"</span></b></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Range(Cells(1, 3),Cells(3, 8)).Select</div>
<br />
<span style="font-size: x-small;"><i> Vemos que cada argumento de la propiedad "Range" contiene la propiedad "Cells" para definir las celdas superior</i></span><br />
<span style="font-size: x-small;"><i> izquierda e inferior derecha del rango.</i></span><br />
<br />
<br />
<div style="text-align: justify;">
<b><span style="color: #990000; font-size: large;">Seleccionar la última celda con datos en una lista continua</span></b></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwpUhqDccdvYHFxvonVMqhusDicBWK29XEJUve2kKCs_6DMtr-JfUjTpqvel1lDvSrbC8lnDdNjMH-o2jxHOpObnmmItXy4J8K1T_SQTWEXcx-cSflLEVqc6fLWvK80cG-KHaksNQEFiyA/s1600/Lista+continua.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwpUhqDccdvYHFxvonVMqhusDicBWK29XEJUve2kKCs_6DMtr-JfUjTpqvel1lDvSrbC8lnDdNjMH-o2jxHOpObnmmItXy4J8K1T_SQTWEXcx-cSflLEVqc6fLWvK80cG-KHaksNQEFiyA/s1600/Lista+continua.PNG" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Range("A1").End(xlDown).Select</div>
<br />
<span style="font-size: x-small;"><i> Utilizamos la propiedad "End" con el argumento "xlDown" para ir al final del rango con datos. Si la lista tuviera</i></span><br />
<span style="font-size: x-small;"><i> un "hueco", la celda seleccionada sería la última antes de aparecer el hueco</i></span><i style="font-size: small;">.</i><br />
<i style="font-size: small;"><br /></i>
<br />
<div>
<span style="font-size: x-small;"><i><br /></i></span></div>
<div style="text-align: justify;">
<b><span style="color: #990000; font-size: large;">Seleccionar la última celda con datos en una lista discontinua</span></b></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOZ6bpD71fXV6NoAcVRHhMEXTPvjDTz5BhFHeex1LYU2HAIr5SHGBAt99hHtJwRWCUwnZvEFLzlRzQV17j2W5YfFGHwNyvjs1nxXwA9qXxuL0rxOoOhjhxabSVrDNS2w4ATznIrx6ojNYu/s1600/Lista+discontinua.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><br /><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOZ6bpD71fXV6NoAcVRHhMEXTPvjDTz5BhFHeex1LYU2HAIr5SHGBAt99hHtJwRWCUwnZvEFLzlRzQV17j2W5YfFGHwNyvjs1nxXwA9qXxuL0rxOoOhjhxabSVrDNS2w4ATznIrx6ojNYu/s1600/Lista+discontinua.PNG" /></a></div>
<br />
<span style="text-align: justify;"> Range("A1048576").End(xlUp).Select</span><br />
<span style="text-align: justify;"><br /></span>
<span style="font-size: x-small;"><i> Utilizamos la propiedad "End" aplicada a la última celda de la columna A y con el argumento "xlUp" para que</i></span><br />
<span style="font-size: x-small;"><i> Excel seleccione la primera celda que tiene datos, empezando a buscar desde abajo hacia arriba.</i></span><br />
<br />
<br />
<b style="text-align: justify;"><span style="color: #990000; font-size: large;">Seleccionar el rango de datos relacionado con la celda activa</span></b><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0VO6ZHyupvn8x7jNEzcZHfC3yugKgrif66VlmHaoXoApSnGFSdbl0xm9SQvS2VHR2YWD8UXkTN9D8z9KUyUWUYv39O6nPCpqNeEh6hmIq9VA10uPpeuJaSFeGylbbhua9auERDEsCC20n/s1600/RangoActual.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0VO6ZHyupvn8x7jNEzcZHfC3yugKgrif66VlmHaoXoApSnGFSdbl0xm9SQvS2VHR2YWD8UXkTN9D8z9KUyUWUYv39O6nPCpqNeEh6hmIq9VA10uPpeuJaSFeGylbbhua9auERDEsCC20n/s1600/RangoActual.PNG" /></a></div>
<br />
<span style="text-align: justify;"> Range("B4").CurrentRegion.Select</span><br />
<span style="text-align: justify;"><br /></span>
<span style="text-align: justify;"><br /></span>
<b style="text-align: justify;"><span style="color: #990000; font-size: large;">Seleccionar el rango de datos relacionado con la celda activa</span></b><br />
<span style="text-align: justify;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgg1wtU-vrasiY7N0Vf4P0zcdF672ZYMUxyy4YGafs5QQSTdwZHbNrpyQ5g47FNotQ31ICuqj3C3Vdpvp7hNGOA_gbD3CvIVmi83ipanyhp4x5D3I95U2SjxRwTLcGgeK-i0SNgsRjGTCq/s1600/Rango+usado.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgg1wtU-vrasiY7N0Vf4P0zcdF672ZYMUxyy4YGafs5QQSTdwZHbNrpyQ5g47FNotQ31ICuqj3C3Vdpvp7hNGOA_gbD3CvIVmi83ipanyhp4x5D3I95U2SjxRwTLcGgeK-i0SNgsRjGTCq/s1600/Rango+usado.PNG" /></a></div>
<span style="text-align: justify;"><br /></span>
<span style="text-align: justify;"><br /></span>
<span style="text-align: justify;"> ActiveSheet.UsedRange.Select</span><br />
<span style="text-align: justify;"><br /></span>
<span style="text-align: justify;"><br /></span>
<span style="text-align: justify;">Si desea llevar a la práctica todo lo que le hemos ofrecido en este artículo, puede asistir a nuestros cursos prácticos de Excel o puede solicitarlos in company:</span><br />
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3F7DHSbcZlDMBqIOWVF457slsjm0kX5RooYsTa38GkoXFbFNUj10g5Kh1mf5iNDVwPiO9phwJ1HEgvKgGn-0uqtMxwqrhiedhsq4lUcWUKHQ5v2LI2Zn1qAKvabVtZnRPYO1E7sZyfuIT/s1600/Firma+Blog+Excel.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3F7DHSbcZlDMBqIOWVF457slsjm0kX5RooYsTa38GkoXFbFNUj10g5Kh1mf5iNDVwPiO9phwJ1HEgvKgGn-0uqtMxwqrhiedhsq4lUcWUKHQ5v2LI2Zn1qAKvabVtZnRPYO1E7sZyfuIT/s1600/Firma+Blog+Excel.PNG" /></a></div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<br />
<br />
<br />
<br />
<br />
<br />Témpora Consultoreshttp://www.blogger.com/profile/09000632812723289961noreply@blogger.com3tag:blogger.com,1999:blog-8253525174733356300.post-76790074443263166852016-12-01T09:21:00.000+01:002017-12-13T21:08:04.713+01:00Cómo optimizar la velocidad de nuestras macros en Excel (5 de 5)Finalizamos con este 5º post nuestra serie de artículos "Cómo optimizar la velocidad de nuestras macros en Excel". Lo dedicaremos a 3 trucos que optimizarán nuestro código hacia otras formas más óptimas de VBA, ya sea por la velocidad o por la claridad en el código.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi99PLvKp7KufTO1u_xKPY0cjaKsYJtC2OB4k82PsM6emaQi-naMMFtlWdB_TlLmYJj88XWtYdMqFpcfOzEj9_ALNJT6gzCwDh_YLyU8Lg3kqHMwI1WSHnB39Uu2WSmM_QMqkYIqhUf7gGJ/s1600/Serie+optimiz+macros+5.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="199" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi99PLvKp7KufTO1u_xKPY0cjaKsYJtC2OB4k82PsM6emaQi-naMMFtlWdB_TlLmYJj88XWtYdMqFpcfOzEj9_ALNJT6gzCwDh_YLyU8Lg3kqHMwI1WSHnB39Uu2WSmM_QMqkYIqhUf7gGJ/s320/Serie+optimiz+macros+5.PNG" width="320" /></a></div>
<br />
<br />
<br />
<span style="font-size: large;"><span style="color: #e69138;"><b>1) Seleccionar la última celda que contiene datos en un rango</b></span></span><br />
<br />
El título de este primer punto hace referencia a una necesidad con la que nos solemos encontrar cuando escribimos código VBA. Esta necesidad la podemos cubrir de varias formas... pero unas son más óptimas que otras en cuanto a velocidad.<br />
<br />
Por ejemplo, el siguiente código cumple con la función de encontrar la última celda que contiene datos en una lista que comienza en A1:<br />
<br />
<i><span style="color: blue;">Sub UltimaCeldaConDatosConBucleFor()<br /> Range("A1").Select<br /> For i = 1 To 10<br /> If Range("A1").Offset(i, 0) <> vbNullString Then<br /> ActiveCell.Offset(1, 0).Select<br /> End If<br /> Next i<br />End Sub</span></i><br />
Eso sí, tenemos que tener en cuenta que la celda que quedará seleccionada será la primera cuya celda siguiente esté vacía. Por lo tanto, si la lista tiene huecos, debemos contar con ellos:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieRPBA9DQqRpQa56rz1CIRKLZV7muzgbwsi3odUEjg5mZ9Z0ElVMkPnKjCQ9F3N4pDSfB225gT0qdqTkjbrG6RzSoJZrAjT0ndLivKKYvf3G-fSJK294EXzq2wfsIZaD2fZOt1_95G0-Eh/s1600/Huecos+en+lista.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieRPBA9DQqRpQa56rz1CIRKLZV7muzgbwsi3odUEjg5mZ9Z0ElVMkPnKjCQ9F3N4pDSfB225gT0qdqTkjbrG6RzSoJZrAjT0ndLivKKYvf3G-fSJK294EXzq2wfsIZaD2fZOt1_95G0-Eh/s1600/Huecos+en+lista.PNG" /></a></div>
<br />
<br />
También es posible seleccionar la última celda con datos de una lista mediante el código:<br />
<br />
<span style="color: blue;"><i>Sub UltimaCeldaConDatosConBucleDoUntil()<br /> Range("A1").Select<br /> Do Until ActiveCell.Offset(1, 0) = vbNullString<br /> ActiveCell.Offset(1, 0).Select<br /> Loop<br />End Sub</i></span><br />
<br />
Pero el código más óptimo en cuanto a velocidad y longitud es el siguiente:<br />
<br />
<span style="color: blue;"><i>Sub UltimaCeldaConDatosDesdeArriba()<br /> Range("A1:A10").End(xlDown).Select<br />End Sub</i></span><br />
<br />
Como vemos, utilizamos en este caso la propiedad End con el argumento xlDown (equivalente a utilizar con el teclado CTRL + MAYUS + Flecha abajo).<br />
<br />
Con un código similar podemos salvar el inconveniente de los "huecos" en la lista. El truco está en empezar a "buscar" desde abajo (desde la última celda de Excel de una columna determinada):<br />
<br />
<i><span style="color: blue;">Sub PrimeraCeldaConDatosDesdeAbajo()<br /><span style="color: #6aa84f;">'AVERIGUAMOS CUANTAS FILAS TIENE EXCEL (SEGÚN VERSIÓN, TENDRÁ MÁS O MENOS) </span></span></i><br />
<i><span style="color: blue;"> UltimaFila = Range("A:A").Count</span></i><i><span style="color: blue;"><i><span style="color: blue;"><span style="color: #6aa84f;">'DESDE LA ÚLTIMA CELDA, BUSCAMOS LA PRIMERA CELDA QUE TIENE DATOS EN LA LISTA</span></span></i></span></i><br />
<i><span style="color: blue;"><i><span style="color: blue;"><span style="color: #6aa84f;"> </span></span></i> Range("A" & UltimaFila).End(xlUp).Select<br />End Sub</span></i><br />
<br />
<span style="font-size: large;"><span style="color: #e69138;"><b>2) Utilizar la versión "solo texto" de algunas funciones </b></span></span><br />
<br />
Cuando queremos utilizar alguna de las funciones nativas que tiene VBA, si lo vamos a hacer exclusivamente con textos, podemos utilizar la versión óptima de la función.<br />
<br />
Las siguientes funciones...<br />
<br />
<i><span style="color: blue;">Left(), Mid(), Right(), Chr(), ChrW(), UCase(), LCase(), LTrim(), RTrim(), Trim(),
Space(), String(), Format(), Hex(), Oct(),Str(), Error</span></i><br />
<br />
... son más lentas que sus correspondientes versiones que sirven para utilizar exclusivamente con textos....<br />
<br />
<i><span style="color: blue;">Left$(), Mid</span></i><i><span style="color: blue;"><i><span style="color: blue;">$</span></i>(), Right</span></i><i><span style="color: blue;"><i><span style="color: blue;">$</span></i>(), Chr</span></i><i><span style="color: blue;"><i><span style="color: blue;">$</span></i>(), ChrW</span></i><i><span style="color: blue;"><i><span style="color: blue;">$</span></i>(), UCase</span></i><i><span style="color: blue;"><i><span style="color: blue;">$</span></i>(), LCase</span></i><i><span style="color: blue;"><i><span style="color: blue;">$</span></i>(), LTrim</span></i><i><span style="color: blue;"><i><span style="color: blue;">$</span></i>(), RTrim</span></i><i><span style="color: blue;"><i><span style="color: blue;">$</span></i>(), Trim</span></i><i><span style="color: blue;"><i><span style="color: blue;">$</span></i>(),
Space</span></i><i><span style="color: blue;"><i><span style="color: blue;">$</span></i>(), String</span></i><i><span style="color: blue;"><i><span style="color: blue;">$</span></i>(), Format</span></i><i><span style="color: blue;"><i><span style="color: blue;">$</span></i>(), Hex</span></i><i><span style="color: blue;"><i><span style="color: blue;">$</span></i>(), Oct</span></i><i><span style="color: blue;"><i><span style="color: blue;">$</span></i>(),Str</span></i><i><span style="color: blue;"><i><span style="color: blue;">$</span></i>(), Error</span></i><i><span style="color: blue;">$</span></i><br />
<br />
<span style="font-size: large;"><span style="color: #e69138;"><b>3) Definir constantes cuando hay textos o valores que se repiten mucho </b></span></span><br />
<br />
Si hay textos o valores en nuestro código que se repiten mucho a lo largo de nuetro poryecto, podemos incluirlas en una constante. Las constantes almacenan valores que, como su nombre indica, permanecen iguales durante la ejecución de una aplicación. <span class="sentence SentenceHover" data-guid="a615d27cffacd4b4345daef3447bc210" data-source="To create a constant that is available throughout an application, declare it using the <strong>Public</strong> keyword in the declarations section of the class." id="mt11">A diferencia de las variables, cuando se declara una constante se le debe asignar su valor en ese momento:</span><br />
<br />
<div style="text-align: center;">
<span class="sentence SentenceHover" data-guid="a615d27cffacd4b4345daef3447bc210" data-source="To create a constant that is available throughout an application, declare it using the <strong>Public</strong> keyword in the declarations section of the class." id="mt11"><span style="color: blue;">Const </span><i>NombreDeConstante</i> <span style="color: blue;">As</span> <i><span style="color: blue;">TipoDato</span></i> = <i>ValorConstante</i></span></div>
<br />
<span class="sentence SentenceHover" data-guid="a615d27cffacd4b4345daef3447bc210" data-source="To create a constant that is available throughout an application, declare it using the <strong>Public</strong> keyword in the declarations section of the class." id="mt11">Por ejemplo, si sabemos que en nuestro código se repite constantemente dentro de los cuadros de mensaje (MsgBox) la frase: "¿Está seguro de continuar con el proceso?. Si no lo está, haga clic en el botón 'Cancelar'. Si desea continuar, haga clic en 'Aceptar'." , podemos incluirla en una variable mucho más corta que será gestionada mucho mejor por el usuario y por VBA:</span><br />
<span class="sentence SentenceHover" data-guid="a615d27cffacd4b4345daef3447bc210" data-source="To create a constant that is available throughout an application, declare it using the <strong>Public</strong> keyword in the declarations section of the class." id="mt11"><br /></span>
<span class="sentence SentenceHover" data-guid="a615d27cffacd4b4345daef3447bc210" data-source="To create a constant that is available throughout an application, declare it using the <strong>Public</strong> keyword in the declarations section of the class." id="mt11"><i><span style="color: blue;">Sub FuncionesDeTextoOptimas()<br /> Const PreguntaAceptar As String = "¿Está seguro de continuar con el proceso?. Si no lo está, haga clic en el botón 'Cancelar'. Si desea continuar, haga clic en 'Aceptar'."""<br /> MsgBox PreguntaAceptar<br />End Sub</span></i></span><br />
Si sabemos que vamos a necesitar la constante en varios procedimientos del módulo, debemos declararla al principio del módulo, en la zona de declaraciones:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzJiOCPvbsxTSMBDSFYRGKbJBUjTRvpMfrNax-gQHS3u9TmJpposjAtRcZOwPc-rfpvKMHa9vpXv0DTSzsq3DkbKYBtKL1fQDSwJqlPJzfIC2Nps8rk-C73S1-IofmZbN19VQ36imAxcaB/s1600/Constante+m%25C3%25B3dulo.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzJiOCPvbsxTSMBDSFYRGKbJBUjTRvpMfrNax-gQHS3u9TmJpposjAtRcZOwPc-rfpvKMHa9vpXv0DTSzsq3DkbKYBtKL1fQDSwJqlPJzfIC2Nps8rk-C73S1-IofmZbN19VQ36imAxcaB/s1600/Constante+m%25C3%25B3dulo.PNG" /></a></div>
<br />
Si sabemos que vamos a necesitar la constante en cualquier módulo de la aplicación, debemos declararla al principio de algún módulo, en la zona de
declaraciones y con la palabra <b>Public </b>delante:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmpbAnbNGkaRFlVOqSZS2jw5D4S92LuoPaExU_06jsfb3nPf-NPvbNxIXjlsjm9mcdkOt_D4156OxkcYUGpi_pVl-TicMBFVVxkZCN-n31YAMLZnM80siZ6MRdvHVuR_29MGxCGaFJS-Cu/s1600/Constante+p%25C3%25BAblica.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmpbAnbNGkaRFlVOqSZS2jw5D4S92LuoPaExU_06jsfb3nPf-NPvbNxIXjlsjm9mcdkOt_D4156OxkcYUGpi_pVl-TicMBFVVxkZCN-n31YAMLZnM80siZ6MRdvHVuR_29MGxCGaFJS-Cu/s1600/Constante+p%25C3%25BAblica.PNG" /></a></div>
<br />
<br />
José Manuel Pomares Medrano <br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9KQqil0ZjeEhnSJppa1gv6cCqaS4_Jlfk1qvaG8K70bJy6ZqHG6XIWzi7sWyC4EGBHgfWkhpjCUlAWaFtYMddo5w-AjylCcn8AWIvacdSJbPx1u50Zlc7A0B7FUyiaYX6HrOZt3gJedN/s1600/Cabecera+t%25C3%25A9mporaExcel.PNG" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="96" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9KQqil0ZjeEhnSJppa1gv6cCqaS4_Jlfk1qvaG8K70bJy6ZqHG6XIWzi7sWyC4EGBHgfWkhpjCUlAWaFtYMddo5w-AjylCcn8AWIvacdSJbPx1u50Zlc7A0B7FUyiaYX6HrOZt3gJedN/s640/Cabecera+t%25C3%25A9mporaExcel.PNG" width="640" /></a><br />
<br />
<br />
<br />
<br />Témpora Consultoreshttp://www.blogger.com/profile/09000632812723289961noreply@blogger.com2tag:blogger.com,1999:blog-8253525174733356300.post-8941639011678533352016-07-06T20:43:00.000+02:002016-07-06T20:43:18.667+02:00Cómo optimizar la velocidad de nuestras macros en Excel (4 de 5)Es turno del 4º capítulo de esta serie de 5 que iniciamos hace unos meses. En este caso traemos otras 3 formas de optimizar nuestras macros, sobre todo en cuanto a eficiencia en velocidad.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgz-3T4gZiUOmE8kYILZutAXrsEFauOVH-2QQdGSkgHCA3CksjWZx43-XYaP2vWIN14cIpZ3Kcjm9j5yrDQM9fswm91MUcGcVSChaD5lwoV9Cazm3a0BLQAy0LPhKA8dbwyUfj8Ysv998i3/s1600/Serie+optimiz+macros.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgz-3T4gZiUOmE8kYILZutAXrsEFauOVH-2QQdGSkgHCA3CksjWZx43-XYaP2vWIN14cIpZ3Kcjm9j5yrDQM9fswm91MUcGcVSChaD5lwoV9Cazm3a0BLQAy0LPhKA8dbwyUfj8Ysv998i3/s1600/Serie+optimiz+macros.PNG" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<span style="font-size: large;"><span style="color: #e69138;"><b>1) Rellenar rangos de celdas con datos modificados de otros rangos (utilización de bucles, arrays y variables de valor)</b></span></span><br />
<br />
Imaginemos que necesitamos rellenar las celdas de un rango determinado con los datos que hay en otro rango. Esto, en principio, se podría hacer simplemente copiando y pegando el rango original en el rango destino. Incluso se podría hacer (si no necesitamos que se copien los formatos y los rangos tienen el mismo tamaño) igualando los rangos con el simple código RangoDestino = RangoOrigen. Ya vimos estos ejemplos en el punto nº 3 del post <i><a href="http://temporaexcel.blogspot.com.es/2016/02/OptimizarVelocidadMacrosVBA2.html" target="_blank">Cómo optimizar la velocidad de nuestras macros en Excel (4 de 5)</a></i>.<br />
<br />
Pero... ¿qué ocurre si los datos que deben ser rellenados en el rango destino tienen que sufrir alguna operación matemática o cualquier otra modificación, respecto de los datos originales?. En este caso, todo cambia, puesto que la modificación de cada dato dentro de un rango es un problema a solucionar y se puede hacer de varias formas. Algunas más rápidas que otras.<br />
<br />
Veamos (con varias formas de resolución) un ejemplo de utilidad que copia los valores contenidos en un rango (desde H1 hasta H5000) y los traslada a otro rango (desde A1 hasta A5000) ... pero... cambiando cada valor multiplicándolo por si mismo<br />
<br />
<b>MEDIANTE UN BUCLE FOR... NEXT</b><br />
<span style="color: blue;"><i><br /> Sub RellenarConBucle()<br /><span style="color: #38761d;">'<span style="color: #6aa84f;">SE DECLARA LA VARIABLE DEL CONTADOR</span></span><br /> Dim i As Integer<br /><span style="color: #6aa84f;">'SE COLOCA EN CADA CELDA-DESTINO EL VALOR DE CADA CELDA-ORIGEN, SEGÚN LA OPERACIÓN DESEADA</span><br /> For i = 1 To 5000<br /> CeldaActualOrigen = Cells(i, 8)<br /> Cells(i, 1) = CeldaActualOrigen * CeldaActualOrigen<br /> Next i<br />End Sub</i><span style="color: black;"></span></span><span style="color: blue;"><br /><i><br /> </i></span>Este método es el más lento de todos, puesto que el tiempo de ejecución (en mi ordenador) es de unos 0,300 sg. El motivo de este lapso de tiempo relativamente largo es que el código actúa directamente sobre celdas de Excel durante el bucle... y no sobre variables en memoria RAM. La ventaja es que hay menos código y más sencillo.<br />
<br />
<b>MEDIANTE UN ARRAY (arreglo o matriz)</b><br />
<br />
<span style="color: blue;"><i>Sub RellenarConArray()<br /><span style="color: #6aa84f;">'SE DECLARA LA VARIABLE PARA EL BUCLE, UN ARRAY Y LA VARIABLE OBJETO</span><br /> Dim i As Integer<br /> Dim miArray(5000, 1)<br /> Dim miRango As Range<br /> Set miRango = Range("H1").CurrentRegion<br /><span style="color: #6aa84f;">'SE COLOCAN, UNO A UNO Y SEGÚN LA OPERACIÓN DESEADA, LOS DATOS DEL RANGO EN UN ARRAY</span><br /> For i = 1 To 5000<br /> miArray(i, 1) = miRango(i, 1) <br /> miArray(i, 1) = miArray(i, 1) * miArray(i, 1)<br /> Next i<br /><span style="color: #6aa84f;">'SE TRASPASAN DE UNA VEZ LOS DATOS DESDE EL ARRAY HASTA EL RANGO</span><br /> Range("A1:A5000") = miArray<br />End Sub</i></span><br />
<br />
Este método es el más formal y para algunos casos podría tener alguna ventaja, pero su ejecución es de unos 0,023 sg. (unas 13 veces más rápido que el método del bucle).<br />
<br />
<b>MEDIANTE UNA VARIABLE DE VALOR</b><br />
<br />
<span style="color: blue;"><i>Sub RellenarConVariable()<br /><span style="color: #6aa84f;">'SE DECLARAN LAS VARIABLES DEL CONTADOR Y RANGO ORIGEN (ESTA ÚLTIMA COMO VARIABLE DE VALOR, TIPO VARIANT)</span><br /> Dim i As Long<br /> Dim miRango As Variant<br /><span style="color: #6aa84f;">'SE COLOCAN DE UNA VEZ LOS DATOS DEL RANGO-ORIGEN EN UNA VARIABLE DE VALOR (NO DE OBJETO)</span><br /> miRango = Range("H1:H5000").Value<br /><span style="color: #6aa84f;">'SE MODIFICAN, SEGÚN LA OPERACIÓN DESEADA, LOS DATOS QUE ESTÁN EN LA VARIABLE DE VALOR (ESTARÁN EN FORMA MATRICIAL)</span><br /> For i = 1 To 5000<br /> miRango(i, 1) = miRango(i, 1) * miRango(i, 1)<br /> Next i <br /><span style="color: #6aa84f;">'SE TRASPASAN DE UNA VEZ LOS DATOS DESDE LA VARIABLE HASTA EL RANGO-DESTINO</span><br /> Range("A1:A5000") = miRango<br />End Sub</i></span><br />
<br />
Este
método es el más rápido (unos 0,012 sg. en mi equipo. Es decir, casi 30 veces más rápido que el sistema que utiliza solo un bucle For Next y prácticamente el doble de rápido que el sistema que aboga por utilizar un Array), puesto que no se manejan Arrays ni dimensiones y en su lugar lo que se hace es:<br />
<ol>
<li><b>Colocar en una variable de valor</b> declarada como tipo "Variant" (NO una variable de objeto) el rango de datos original. El resultado es que los datos se colocan en forma de matriz en la variable y el resultado es similar a la utilización de un Array (se puede hacer referencia a ellos mediante el índice de cada dimensión).</li>
<li> Una vez que los datos están en una variable (en la RAM) su modificación es mucho más rápida, por lo tanto es en este momento cuando nos disponemos a <b>multiplicar por si mismo cada valor</b>.</li>
<li><b>Se traspasan, de una vez, todos los datos de la variable-matriz hasta el rango-destino</b>.</li>
</ol>
<span style="font-size: large;"><span style="color: #e69138;"><b>2) Utilizar, cuando sea posible, el bucle For Each...Next para recorrer colecciones, en vez del bucle For...Next</b></span></span><br />
<br />
El siguiente bucle (que rellena con un texto un rango de 500.000 celdas)...<br />
<br />
<br />
<span style="color: blue;"><i>Sub RecorrerConIndice()</i></span><span style="color: blue;"><i><span style="color: blue;"><i><span style="color: #6aa84f;">'SE DECLARAN LAS VARIABLES DEL ÍNDICE Y DEL RANGO A RELLENAR</span></i></span></i></span><br />
<span style="color: blue;"><i><span style="color: blue;"><i><span style="color: #6aa84f;"> </span></i></span> Dim i As Double<br /> Dim miRango As Range<br /> Set miRango = Range("A1:A500000") </i></span><span style="color: blue;"><i><span style="color: blue;"><i><span style="color: blue;"><i><span style="color: #6aa84f;">'SE RECORRE EL RANGO MEDIANTE EL ÍNDICE DE CADA CELDA</span></i></span></i></span></i></span><br />
<span style="color: blue;"><i><span style="color: blue;"><i><span style="color: blue;"><i><span style="color: #6aa84f;"> </span></i></span></i></span> For i = 1 To miRango.Count<br /> miRango(i, 1) = "Prueba 1"<br /> Next i<br />End Sub</i></span><br />
<br />
... es casi un 4% más lento que el siguiente bucle...<br />
<br />
<br />
<span style="color: blue;"><i>Sub RecorrerColeccion()</i></span><span style="color: blue;"><i><span style="color: blue;"><i><span style="color: blue;"><i><span style="color: #6aa84f;">'SE DECLARAN LA VARIABLES PARA CADA CELDA DEL RANGO Y LA VARIABLE DEL RANGO A RELLENAR</span></i></span></i></span></i></span><br />
<span style="color: blue;"><i><span style="color: blue;"><i><span style="color: blue;"><i><span style="color: #6aa84f;"> </span></i></span></i></span> Dim miCelda As Range<br /> Dim miRango As Range<br /> Set miRango = Range("A1:A500000")</i></span><span style="color: blue;"><i><span style="color: blue;"><i><span style="color: blue;"><i><span style="color: blue;"><i><span style="color: #6aa84f;">'SE RECORRE LA COLECCIÓN DE CELDA EN CELDA ASIGNANDO VALOR</span></i></span></i></span></i></span></i></span><br />
<span style="color: blue;"><i><span style="color: blue;"><i><span style="color: blue;"><i><span style="color: blue;"><i><span style="color: #6aa84f;"> </span></i></span></i></span></i></span> For Each miCelda In miRango<br /> miCelda = "Prueba 2"<br /> Next miCelda<br />End Sub</i></span><br />
<br />
<span style="font-size: large;"><span style="color: #e69138;"><b>3) Utilizar el método SpecialCells para hacer referencia a celdas visibles o con una característica y/o valor concreto</b></span></span><br />
<br />
Supongamos que tenemos un rango de filas filtradas (o con algunas de ellas ocultas) y necesitamos actuar sola y precisamente sobre las celdas que quedan visibles. Aunque este objetivo se puede conseguir con otros métodos distintos a la utilización del método SpecialCells (por ejemplo con Tablas de Excel), no siempre tendremos los datos en un formato así. Además, el método SpecialCells realiza otras acciones con otras constantes que presentaremos al final.<br />
<br />
Veamos esta macro:<br />
<br />
<i><span style="color: blue;">Sub SpecialCells()<br /><span style="color: #6aa84f;">'SE DECLARA UNA VARIABLE PARA EL RANGO A TRATAR</span><br /> Dim miRango As Range<br /> Set miRango = Range("A1:A10")<br /><span style="color: #6aa84f;">'SE COPIA AL PORTAPAPELES EL CONTENIDO DE LAS CELDAS QUE ESTÁN VISIBLES (EN UN RANGO FILTRADO, POR EJEMPLO)</span><br /> miRango.SpecialCells(xlCellTypeVisible).Copy<br /><span style="color: #6aa84f;">'SE PEGA EL CONTENIDO DE LAS CELDAS COPIADAS EN OTRO RANGO</span><br /> Range("C15").PasteSpecial xlPasteValues<br />End Sub</span></i><br />
<br />
Como ya se ha comentado, lo que realiza este procedimiento es copiar el contenido de las celdas que quedan visibles en un rango que tiene aplicado un filtro (o que tiene algunas filas ocultas) y después pega el contenido en otro rango. Esto se hace gracias al método:<br />
<br />
<div style="text-align: center;">
<span style="color: blue;"><i>expresión.<b>SpecialCells(Type, Value)</b></i></span></div>
<br />
... que nos devuelve un rango de celdas que tienen unas características y un tipo valor determinado. Como podemos intuir, los argumentos Type y Valor (el segundo es opcional) sirven para determinar la característica de celda que queremos y el tipo de valor que contiene, respectivamente. Las constantes de las que disponemos para el primer argumento son:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiecwcVqU6CRES13iMnXRut2e6uTqXtJRh3SL7w8ihUKbpOBY80iWLqUpZEuJZwcrCWM6-19p27y2ojuiG11j5nNmKtCkxvqeium0oCwsJt9Czj-Utvq453XF99_PCJCSG-GRBmRpqbAbT1/s1600/Constantes+para+SpecialCells.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiecwcVqU6CRES13iMnXRut2e6uTqXtJRh3SL7w8ihUKbpOBY80iWLqUpZEuJZwcrCWM6-19p27y2ojuiG11j5nNmKtCkxvqeium0oCwsJt9Czj-Utvq453XF99_PCJCSG-GRBmRpqbAbT1/s1600/Constantes+para+SpecialCells.PNG" /></a></div>
<br />
Solo cuando el primer argumento es <b>xlCellTypeConstants</b> o <b>xlCellTypeFormulas </b>podemos utilizar el segundo argumento, que tiene las siguientes posibilidades:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiq5pVtfshGLG5GVITt6jSkGdJFaB1S_GvUoc41GLNWDiWn9TDFSHjfnXcmM7fjrdbdIFNdfvmoOs7cjqru_5SnLQV3pohKwkmt5tW89G5S3SWxxtl_heVCqOjvY94YR1cEDU7JFS39y-le/s1600/Constantes+para+SpecialCells%252C+arg+2.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiq5pVtfshGLG5GVITt6jSkGdJFaB1S_GvUoc41GLNWDiWn9TDFSHjfnXcmM7fjrdbdIFNdfvmoOs7cjqru_5SnLQV3pohKwkmt5tW89G5S3SWxxtl_heVCqOjvY94YR1cEDU7JFS39y-le/s1600/Constantes+para+SpecialCells%252C+arg+2.PNG" /></a></div>
<br />
Por ejemplo, si necesitamos seleccionar todas las celdas de un rango que contengan valores de texto, podemos utilizar la siguiente macro:<br />
<br />
<span style="color: blue;"><i>Sub SpecialCells()<br /><span style="color: #6aa84f;">'SE DECLARA UNA VARIABLE PARA EL RANGO A TRATAR</span><br /> Dim miRango As Range<br /> Set miRango = Range("A1:A10")<br /><span style="color: #6aa84f;">'SE SELECCIONAN LAS CELDAS QUE TIENEN CONSTANTES (NO FÓRMULAS) Y CUYO VALOR ES DE TIPO TEXTO (xlTextValues)</span><br /> miRango.SpecialCells(xlCellTypeConstants, </i></span><span style="color: blue;"><i><i>xlTextValues</i>).Select<br />End Sub</i></span><br />
<br />
<br />
<br />
José Manuel Pomares Medrano <br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9KQqil0ZjeEhnSJppa1gv6cCqaS4_Jlfk1qvaG8K70bJy6ZqHG6XIWzi7sWyC4EGBHgfWkhpjCUlAWaFtYMddo5w-AjylCcn8AWIvacdSJbPx1u50Zlc7A0B7FUyiaYX6HrOZt3gJedN/s1600/Cabecera+t%25C3%25A9mporaExcel.PNG" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="96" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9KQqil0ZjeEhnSJppa1gv6cCqaS4_Jlfk1qvaG8K70bJy6ZqHG6XIWzi7sWyC4EGBHgfWkhpjCUlAWaFtYMddo5w-AjylCcn8AWIvacdSJbPx1u50Zlc7A0B7FUyiaYX6HrOZt3gJedN/s640/Cabecera+t%25C3%25A9mporaExcel.PNG" width="640" /></a><br />
<br />
<br />
<br />
<br />Témpora Consultoreshttp://www.blogger.com/profile/09000632812723289961noreply@blogger.com1tag:blogger.com,1999:blog-8253525174733356300.post-2072366156212968772016-04-08T19:23:00.001+02:002016-07-05T08:48:20.267+02:00Cómo optimizar la velocidad de nuestras macros en Excel (3 de 5)Vamos a abordar en este tercer artículo de la serie, otras 5 formas de optimizar nuestras macros en VBA para Excel.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLt83Zaos3vk68d-Hi1h4f6c0HvROopwVX4U3CrB7DiWHuOSCSb_3O_JlNBdQIr1r-b-h1vTLbLvoaOqwDqGLV8F7IdK9Hzo49Ah-E9pQ2mZuMuFalFrcGbRKqQj-rgEuvA706jPQoTiSC/s1600/Optimizaci%25C3%25B3n+macros+3+de+5.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="232" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLt83Zaos3vk68d-Hi1h4f6c0HvROopwVX4U3CrB7DiWHuOSCSb_3O_JlNBdQIr1r-b-h1vTLbLvoaOqwDqGLV8F7IdK9Hzo49Ah-E9pQ2mZuMuFalFrcGbRKqQj-rgEuvA706jPQoTiSC/s320/Optimizaci%25C3%25B3n+macros+3+de+5.PNG" width="320" /> </a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="color: #e69138;"><b><span style="font-size: large;">1) Declarar variables con tipos de datos concretos</span></b></span></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
Al declarar una variable, debemos declarar las variables asignándole el <a href="https://msdn.microsoft.com/es-es/library/47zceaw7%28v=vs.80%29.aspx" target="_blank">tipo de dato que contendrá</a>. Es decir, si necesito una variable llamada i para un bucle, debo asignarle un tipo de dato a la declaración. En este caso sería una variable con números enteros:</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<i>Sub Variable_i ()</i></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="color: blue;"><i> Dim i As Integer</i></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="color: blue;"><i> For i = 1 To 5</i></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="color: blue;"><i> ... mi código...</i></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="color: blue;"><i> Next</i></span></div>
<div class="separator" style="clear: both; text-align: left;">
<i>End Sub</i></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
Si hubiéramos declarado la variable tan solo escribiendo <span style="color: blue;"><i>Dim i</i></span> o si no la hemos declarado, VBA asignará por defecto el tipo de variable <b>Variant</b>, para la que será necesario reservar y utilizar 16 bytes en la memoria de nuestro equipo. En su lugar, agregando <span style="color: blue;"><i>As Integer</i></span> a la declaración, se reservarán y utilizarán tan solo 2 bytes en memoria. Esta utilización, repetida muchas veces (como puede ser el caso de un bucle) hará que nuestra macro pueda ejecutarse más lenta o más rápida, dependiendo de los bytes reservados en memoria para la variable.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
Cuidado con declarar varias variables a la vez de esta forma...</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="color: blue;"><i>Dim i, f, t, x as Integer</i></span></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
... puesto que así, solo hemos asignado un <a href="https://msdn.microsoft.com/es-es/library/47zceaw7%28v=vs.80%29.aspx" target="_blank">tipo de datos</a> a la última variable de la lista. Para aprender más sobre cómo declarar variables, haga clic en el siguiente enlace: <a href="http://Declaración de variables en VBA para Excel (I)" target="_blank"><i>Declaración de variables en VBA para Excel (I)</i></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="color: #e69138;"><b><span style="font-size: large;">2) Utilizar "Select Case" en vez de "IF... Then..."</span></b></span></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
En vez del código:<br />
<br />
<i>Sub MiMacro ()</i><br />
<span style="color: blue;"><i> IF Range("A1") = 100 Then</i></span><br />
<span style="color: blue;"><i> Range("A2") = 200</i></span><br />
<span style="color: blue;"><i> End IF</i></span><br />
<span style="color: blue;"><i> IF Range("A1") = 200 Then</i></span><br />
<span style="color: blue;"><i> Range("A3") = 400</i></span><br />
<span style="color: blue;"><i> End IF</i></span><span style="color: blue;"><i> </i></span><br />
<span style="color: blue;"><i> IF Range("A1") = 300 Then</i></span><br />
<span style="color: blue;"><i> Range("A4") = 600</i></span><br />
<span style="color: blue;"><i> End IF</i></span><br />
<div class="separator" style="clear: both; text-align: left;">
<i>End Sub</i></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Es más óptimo utilizar el siguiente código:</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<i>Sub MiMacro ()</i><br />
<span style="color: blue;"><i> Dim MiValor As Integer</i></span><br />
<span style="color: blue;"><i> MiValor = Range("A1")</i></span><br />
<br />
<span style="color: blue;"><i> Select Case MiValor</i></span><br />
<span style="color: blue;"><i> Case 100</i></span><br />
<span style="color: blue;"><i> Range("A2") = 200</i></span><br />
<span style="color: blue;"><i> Case 200</i></span><br />
<span style="color: blue;"><i> Range("A3") = 400</i></span><br />
<span style="color: blue;"><i> Case 300</i></span><br />
<span style="color: blue;"><i> Range("A4") = 600</i></span><br />
<span style="color: blue;"><i> End Select </i></span><br />
<div class="separator" style="clear: both; text-align: left;">
<i>End Sub</i></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
El motivo es que la instrucción Select Case solo evalúa hasta el caso en el que es verdadero y después termina de evaluar. Sin embargo, con IF...THEN... , VBA debe entrar a valorar todas las expresiones. No debería hacer falta decir que es conveniente situar en primera posición la opción que tiene más posibilidades de cumplirse.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="color: #e69138;"><b><span style="font-size: large;">3) Limpiar las variables objeto al final de cada macro</span></b></span></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
Si utilizamos variables de tipo objeto es conveniente "limpiarlas" al final de la macro asignándoles un valor "Nothing". Esto se puede ver aquí:<br />
<br />
<i>Sub MiMacro ()</i><br />
<span style="color: blue;"><i> Dim MiRango As Range</i></span><br />
<span style="color: blue;"><i> Set MiRango = Range("A1")</i></span><br />
<span style="color: blue;"><i> ..... mi código ....</i></span><br />
<span style="color: blue;"><i> Set MiRango = Nothing</i></span><br />
<span style="color: blue;"></span><br />
<i>End Sub</i><br />
<br />
<div class="separator" style="clear: both; text-align: left;">
<span style="color: #e69138;"><b><span style="font-size: large;">4) Escribir macros que están relacionadas entre si, en el mismo módulo</span></b></span></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div style="text-align: justify;">
Si tenemos una macro que nos remite a otra y esta a su vez remite a otra.... sería conveniente que todas las macros que van a ejecutarse de forma sucesiva estuvieran en el mismo módulo. De esta forma, VBA no tendría que cargar en memoria varios módulos durante la ejecución.<br />
<br />
De hecho, también es conveniente que durante el trabajo cotidiano con nuestra aplicación en Excel no permanezcan abiertos módulos del editor de Visual Basic. Por supuesto, también es mejor que ni siquiera el editor de VBA esté abierto.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="color: #e69138;"><b><span style="font-size: large;">5) Precalcular con variables todo lo que esté dentro de un bucle</span></b></span></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
En vez del siguiente código...<br />
<br />
<i>Sub MiMacro ()</i><br />
<br />
<div class="separator" style="clear: both; text-align: left;">
<span style="color: blue;"><i> Dim i As Integer</i></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="color: blue;"><i> For i = 1 To 5000</i></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="color: blue;"><i> Cells (i,3) = Range("B7")*459</i></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="color: blue;"><i> Next</i></span></div>
<span style="color: blue;"></span><br />
<i>End Sub</i><br />
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
...utilizar el siguiente código...<br />
<br />
<i>Sub MiMacro ()</i><br />
<div class="separator" style="clear: both; text-align: left;">
<span style="color: blue;"><i> Dim i As Integer</i></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="color: blue;"><i> Dim Operacion as Double</i></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="color: blue;"><i> Operacion = </i></span><span style="color: blue;"><i><span style="color: blue;"><i>Range("B7")*459</i></span> </i></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="color: blue;"><i> For i = 1 To 5000</i></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="color: blue;"><i> Cells (i,3) = Operacion</i></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="color: blue;"><i> Next</i></span></div>
<span style="color: blue;"></span><br />
<i>End Sub</i><br />
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
... en el que podemos ver que la operación que hay dentro del bucle la calculamos con anterioridad y depositamos el valor en una variable (Operacion). De esta forma, VBA no tiene que realizar 5000 veces el cálculo, sino que solo tiene que transferir el resultado de la memoria a la celda Cells(i,3).</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
José Manuel Pomares Medrano <br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9KQqil0ZjeEhnSJppa1gv6cCqaS4_Jlfk1qvaG8K70bJy6ZqHG6XIWzi7sWyC4EGBHgfWkhpjCUlAWaFtYMddo5w-AjylCcn8AWIvacdSJbPx1u50Zlc7A0B7FUyiaYX6HrOZt3gJedN/s1600/Cabecera+t%25C3%25A9mporaExcel.PNG" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="96" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9KQqil0ZjeEhnSJppa1gv6cCqaS4_Jlfk1qvaG8K70bJy6ZqHG6XIWzi7sWyC4EGBHgfWkhpjCUlAWaFtYMddo5w-AjylCcn8AWIvacdSJbPx1u50Zlc7A0B7FUyiaYX6HrOZt3gJedN/s640/Cabecera+t%25C3%25A9mporaExcel.PNG" width="640" /></a><br />
<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<br />
<br />
<br />
<br />
<br />Témpora Consultoreshttp://www.blogger.com/profile/09000632812723289961noreply@blogger.com2tag:blogger.com,1999:blog-8253525174733356300.post-77433324167182348802016-02-04T12:13:00.000+01:002016-02-04T12:13:05.849+01:00Cómo optimizar la velocidad de nuestras macros en Excel (2 de 5)Contiuamos con nuestra serie de artículos dedicados a la optimización de código Visual Basic for Applications para Excel. En este caso, serán también cinco formas que hacer que nuestras macros funcionen de forma mas fluida y óptima.<br />
<br />
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHwzaN_cHYrjey3KSwEqUTgHbU8FKtBvnDn3B35JozZxVKudx-RsMOP0qLN9qwIJ97VEw1oNLfcbTsWL0681jR8YLXQfJEjKqrvb5T69KkuSMk2IUXgL4bP7P-xp8dwqO_I-33QkgNgvvQ/s1600/Optimizar+VBA+2.PNG" imageanchor="1"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHwzaN_cHYrjey3KSwEqUTgHbU8FKtBvnDn3B35JozZxVKudx-RsMOP0qLN9qwIJ97VEw1oNLfcbTsWL0681jR8YLXQfJEjKqrvb5T69KkuSMk2IUXgL4bP7P-xp8dwqO_I-33QkgNgvvQ/s1600/Optimizar+VBA+2.PNG" /></a></div>
<br />
<div style="text-align: justify;">
<span style="font-size: large;"><span style="color: #e69138;"><b>1) Utilizar bloques With para acortar el código</b></span></span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Si partimos del primer artículo de esta serie, en él podemos ver que al final habíamos reunido una buena serie de líneas de código que optimizaban la velocidad de ejecución de una macro. Esas líneas eran:<br />
<br />
<div style="text-align: justify;">
<i>Sub MiMacro ()</i></div>
<div style="text-align: justify;">
<span style="color: blue;"><i><span style="color: blue;"><i> Application.ScreenUpdating = False</i></span></i></span></div>
<div style="text-align: justify;">
<span style="color: blue;"><i><span style="color: blue;"></span> Application.Calculation = xlCalculationManual</i></span><br />
<span style="color: blue;"><i> Application.EnableEvents = False </i></span></div>
<div style="text-align: justify;">
<span style="color: blue;"><i> Application.DisplayStatusBar = False</i></span><span style="color: blue;"><i><br /></i></span></div>
<div style="text-align: justify;">
<i> ....mi código</i></div>
<i><span style="color: blue;"><i> Application.Calculation = xlCalculationAutomatic</i></span></i><br />
<i><span style="color: blue;"><i> Application.EnableEvents = True</i></span></i><br />
<i><span style="color: blue;"><i> ActiveSheet.DsiplayPageBreaks = False </i></span></i><br />
<i>End sub ()</i><br />
<i></i><br />
Podemos apreciar que de las siete líneas de código (siete, sin contar los protocolos de entrada y salida), seis comienzan con <i><span style="color: blue;">Application</span></i> . Esto quiere decir que si utilizamos una forma de resumir todas esas palabras que se repiten, Visual Basic no tendrá que leerlas todas y se ejecutará más rápido. Esta forma es la siguiente:<br />
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
<div style="text-align: justify;">
<i>Sub MiMacro ()</i></div>
<div style="text-align: justify;">
<span style="color: blue;"><i><span style="color: blue;"><i> </i></span></i></span><br />
<span style="color: blue;"><i><span style="color: blue;"><i> With Application</i></span></i></span><br />
<span style="color: blue;"><i><span style="color: blue;"><i> .ScreenUpdating = False</i></span></i></span></div>
<div style="text-align: justify;">
<span style="color: blue;"><i><span style="color: blue;"></span> .Calculation = xlCalculationManual</i></span><br />
<span style="color: blue;"><i> .EnableEvents = False </i></span></div>
<div style="text-align: justify;">
<span style="color: blue;"><i> .DisplayStatusBar = False</i></span><span style="color: blue;"><i><br /></i></span></div>
<div style="text-align: justify;">
<i> ....mi código</i></div>
<i><span style="color: blue;"><i> .Calculation = xlCalculationAutomatic</i></span></i><br />
<i><span style="color: blue;"><i> .EnableEvents = True</i></span></i><br />
<i><span style="color: blue;"><i> ActiveSheet.DsiplayPageBreaks = False </i></span></i><br />
<i><span style="color: blue;"> En With</span></i><br />
<i><span style="color: blue;"></span></i><br />
<i>End sub ()</i></div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
<br />
Donde podemos ver la estructura <span style="color: blue;"><i>With.... End</i></span> <i><span style="color: blue;">With </span></i>que simplifica el código en buena medida. Imaginémonos un código donde lo que se repite es una cadena tan larga como...<br />
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
<i><span style="color: blue;">Worksheets("Sheet1").Rectangles(1).Interior.Color = RGB(255, 255, 255)</span></i></div>
<div style="text-align: justify;">
<i><span style="color: blue;">Worksheets("Sheet1").Rectangles(1).Interior.Pattern = xlChecker</span></i></div>
<div style="text-align: justify;">
<i><span style="color: blue;">Worksheets("Sheet1").Rectangles(1).Interior.PatternColorIndex = 5</span></i></div>
<div style="text-align: justify;">
<br />
En este último caso, la optimización podría ser aún más espectacular:<br />
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
<i><span style="color: blue;">With Worksheets("Sheet1").Rectangles(1).Interior</span></i></div>
<div style="text-align: justify;">
<i><span style="color: blue;"> .Color = RGB(255, 255, 255)</span></i></div>
<div style="text-align: justify;">
<i><span style="color: blue;"> .Pattern = xlChecker</span></i></div>
<div style="text-align: justify;">
<i><span style="color: blue;"> .PatternColorIndex = 5</span></i></div>
<div style="text-align: justify;">
<i><span style="color: blue;">End With</span></i><br />
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
<div style="text-align: justify;">
<span style="font-size: large;"><span style="color: #e69138;"><b>2) Evitar utilizar la propiedad Select (típica de la grabadora de macros)</b></span></span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
La grabadora de macros es una herramienta estupenda para iniciarnos con el código VBA, pero hay que entender que es imposible que genere un código excelente, sobre todo si pensamos en que se limita a traducir acciones de la interfaz de usuario a código.<br />
<br />
Una de las señas de identidad de la grabadora de macros es la utilización de la propiedad Select aplicada normalmente a rangos de celdas y otros objetos. Esta utilización repetida de Select es debidio a que la grabadora reproduce nuestras acciones.... y como usuarios, no tenemos más remedio que seleccionar todo para poder hacer algo con la celda, gráfico, imagen, etc. que queramos. Lo que ocurre es que, seleccionar todo aquello sobre lo que queremos actuar no es algo obligatorio en VBA. Al contrario, por medio de código podemos aplicar métodos y propiedades sobre los objetos sin la necesidad de seleccionarlos previamente.<br />
<br />
El siguiente es un trozo de código típico de una macro grabada:<br />
<br />
<i><span style="color: blue;"> Range("B2").Select<br /> Selection.ClearContents</span></i><br />
<br />
...que podría optimizarse así:<br />
<br />
<i><span style="color: blue;"> Range("B2").</span></i><i><span style="color: blue;"><i><span style="color: blue;">ClearContent</span></i> </span></i><br />
<br />
Hemos ahorrado una línea de código evitando decir a VBA que seleccione la celda y que después, con la selección efectuada, limpie (borre) el contenido. Esta situación la encontraremos en muchos casos. Siempre que veamos una combinación <i><span style="color: blue;">Select </span></i>y después <i><span style="color: blue;">Selection</span></i>, podemos hacer esta "reducción".<br />
<br />
<div style="text-align: justify;">
<span style="font-size: large;"><span style="color: #e69138;"><b>3) Copiar-pegar adecuadamente y cuando sea estrictamente necesario</b></span></span></div>
<div style="text-align: justify;">
<br /></div>
Algunas de las acciones más utilizadas en macros son, precisamente, "Copiar" y "Pegar". Sobre ellas tenemos que hacer una distinción:</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
<b>1) SI NO NECESITAMOS COPIAR Y PEGAR LOS FORMATOS Y FÓRMULAS DE LAS CELDAS:</b></div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
En este caso, en vez de copiar y pegar valores, es más óptimo utilizar simplemente el signo igual. Por ejemplo, en vez de esta macro grabada...</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<i><span style="color: blue;">Range("B2").Selec</span></i></div>
<div style="text-align: justify;">
<i><span style="color: blue;">Selection.Copy</span></i></div>
<div style="text-align: justify;">
<i><span style="color: blue;">Range("D2").Select</span></i></div>
<div style="text-align: justify;">
<i><span style="color: blue;">ActiveSheet.Paste</span></i></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
...utilizaremos este código escrito...</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: blue;"><i>Range("D2") = Range("B2")</i></span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Como podemos imaginar, este código es muuuuucho más rápido (lo notaremos especialmente si esta operación se repite muchas veces en nuestra macro) y también mucho más claro a la hora de entenderlo.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
También es posible copiar y pegar rangos que tengan más de una celda. Por ejemplo:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: blue;"><i>Range("D2:E4") = Range("B2:C4")</i></span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Aunque... POR SUPUESTO... los rangos deben tener un mismo tamaño.</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
<span style="color: #cc0000;"><b>Tampoco debemos olvidar que si el copiado - pegado se debe hacer en hojas distintas a la que está activa en el momento de ejecutar el código debemos hacer una referencia más completa a ellas</b>.<b> Por ejemplo:</b></span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: blue;"><i>Sheets("Hoja2").Range("D2:E4") = Sheets("Hoja3").Range("B2:C4")</i></span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
El código de arriba se podría ejecutar teniendo activa cualquier hoja en el momento de ejecución del código.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<div style="text-align: justify;">
<b>2) SI NECESITAMOS COPIAR Y PEGAR LOS FORMATOS Y FÓRMULAS DE LAS CELDAS:</b></div>
<div style="text-align: justify;">
</div>
En vez del código...</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<div style="text-align: justify;">
<i><span style="color: blue;">Range("B2").Selec</span></i></div>
<div style="text-align: justify;">
<i><span style="color: blue;">Selection.Copy</span></i></div>
<div style="text-align: justify;">
<i><span style="color: blue;">Range("D2").Select</span></i></div>
<div style="text-align: justify;">
<i><span style="color: blue;">ActiveSheet.Paste</span></i></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
...utilizaremos este código escrito...</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: blue;"><i>Range("B2").Copy Destination:= Range("D2")</i></span></div>
<div style="text-align: justify;">
<br /></div>
</div>
<div style="text-align: justify;">
Como podemos ver, además de prescindir de la propiedad Select, también hemos aprovechado el parámetro <span style="color: blue;"><i>Destination</i></span> del método <span style="color: blue;"><i>Copy</i></span>. Con una sola línea tenemos un código equivalente a cuatro líneas. Eso sí, con esta forma de proceder no tenemos más remedio que pegar todo lo copiado y no podemos discriminar solo valores (por ejemplo).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
También debemos recordar que si el rango de origen o el rango de destino no están en la hoja que VBA considera como activa en el momento de ejecutar el código, debemos hacer una referencia más completa a los rangos. Por ejemplo:</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
<span style="color: blue;"><i>Sheets("Hoja2").</i></span><span style="color: blue;"><i>Range("B2").Copy Destination:= </i></span><span style="color: blue;"><i><span style="color: blue;"><i>Sheets("Hoja3").</i></span>Range("D2")</i></span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<div style="text-align: justify;">
<span style="font-size: large;"><span style="color: #e69138;"><b>4) Limpiar el portapapeles después de copiar</b></span></span></div>
<div style="text-align: justify;">
<br /></div>
Si finalmente hemos tenido que utilizar el método <i><span style="color: blue;">Copy </span></i>en nuestro código, sería conveniete que al final de la macro insertáramos la línea...</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<i><span style="color: blue;">Application.CutCopyMode = False</span></i></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
... de esta forma limpiamos la memoria RAM ocupada por lo que se ha copiado. Con los métodos explicado en el apartado 3) de este artículo, Excel no utiliza el portapapeles como lugar de intercambio o "buffer", pero si hemos utilizado Copy, sí es conveniente vaciar el portapapeles, puesto que sí se ha utilizado.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<div style="text-align: justify;">
<span style="font-size: large;"><span style="color: #e69138;"><b>5) Utilizar la función Lenb( ) o la constante vbNullString en vez de "" cuando nos referimos a celdas vacías</b></span></span></div>
<div style="text-align: justify;">
<br /></div>
Cuando queremos provocar que una celda esté vacía. Lo podemos hacer mediante...</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
<i><span style="color: blue;">Range("B2") = ""</span></i> (por ejemplo)</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
... pero hay una forma más rápida:</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
<span style="color: blue;"><i>Range("B2") = vbNullString</i></span> </div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
El motivo es que VBA procesa más rápido su constante <i><span style="color: blue;">vbNullString </span></i>que la cadena vacía <span style="color: blue;">""</span>. En otras palabras, con <i><span style="color: blue;">vbNullString</span></i>, VBA considera que no existe ninguna cadena de texto, sin embargo, con "" considera que existe una cadena de texto vacía (no es lo mismo tener una caja vacía... que no tener ni siquiera la caja).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b>PARA COMPROBACIONES DE CADENAS VACÍAS: </b></div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
Otro ejemplo de referencia a cadenas vacías es cuando queremos comparar. Por ejemplo, el siguiente código...</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<i><span style="color: blue;">If Range("B2") <> ""</span></i></div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
...es más lento que ....</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: blue;"><i>If LenB(Range("B2")) <> 0</i></span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
El motivo es que VBA procesa y compara más rápidamente solo el resultado de la función LenB (LARGOB) que toda la cadena de texto que pudiera haber en Range("B2").</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
La función de VBA LenB (LARGOB como equivalente en funciones Excel) es la "hermana" de la función de VBA Len (LARGO como equivalente en funciones Excel). Mientras que la primera devuelve el número de caracteres de una cadena de texto, la segunda devuelve el número de bytes usados para representarlos.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Por cierto, es más rápida la comparación <> (distinto que...) que la comparación > (mayor que...). El motivo es que en el primer caso, para VBA es más sencillo detectar si un valor es sencillamente distinto que otro, que calcular si un valor es mayor o menor que otro. Por lo tanto, si no es imprescindible comparar el valor, sino que es suficiente con saber si es o no igual, utilizaremos la comparación <>.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br />
<br />
José Manuel Pomares Medrano <br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9KQqil0ZjeEhnSJppa1gv6cCqaS4_Jlfk1qvaG8K70bJy6ZqHG6XIWzi7sWyC4EGBHgfWkhpjCUlAWaFtYMddo5w-AjylCcn8AWIvacdSJbPx1u50Zlc7A0B7FUyiaYX6HrOZt3gJedN/s1600/Cabecera+t%25C3%25A9mporaExcel.PNG" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="96" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9KQqil0ZjeEhnSJppa1gv6cCqaS4_Jlfk1qvaG8K70bJy6ZqHG6XIWzi7sWyC4EGBHgfWkhpjCUlAWaFtYMddo5w-AjylCcn8AWIvacdSJbPx1u50Zlc7A0B7FUyiaYX6HrOZt3gJedN/s640/Cabecera+t%25C3%25A9mporaExcel.PNG" width="640" /></a><br />
<br />
<br />
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
</div>
Témpora Consultoreshttp://www.blogger.com/profile/09000632812723289961noreply@blogger.com3tag:blogger.com,1999:blog-8253525174733356300.post-49338144380117799732016-02-01T08:55:00.000+01:002016-07-05T08:43:05.021+02:00Cómo optimizar la velocidad de nuestras macros de Excel (1 de 5)<div style="text-align: justify;">
Comenzamos con este artículo una serie de cinco que tendrán como hilo conductor un tema muy demandado por usuarios intermedios y avanzados de Excel. Se trata de la optimización de la velocidad de ejecución de nuestras macros (código VBA).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfFLlyLqIGI2kG0JKZqSig6fAFzmSc0FegZ2qHlx8R4pWhLxcf7mxMxT8iIn6flUucpSCwUjU4fSzEddIaNyNQ_A9pLzj2gJBjxh6i03NwJRQm4WUe6Ro580I21QQFI638dBIzsM2RW4eI/s1600/Excel+r%25C3%25A1pido.PNG" imageanchor="1"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfFLlyLqIGI2kG0JKZqSig6fAFzmSc0FegZ2qHlx8R4pWhLxcf7mxMxT8iIn6flUucpSCwUjU4fSzEddIaNyNQ_A9pLzj2gJBjxh6i03NwJRQm4WUe6Ro580I21QQFI638dBIzsM2RW4eI/s1600/Excel+r%25C3%25A1pido.PNG" /></a> </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Cuando un usuario ya ha aprendido a grabar sus propias macros, se enfrenta a un siguiente paso: personalizar el código de las macros grabadas. Esta personalización irá encaminada en un principio a acomodar los procesos que ejecuta el código a las necesidades del propio usuario, añadiendo líneas de código que ejecuten acciones que normalmente no es capaz de grabar la grabadora de macros de Excel.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Pero también hay otra vertiente relativa a la personalización de macros: la optimización de la velocidad. Es decir, intentar que el código se ejecute de forma más rápida. Esto no tendrá mucha importancia cuando nuestras macros son muy sencillas y cortas, pero si en ellas se reflejan multitud de procesos que requieren muchos recursos de nuestro ordenador (activar hojas distintas, copiar y pegar mútiples veces, abrir y cerrar otros libros, realizar cálculos complejos, aplicar muchos formatos, etc...), será necesario aplicar algo de ingenio y conocimiento de ciertas técnicas para que el código se ejecute de forma fluida y rápida.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Comenzamos en esta primera entrega de una serie de varios artículos, con cinco trucos o técnicas que harán nuestro código más rápido:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-size: large;"><span style="color: #e69138;"><b>1) Evitar que todas las acciones de la macro se vayan representando en la pantalla</b></span></span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Si dejamos que cada acción que ejecuta una macro se refleje en la pantalla, nuestro equipo tendrá que aplicar muchos recursos y tiempo al "refresco" o actualización de la pantalla. Para evitar esto utilizaremos la propiedad <span style="color: blue;"><i>ScreenUpdating</i></span> aplicada al objeto <span style="color: blue;"><i>Application </i></span>(Excel) en una línea de código al principio de nuestro código:</div>
<div style="text-align: justify;">
<span style="color: blue;"></span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Por ejemplo:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<i>Sub MiMacro ()</i></div>
<div style="text-align: justify;">
<span style="color: blue;"><i> Application.ScreenUpdating = False</i></span></div>
<div style="text-align: justify;">
<i> ....mi código</i></div>
<div style="text-align: justify;">
<i>End sub () </i><span style="color: blue;"><i><br /></i></span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Con ello, establecemos la capacidad de Excel de refresco de panatalla como "False" (No). Además, hay que decir que no es necesario volver a cambiar en la última línea de la macro el valor a "True" (Sí), debido a que automáticamente lo hace Visual Basic cuando la macro (o suscesión de macros que se llaman entre sí) termina o cuando se produce un error.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-size: large;"><span style="color: #e69138;"><b>2) Evitar que Excel recalcule todas las celdas de nuestro libro cuando no es necesario</b></span></span></div>
<div style="text-align: justify;">
<br /></div>
En muchas macros (la mayoría), se ejecutan acciones que provocan que Excel haga un recálculo de todas las fórmulas que pudiera haber en el archivo (siempre que Excel esté configurado con "Cálculo automático"). Entre otras, esas acciones que provocan un recálculos son:<br />
<ul>
<li>Introducir o actualizar un dato (ya sea desde teclado o desde código VBA) en cualquier celda</li>
<li>Eliminar o insertar filas</li>
<li>Filtrar datos</li>
<li>Hacer doble clic entre los títulos de una hoja para autoajustar el ancho o alto de columnas o filas, respectivamente</li>
<li>Agregar, editar o eliminar un nombre de rango definido</li>
<li>Cambiar el nombre de una hoja</li>
<li>Cambiar la posición de una hoja (moverla)</li>
<li>Ocultar o mostrar filas (no se produce recálculo si ocultamos o mostramos columnas) </li>
</ul>
<div style="text-align: justify;">
También hay que decir que Excel realiza un recálculo inteligente. Es decir, solo recalcula las celdas con fórmulas que están afectadas por un cambio.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Para conseguir que nuestras macros no provoquen recálculos sin necesidad de que los haya, debemos insertar al principio de nuestro código la línea: <span style="color: blue;"><i>Application.Calculation = xlCalculationManual</i></span></div>
<div style="text-align: justify;">
En estas condiciones, hasta que no volvamos a escribir una línea que reestablezca la situación original (<span style="color: blue;"><i>Application.Calculation = xlCalculationAutomatic</i></span>), Excel no recalcula nada. Por ejemplo, quedaría así:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<i>Sub MiMacro ()</i></div>
<div style="text-align: justify;">
<span style="color: blue;"><i><span style="color: blue;"><i> Application.ScreenUpdating = False</i></span></i></span></div>
<div style="text-align: justify;">
<span style="color: blue;"><i><span style="color: blue;"></span> Application.Calculation = xlCalculationManual</i></span></div>
<div style="text-align: justify;">
<i> ....mi código</i></div>
<i><span style="color: blue;"><i> Application.Calculation = xlCalculationAutomatic</i></span></i><br />
<i>End sub ()</i><br />
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Es posible que entre la línea de código que establece el recálculo a manual y la línea de código que lo devuelve a automático necesitemos que Excel calcule una celda o rango de celdas determinado. En este caso, podemos forzar un recálculo particular de ese rango, evitando que el resto del libro se actualice. Para lograr esto tenemos dos métodos:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: blue;"><i>Range.Calculate</i></span></div>
<div style="text-align: justify;">
Este método calcula el rango al que hacemos referencia y también calcula todas las celdas con fórmulas que dependan de dicho rango (aunque no pertenezcan a él).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: blue;"><i>Range.CalculateRowMajorOrder</i></span></div>
<div style="text-align: justify;">
Este método calcula el rango al que hacemos referencia, pero no calcula ninguna celda más (por lo tanto, es más rápido).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Es importante resaltar que es MUY CONVENIENTE escribir la última línea de código mencionada anteiormente (<span style="color: blue;"><i>Application.Calculation = xlCalculationAutomatic</i></span>), puesto que si no lo hiciéramos, nuestro Excel permanecerá sin recálculo automático aunque cerremos el archivo y abramos una nueva sesión con otro.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-size: large;"><span style="color: #e69138;"><b>3) Evitar que se ejecute el código VBA que hemos escrito en eventos de hoja o de libro</b></span></span></div>
<div style="text-align: justify;">
<br /></div>
Es posible que tengamos código dentro de algunas hojas de nuestro libro o incluso en el propio libro de Excel (ThisWorkbook). Este código responderá a ciertos eventos (según hayamos elegido al escribirlo).<br />
<br />
Por ejemplo, si en una hoja tenemos un determinado código que se ejecuta con el evento Worksheet_Change (cuando ocurre un cambio en alguna celda), quiere decir que el código entrará en funcionamiento cuando modifiquemos alguna celda de esa hoja... pero claro, cuando la modifiquemos introduciendo un dato "manualmente" Y TAMBIÉN si una macro genera dicha modificación.<br />
<br />
Por lo tanto, se nos presenta la necesidad de evitar que el código asociado a eventos se ejecute cuando no es necesario. Para ello, podemos utilizar la propiedad <span style="color: blue;"><i>EnableEvents </i></span>del objeto <span style="color: blue;"><i>Application</i></span>. El código podría quedar así:<br />
<br />
<div style="text-align: justify;">
<i>Sub MiMacro ()</i></div>
<div style="text-align: justify;">
<span style="color: blue;"><i><span style="color: blue;"><i> Application.ScreenUpdating = False</i></span></i></span></div>
<div style="text-align: justify;">
<span style="color: blue;"><i><span style="color: blue;"></span> Application.Calculation = xlCalculationManual</i></span><br />
<span style="color: blue;"><i> Application.EnableEvents = False </i></span></div>
<div style="text-align: justify;">
<i> ....mi código</i></div>
<i><span style="color: blue;"><i> Application.Calculation = xlCalculationAutomatic</i></span></i><br />
<i><span style="color: blue;"><i> Application.EnableEvents = True</i></span></i><br />
<i>End sub ()</i><br />
<br />
Vemos cómo la propiedad EnableEvents tiene dos valores posibles (False y True) debiendo utilizar un línea de código al final de la macro para reestablecer el valor a "True", puesto que si no se hiciera, los eventos dejarían de funcionar hasta que Excel se reiniciara.<br />
<br />
<div style="text-align: justify;">
<span style="font-size: large;"><span style="color: #e69138;"><b>4) Evitar que Excel muestre los saltos de página después de algunas acciones</b></span></span></div>
<div style="text-align: justify;">
<br /></div>
Excel se ve obligado a mostrar los saltos de página después de las siguientes acciones:<br />
<br />
<ul>
<li>Al mostrar una vista previa de impresión</li>
<li>Al hacer mostrar el cuadro de diálogo "Configuración de página"</li>
<li>Al modificar mediante VBA cualquier configuración de página</li>
<li>Al configurar la opción "Mostrar saltos de página" desde Archivo/Opciones/Avanzadas</li>
</ul>
Para evitar que se muestren estas líneas discontinuas que representan a los saltos o cambios de página en una hipotética impresión, podemos hacerlo manualmente, pero también mediante una macro insertando la línea de código: <span style="color: blue;"><i>ActiveSheet.DisplayPageBreaks = False</i></span> al final de la macro (para que "borre" los saltos de página. Un ejemplo sería este:<br />
<br />
<div style="text-align: justify;">
<i>Sub MiMacro ()</i></div>
<div style="text-align: justify;">
<span style="color: blue;"><i><span style="color: blue;"><i> Application.ScreenUpdating = False</i></span></i></span></div>
<div style="text-align: justify;">
<span style="color: blue;"><i><span style="color: blue;"></span> Application.Calculation = xlCalculationManual</i></span><br />
<span style="color: blue;"><i> Application.EnableEvents = False </i></span></div>
<div style="text-align: justify;">
<i> ....mi código</i></div>
<i><span style="color: blue;"><i> Application.Calculation = xlCalculationAutomatic</i></span></i><br />
<i><span style="color: blue;"><i> Application.EnableEvents = True</i></span></i><br />
<i><span style="color: blue;"><i> ActiveSheet.DisplayPageBreaks = False </i></span></i><br />
<i>End sub ()</i><br />
<br />
Después de que esta macro se ejecute <i><span style="color: blue;"><i>ActiveSheet.DisplayPageBreaks = False</i></span></i> deja de estar vigente y automáticamente, Excel mostrará los saltos de página la próxima vez que ocurra uno de los hechos que provocan la visualización de estas líneas. Por lo tanto, para evitar verlos, nuevamente, deberemos desactivarlos manualmente o bien con una nueva macro.<br />
<br />
<div style="text-align: justify;">
<span style="font-size: large;"><span style="color: #e69138;"><b>5) Evitar que Excel muestre la barra de estado</b></span></span></div>
<div style="text-align: justify;">
<br /></div>
Tanto la anterior medida (<i><span style="color: blue;"><i>ActiveSheet.DisplayPageBreaks = False</i></span></i>) como la que vamos a comentar ahora, no son de las que más ahorro de tiempo generan, pero como dice el refrán: "Toda piedra hace pared".<br />
<br />
Se trata de ocultar la barra de estado de Excel si no va a ser necesaria. Simplemente se hace introduciendo esta línea de código: <span style="color: blue;"><i>Application.DisplayStatusBar = False</i></span><span style="color: blue;"><i><br /></i></span><br />
<br />
Quedaría así:<br />
<br />
<div style="text-align: justify;">
<i>Sub MiMacro ()</i></div>
<div style="text-align: justify;">
<span style="color: blue;"><i><span style="color: blue;"><i> Application.ScreenUpdating = False</i></span></i></span></div>
<div style="text-align: justify;">
<span style="color: blue;"><i><span style="color: blue;"></span> Application.Calculation = xlCalculationManual</i></span><br />
<span style="color: blue;"><i> Application.EnableEvents = False </i></span></div>
<div style="text-align: justify;">
<span style="color: blue;"><i> Application.DisplayStatusBar = False</i></span><span style="color: blue;"><i><br /></i></span></div>
<div style="text-align: justify;">
<i> ....mi código</i></div>
<i><span style="color: blue;"><i> Application.Calculation = xlCalculationAutomatic</i></span></i><br />
<i><span style="color: blue;"><i> Application.EnableEvents = True</i></span></i><br />
<i><span style="color: blue;"><i> ActiveSheet.DisplayPageBreaks = False </i></span></i><br />
<i>End sub ()</i><br />
<br />
La barra de estado permanecerá oculta para la sesión de Excel que tenemos abierta (para cualquier libro que haya abierto), pero volverá a visualizarse al reiniciar una sesión de Excel. Esto quiere decir que si deseamos que siempre esté oculta cuando un determinado libro esté abierto, debemos escribir el código en el evento "Open" (estableciendo el valor como "False".<br />
<br />
José Manuel Pomares Medrano <br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9KQqil0ZjeEhnSJppa1gv6cCqaS4_Jlfk1qvaG8K70bJy6ZqHG6XIWzi7sWyC4EGBHgfWkhpjCUlAWaFtYMddo5w-AjylCcn8AWIvacdSJbPx1u50Zlc7A0B7FUyiaYX6HrOZt3gJedN/s1600/Cabecera+t%25C3%25A9mporaExcel.PNG" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="96" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9KQqil0ZjeEhnSJppa1gv6cCqaS4_Jlfk1qvaG8K70bJy6ZqHG6XIWzi7sWyC4EGBHgfWkhpjCUlAWaFtYMddo5w-AjylCcn8AWIvacdSJbPx1u50Zlc7A0B7FUyiaYX6HrOZt3gJedN/s640/Cabecera+t%25C3%25A9mporaExcel.PNG" width="640" /></a><br />
<br />
<br />
<br />Témpora Consultoreshttp://www.blogger.com/profile/09000632812723289961noreply@blogger.com2tag:blogger.com,1999:blog-8253525174733356300.post-56998898010631681302016-01-16T20:35:00.000+01:002017-08-15T12:01:19.658+02:00Cómo personalizar el menú del botón derecho de Excel con VBA<div style="text-align: justify;">
Todos conocemos (y además usamos con mayor o menor frecuencia) el menú contextual que obtenemos al hacer clic en una celda de Excel. En la versión 2016, tiene el siguiente aspecto:</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhH3ystU4hlrJbt30FPCs4wgTLuzVFH1in58Vqz4eOjWPb3aG_18crbjE96Cm9PsWLSAhHz27fPUXeyrsxtXUyd1xnDL6BIY2Qm3_tooiTlgkrJ53xZtNtlkjXklBZpGYgMT5MHOTyHsbsg/s1600/Men%25C3%25BA+contextual+Excel.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhH3ystU4hlrJbt30FPCs4wgTLuzVFH1in58Vqz4eOjWPb3aG_18crbjE96Cm9PsWLSAhHz27fPUXeyrsxtXUyd1xnDL6BIY2Qm3_tooiTlgkrJ53xZtNtlkjXklBZpGYgMT5MHOTyHsbsg/s1600/Men%25C3%25BA+contextual+Excel.PNG" /></a></div>
<br />
<br />
<div style="text-align: justify;">
En este post, vamos a plantearnos modificar este menú contextual cuando trabajamos con una hoja de cálculo determinada. Concretamente queremos que, dentro de esa hoja, al hacer clic con el botón derecho en las celdas A1 y C1, el menú contextual lo veamos personalizado con unos comandos que nosotros decidiremos y que, evidentemente, ejecutarán las acciones que nosotros queramos.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Para ello, no tenemos más remedio que escribir algo de código Visual Basic for Applications. Así pues, lo primero que debemos hacer es presionar la combinación de teclas ALT+F11 para que se ejecute el editor de VBA.</div>
<br />
<span style="color: #e69138;"><b><span style="font-size: large;">Escribimos el código que permite que, al hacer clic con el botón derecho del ratón, el menú contextual esté personalizado </span></b></span><br />
<br />
<div style="text-align: justify;">
Una vez dentro del editor de VBA, nos fijaremos en la parte superior izquierda del editor, en el panel "Explorador de proyectos". Ahí podremos ver los archivos (proyectos para VBA) de Excel que están abiertos y debemos identificar el nuestro y expandir el árbol de objetos si es que no lo está.</div>
<br />
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrW4yPVyWmUmkDi3I6NnBoctUuvmazg9zqWtKXszrBwYlx82BfM338lNCNbqCQG2TVsFyXRW4L3inJ8cHwhmMimPVWjsx-bPItwbxWz55ofLlyuu2MuIp7DFuf2KAnbHTlC4r-kAidSpVE/s1600/Explorador+de+proyectos.PNG" imageanchor="1"></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIar9uwWTBRypQ6SrQ5uUPbiujCIotUfOrqX-gpx-KieCzj1uNHScR56PfDIwS6wycmwW4URx_nmX4fZ4JDeBm3UXPzmXefwpapBDFAASepGUKBq78uMUqKksO9ITd-ZAmCcbzV0ksVs0o/s1600/Explorador+de+proyectos.PNG" imageanchor="1"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIar9uwWTBRypQ6SrQ5uUPbiujCIotUfOrqX-gpx-KieCzj1uNHScR56PfDIwS6wycmwW4URx_nmX4fZ4JDeBm3UXPzmXefwpapBDFAASepGUKBq78uMUqKksO9ITd-ZAmCcbzV0ksVs0o/s400/Explorador+de+proyectos.PNG" /></a></div>
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrW4yPVyWmUmkDi3I6NnBoctUuvmazg9zqWtKXszrBwYlx82BfM338lNCNbqCQG2TVsFyXRW4L3inJ8cHwhmMimPVWjsx-bPItwbxWz55ofLlyuu2MuIp7DFuf2KAnbHTlC4r-kAidSpVE/s1600/Explorador+de+proyectos.PNG" imageanchor="1"></a><br /></div>
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrW4yPVyWmUmkDi3I6NnBoctUuvmazg9zqWtKXszrBwYlx82BfM338lNCNbqCQG2TVsFyXRW4L3inJ8cHwhmMimPVWjsx-bPItwbxWz55ofLlyuu2MuIp7DFuf2KAnbHTlC4r-kAidSpVE/s1600/Explorador+de+proyectos.PNG" imageanchor="1"></a></div>
<br />
<div style="text-align: justify;">
Como vemos arriba, dentro de "Microsoft Excel Objetos" vemos la <b>Hoja1</b> que será nuestra hoja objetivo a la hora de personalizar el menú contextual del botón derecho. Debemos hacer doble clic en nuestra hoja objetivo y veremos como a la derecha tenemos una ventana en blanco. En ella debemos realizar dos selecciones en la parte superior: </div>
<br />
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhrrK3H69DsbSWQmiEIAtyGk7IlgXcXbLbmvM0g6w2uPjz46GDWKrWtGx5Xr2ckS4TD7vJsnVfjJF4PI-x6WcZkXwKE-jqvY_-LYcAJ2Bxd4EhH2Soub35klzsCOXEfr4eP1rhgsojHAZn/s1600/Seleccionar+DoubleClic.PNG" imageanchor="1"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhrrK3H69DsbSWQmiEIAtyGk7IlgXcXbLbmvM0g6w2uPjz46GDWKrWtGx5Xr2ckS4TD7vJsnVfjJF4PI-x6WcZkXwKE-jqvY_-LYcAJ2Bxd4EhH2Soub35klzsCOXEfr4eP1rhgsojHAZn/s1600/Seleccionar+DoubleClic.PNG" /></a></div>
<br />
Podemos borrar todo lo que vemos en la parte inferior de la imagen anterior:<br />
<br />
<i><span style="color: blue;">Private Sub</span> WorkSheet_SelectionChange(<span style="color: blue;">ByVal</span> Target <span style="color: blue;">As</span> Range)</i><br />
<br />
<i><span style="color: blue;">End Sub</span></i><br />
<br />
<div style="text-align: justify;">
... y para que nuestro código se ejecute al de hacer clic con el botón derecho del ratón, entre la línea que comienza por <span style="color: blue;">Private Sub </span>WorkSheet_BeforeRightClick (<span style="color: blue;">ByVal</span> Target.... y la línea <span style="color: blue;">End Sub</span> escribimos el siguiente código:</div>
<br />
<br />
<i><span style="color: blue;">Dim </span>NuevoComando <span style="color: blue;">As </span>CommandBarButton<br /> <br /> <span style="color: #38761d;">'LIMPIAMOS TODOS LOS COMANDOS Y REESTABLECEMOS ORIGINALES DE EXCEL</span><br /><br /> <span style="color: blue;">For Each</span> AntiguoComando <span style="color: blue;">In </span>CommandBars("cell").Controls<br /> AntiguoComando.Delete<br /> <span style="color: blue;">Next</span><br /> <br /> CommandBars("Cell").Reset<br /><br /> <span style="color: #38761d;">'AÑADIMOS NUESTRO PRIMER COMANDO</span><br /><br /> <span style="color: blue;">If Not</span> Intersect(Target, Range("A1")) <span style="color: blue;">Is Nothing Then</span><br /> <span style="color: blue;"> Set </span>NuevoComando = CommandBars("cell").Controls.Add<br /> <span style="color: blue;">With</span> NuevoComando<br /> .Caption = "</i><i><i>EJECUTAR MIMACRO1</i>"<br /> .OnAction = "MiMacro1"<br /> .BeginGroup = <span style="color: blue;">True</span><br /> <span style="color: blue;"> End With</span><br /> <span style="color: blue;">End If</span><br /> <br /> <span style="color: #38761d;">'AÑADIMOS NUESTRO SEGUNDO COMANDO</span><br /><br /> <span style="color: blue;">If Not</span> Intersect(Target, Range("C1")) <span style="color: blue;">Is Nothing Then</span><br /> <span style="color: blue;">Set </span>NuevoComando = CommandBars("cell").Controls.Add<br /> <span style="color: blue;">With </span>NuevoComando<br /> .Caption = "EJECUTAR MIMACRO</i><i><i>2</i>"<br /> .OnAction = "MiMacro2"<br /> .BeginGroup = <span style="color: blue;">True</span><br /> <span style="color: blue;"> End With</span><br /> <span style="color: blue;">End If</span></i><br />
<br />
<div style="text-align: justify;">
Lo que hemos hecho hasta ahora es:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
1) Activar la ventana de código y seleccionar el evento "BeforeRightClick" para escribir dentro de los protocolos de entrada y de salida que aparecen automáticamente (Sub.... y End Sub).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
2) En el código que escribimos:</div>
<ul style="text-align: justify;">
<li>Escribir el código que declara una variable objeto (NuevoComando) que representará el nuevo comando que se añade posteriormente</li>
</ul>
<ul style="text-align: justify;">
<li>Escribir la parte de código que limpia todos los comandos que pudiera haber anteriormente y volver a poner los comandos que por defecto muestra Excel al hacer clic con el botón derecho</li>
</ul>
<ul style="text-align: justify;">
<li>Escribir la parte de código que agrega nuestro primer comando. Este código se inserta dentro de una estructura If... End If que condiciona la agregación del comando al hecho de hacer clic en el "Target" que hemos definido (A1)</li>
</ul>
<ul style="text-align: justify;">
<li>Escribir la parte de código que agrega nuestro segundo comando. Este
código se inserta dentro de una estructura If... End If que condiciona
la agregación del comando al hecho de hacer clic en el "Target" que
hemos definido (C1)</li>
</ul>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
A estas alturas, lo que ocurre es que, si dejáramos esto así, al salir de nuestra hoja o al salir de Excel, esta configuración del menú del botón derecho del ratón permanecería para siempre en nuestro Excel... y eso no es, muy probablemente, lo que queremos. Así pues, debemos volver a seleccionar en la parte superior lo siguiente (teniendo el cursor en la línea siguiente a la última del código que hay hasta el momento. Es decir, después de "<span style="color: blue;">End Sub</span>"):</div>
<br />
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwuMPGOX47PdiRUMAT6G4eCIt8lZJDt2Y4S91R2JdaTnCcmdHw9Uq5ykY8abaOWfsfyJyODtGlwsc27xP-dzYYkFC7RnJKd3cp5xHeA7daP0wKS2QRg_FS3WgJcjWqz6DV9OShi6RO9eZ7/s1600/AgregarDeactivate.PNG" imageanchor="1"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwuMPGOX47PdiRUMAT6G4eCIt8lZJDt2Y4S91R2JdaTnCcmdHw9Uq5ykY8abaOWfsfyJyODtGlwsc27xP-dzYYkFC7RnJKd3cp5xHeA7daP0wKS2QRg_FS3WgJcjWqz6DV9OShi6RO9eZ7/s1600/AgregarDeactivate.PNG" /></a> </div>
<br />
<div style="text-align: justify;">
En medio de las instrucciones que aparecen automáticamente (y que podemos ver en la imagen anterior, debemos escribir:</div>
<i><br />CommandBars("Cell").Reset</i><br />
<i>Application.CommandBars("Cell").Enabled = True</i><br />
<br />
<span style="color: #e69138;"><b><span style="font-size: large;">Escribimos el código de las macros que se ejecutarán al seleccionar los comandos personalizados de nuestro menú contextual </span></b></span><br />
<br />
<div style="text-align: justify;">
De nuevo en el explorador de proyectos debemos asegurarnos de que hay un módulo disponible para poder escribir el código de nuestras macros a ejecutar.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
En la imagen siguiente vemos que ya está el Módulo 1:</div>
<br />
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIar9uwWTBRypQ6SrQ5uUPbiujCIotUfOrqX-gpx-KieCzj1uNHScR56PfDIwS6wycmwW4URx_nmX4fZ4JDeBm3UXPzmXefwpapBDFAASepGUKBq78uMUqKksO9ITd-ZAmCcbzV0ksVs0o/s1600/Explorador+de+proyectos.PNG"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIar9uwWTBRypQ6SrQ5uUPbiujCIotUfOrqX-gpx-KieCzj1uNHScR56PfDIwS6wycmwW4URx_nmX4fZ4JDeBm3UXPzmXefwpapBDFAASepGUKBq78uMUqKksO9ITd-ZAmCcbzV0ksVs0o/s400/Explorador+de+proyectos.PNG" /></a></div>
<br />
<br />
Pero si no tuviéramos ningún módulo, lo podríamos añadir desde el menú "Insertar" / Módulo:<br />
<br />
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIPqqALW8Adh5raxg0O5uMuFXCcXnSKUW2LNo08lSEVlqsCHqozdP__EdwF_nyH9kGg32FnJbemezpa7DAa8fmSv-SVIsJV3ZXe0vbDnKocyjsoqbr5JWKPHuI8ViUTq1t9gFIpzmruXNo/s1600/Insertar+m%25C3%25B3dulo.PNG" imageanchor="1"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIPqqALW8Adh5raxg0O5uMuFXCcXnSKUW2LNo08lSEVlqsCHqozdP__EdwF_nyH9kGg32FnJbemezpa7DAa8fmSv-SVIsJV3ZXe0vbDnKocyjsoqbr5JWKPHuI8ViUTq1t9gFIpzmruXNo/s1600/Insertar+m%25C3%25B3dulo.PNG" /></a></div>
<br />
<br />
<div style="text-align: justify;">
Cuando ya lo tengamos, hacemos doble clic sobre él y a la derecha aparecerá una ventana para escribir código, donde tendremos que escribir lo siguiente:</div>
<br />
<span style="color: blue;">Sub </span>MiMacro1()<br />
MsgBox "Se ha ejecutado mi macro 1"<br />
<span style="color: blue;">End Sub</span><br />
<br />
<span style="color: blue;">Sub </span>MiMacro2()<br />
MsgBox "Se ha ejecutado mi macro 2"<br />
<span style="color: blue;">End Sub</span><br />
<br />
(Veremos que aparece una línea divisoria automáticamente)<br />
<br />
<br />
<div style="text-align: justify;">
Este código corresponde a dos macros de prueba que muestran un cuadro de mensaje para comprobar que se han ejecutado. Evidentemente, el usuario sustiruirá estas macros por las que realmente necesite ejecutar. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Ahora, ya estamos en disposición de comprobar el correcto funcionamiento de todo lo realizado, desde Excel. Es decir, haciendo clic con el botón derecho en cualquiera de las celdas que definimos al principio (A1 y C1):</div>
<br />
<br />
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkUIMTc6uS7PD9A2qAI-H0JZdsyaGgdcsfFOWHRtH28Jaz40jx-Rokw6XE4VThoga43GAWhLRWWJo0qfaBUW-c7Z0plY-s146NWxDBEL3t8MK_RKx-VRzBob1n3Xu-2KCivWZkHkthHZRR/s1600/Resultado+final.PNG" imageanchor="1"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkUIMTc6uS7PD9A2qAI-H0JZdsyaGgdcsfFOWHRtH28Jaz40jx-Rokw6XE4VThoga43GAWhLRWWJo0qfaBUW-c7Z0plY-s146NWxDBEL3t8MK_RKx-VRzBob1n3Xu-2KCivWZkHkthHZRR/s1600/Resultado+final.PNG" /></a></div>
<br />
<br />
<br />
<span style="color: #e69138;"><b><span style="font-size: large;">Otras opciones </span></b></span><br />
<br />
<span style="color: #0000ee;"><b>VER SOLO NUESTROS COMANDOS, NO LOS DE EXCEL</b> </span><br />
<br />
En al caso de que no deseemos que aparezcan los comandos propios de Excel y tan solo queremos ver nuestro comando, tenemos que quitar del código escrito dentro del evento "BeforeRightClick" la línea:<br />
<br />
<span style="color: #0000ee;"><span style="color: #0000ee;"><i>CommandBars("Cell").Reset</i></span></span><br />
<br />
<div style="text-align: justify;">
<span style="color: #cc0000;"><b>¡¡¡Insistimos!!! hay que eliminar la línea que hemos escrito dentro del evento "BeforeRightClick" ... ¡¡NO eliminar esa misma línea que también escribimos dentro del evento "Worksheet_Deactivate"!!</b></span><i><span style="color: #0000ee;"><span style="color: #0000ee;"><span style="color: #0000ee;"><br /></span></span></span></i></div>
<br />
<span style="color: #0000ee;">El resultado de eliminar esa línea es el siguiente:</span><br />
<br />
<div style="text-align: center;">
<span style="color: #0000ee;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFp7O1G9X-ZJLsMnXfq8bYDKZtbm_c4BwDaX9vyaCIvVuK9YEW72nDecj3ZY0dqJvHB-EaiSJZt6oGxf7WKw-kwUeVd2mYwEIkf-Nk0L4oFlif4UBaM-rLoRMBUrZgK4sWrA8Vv9TuYRjR/s1600/SoloComando.PNG" imageanchor="1"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFp7O1G9X-ZJLsMnXfq8bYDKZtbm_c4BwDaX9vyaCIvVuK9YEW72nDecj3ZY0dqJvHB-EaiSJZt6oGxf7WKw-kwUeVd2mYwEIkf-Nk0L4oFlif4UBaM-rLoRMBUrZgK4sWrA8Vv9TuYRjR/s1600/SoloComando.PNG" /></a> </span></div>
<br />
Donde vemos que en el menú contextual aparece solo el comando que activa nuestra macro.<br />
<br />
<span style="color: #0000ee;"><span style="color: #0000ee;"><span style="color: #0000ee;"><b>C<span style="color: #0000ee;">ON UN CLIC EN CUALQUIER CELDA, VER <span style="color: #0000ee;">TODOS NUESTROS</span> COMANDOS A LA VEZ SIEMPRE PARA PODER ELEGIR LA ACCIÓN:</span></b> </span></span></span><br />
<br />
En este caso, sea la celda que sea, al hacer clic con el botón derecho, veremos todos los comandos a la vez para poder elegir el que necesitemos. Para conseguirlo, debemos eliminar en el código las estructuras condicionales que comienzan por If y terminan por End If:<span style="color: #0000ee;"><span style="color: #0000ee;"><span style="color: #0000ee;"><span style="color: #0000ee;"><span style="color: #0000ee;"><span style="color: #0000ee;"><span style="color: #0000ee;"><span style="color: #0000ee;"><span style="color: #0000ee;"><span style="color: #0000ee;"> </span></span></span></span></span></span></span></span></span></span><br />
<span style="color: #0000ee;"><span style="color: #0000ee;"><span style="color: #0000ee;"><span style="color: #0000ee;"><span style="color: #0000ee;"><span style="color: #0000ee;"><span style="color: #0000ee;"><span style="color: #0000ee;"><span style="color: #0000ee;"><span style="color: #0000ee;"> </span></span> </span></span></span></span></span></span></span></span><br />
<div style="text-align: center;">
<span style="color: #0000ee;"><span style="color: #0000ee;"><span style="color: #0000ee;"><span style="color: #0000ee;"><span style="color: #0000ee;"><span style="color: #0000ee;"><span style="color: #0000ee;"><span style="color: #0000ee;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfCXo88K8KLH5L9cgd85j6rkrcCQ60LboT45tWuXYw2em3ctj1arGOC2ZGw0OYgqxxWxeM45SqEPMa7Lv7MukvsSID6xod9V3fC-yAeAphnAp_MntZsx_Jrjj2Id-FZAErwbgJ2u17k4dn/s1600/EliminarIf.PNG" imageanchor="1"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfCXo88K8KLH5L9cgd85j6rkrcCQ60LboT45tWuXYw2em3ctj1arGOC2ZGw0OYgqxxWxeM45SqEPMa7Lv7MukvsSID6xod9V3fC-yAeAphnAp_MntZsx_Jrjj2Id-FZAErwbgJ2u17k4dn/s1600/EliminarIf.PNG" /></a> </span></span></span></span></span></span></span></span></div>
<br />
Siendo el resultado el siguiente:<br />
<span style="color: #0000ee;"><span style="color: #0000ee;"><span style="color: #0000ee;"><span style="color: #0000ee;"><span style="color: #0000ee;"><span style="color: #0000ee;"><span style="color: #0000ee;"><span style="color: #0000ee;"><br /></span></span></span></span></span></span></span></span>
<br />
<div style="text-align: center;">
<span style="color: #0000ee;"><span style="color: #0000ee;"><span style="color: #0000ee;"><span style="color: #0000ee;"><span style="color: #0000ee;"><span style="color: #0000ee;"><span style="color: #0000ee;"><span style="color: #0000ee;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9nue59ySN87eo8PlWSuPhR7inwKUL5ohZVZ6uRIrW__0K9jd1hz1it0yLKwMciegLSfZRRdmgkxUdYzTv91-6PKb0bXWKibuR5wLycoDJrXVXlVSfF87sUpB1mRkv94NHfynn5kIrCjI2/s1600/TodosComandosALaVez.PNG" imageanchor="1"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9nue59ySN87eo8PlWSuPhR7inwKUL5ohZVZ6uRIrW__0K9jd1hz1it0yLKwMciegLSfZRRdmgkxUdYzTv91-6PKb0bXWKibuR5wLycoDJrXVXlVSfF87sUpB1mRkv94NHfynn5kIrCjI2/s1600/TodosComandosALaVez.PNG" /></a> </span></span></span></span></span> </span></span></span></div>
<span style="color: #0000ee;"><span style="color: #0000ee;"><span style="color: #0000ee;"> </span></span> </span><br />
Para finalizar, no hay que olvidar que el archivo debe ser guardado como... "Libro de Excel habilitado para macros (*.xlsm). <span style="color: #0000ee;"><span style="color: #0000ee;"><span style="color: #0000ee;"><span style="color: #0000ee;"><span style="color: #0000ee;"> </span></span></span></span></span>En el archivo que es posible descargar a continuación, podemos ver (incluso copiar) todo el código necesario, además de comprobar su funcionamiento:<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.dropbox.com/s/zaqyqqhptls1690/Personalizar%20bot%C3%B3n%20derecho.xlsm?dl=0" target="_blank"><img alt="https://www.dropbox.com/s/zaqyqqhptls1690/Personalizar%20bot%C3%B3n%20derecho.xlsm?dl=0" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwyBqegLcQzHnsnL00MUzcJBqD0EvxeX9RlpKfn5ZyH-xSrgV6efCA0NAiwmgBmADShtw6xA4oYmjYS1hu0znyS9o8w9Wj6xbSZD_GZUKIRPFcoAwD9-HD1XcqWqQ7TL3Uc2qCYWkuerOB/s1600/Descargar-icono.PNG" /></a></div>
<br />
<span style="color: #e69138;"><span style="font-size: large;"><b>El espacio de Mac</b></span></span><br />
<br />
En cuanto a Excel 2011 para Mac, no hay diferencias en el código a escribir. Tan solo podemos remarcar las diferencias que hay a la hora de activar el editor de VBA. Concretamente, debemos activar la ficha Programador (Menú Excel / Preferencias / Cinta... y activar la casilla "Programador".<br />
<br />
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiBbj8kOd_7UO_NzXKoPbdQPDCYV8MIdqdBWhq8teaIIArj-G44sHqFXNKB_o_UXMut1iXFVMxRBGGZla_nQ6Nie-bVdjiVA5bKwxrlfsEyjv_eim1JCabYPexgS_9cInGlsySKSk0SP3F/s1600/Cinta.PNG" imageanchor="1"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiBbj8kOd_7UO_NzXKoPbdQPDCYV8MIdqdBWhq8teaIIArj-G44sHqFXNKB_o_UXMut1iXFVMxRBGGZla_nQ6Nie-bVdjiVA5bKwxrlfsEyjv_eim1JCabYPexgS_9cInGlsySKSk0SP3F/s1600/Cinta.PNG" /></a></div>
<br />
Después de aceptar, veremos la nueva pestaña en la cinta y activándola podremos acceder al editor de VBA:<br />
<br />
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5Yb763wI3ZlZbft7TaaJobVTjlyaIvyNVEIEC618yRVYXOLzmJOxSB4heSoImZk52Kq0V81M0VP7G7RW_nGLWqdUpCPqghyphenhyphenSJY0D78RJIBY-gopLgbi-FloaDwj6mfPeh-3pgUliEwPtA/s1600/Editor.PNG" imageanchor="1"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5Yb763wI3ZlZbft7TaaJobVTjlyaIvyNVEIEC618yRVYXOLzmJOxSB4heSoImZk52Kq0V81M0VP7G7RW_nGLWqdUpCPqghyphenhyphenSJY0D78RJIBY-gopLgbi-FloaDwj6mfPeh-3pgUliEwPtA/s400/Editor.PNG" /></a></div>
<br />
<br />
José Manuel Pomares Medrano <br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9KQqil0ZjeEhnSJppa1gv6cCqaS4_Jlfk1qvaG8K70bJy6ZqHG6XIWzi7sWyC4EGBHgfWkhpjCUlAWaFtYMddo5w-AjylCcn8AWIvacdSJbPx1u50Zlc7A0B7FUyiaYX6HrOZt3gJedN/s1600/Cabecera+t%25C3%25A9mporaExcel.PNG" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="96" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9KQqil0ZjeEhnSJppa1gv6cCqaS4_Jlfk1qvaG8K70bJy6ZqHG6XIWzi7sWyC4EGBHgfWkhpjCUlAWaFtYMddo5w-AjylCcn8AWIvacdSJbPx1u50Zlc7A0B7FUyiaYX6HrOZt3gJedN/s640/Cabecera+t%25C3%25A9mporaExcel.PNG" width="640" /></a><br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />Témpora Consultoreshttp://www.blogger.com/profile/09000632812723289961noreply@blogger.com8tag:blogger.com,1999:blog-8253525174733356300.post-91213408946508905612015-11-24T02:19:00.000+01:002016-01-18T02:53:39.121+01:00Cómo imprimir correctamente con Excel en 3 pasos<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj31t0oIFsCG9eYEdyR5Ykbx95LIOd7JPGKSFppfqxfUhasqMYemcv4fQGN7KFxwwM2hBa3IVCwv5TB0kcgPuQCUOiMU1tHyInZ6vd4VMdCjeWVi3EYeCOsKwXCJNdMUVw_oqsQ5yYEmBRv/s1600/Imprimir+correctamente+en+Excel.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="205" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj31t0oIFsCG9eYEdyR5Ykbx95LIOd7JPGKSFppfqxfUhasqMYemcv4fQGN7KFxwwM2hBa3IVCwv5TB0kcgPuQCUOiMU1tHyInZ6vd4VMdCjeWVi3EYeCOsKwXCJNdMUVw_oqsQ5yYEmBRv/s400/Imprimir+correctamente+en+Excel.PNG" width="400" /></a></div>
<br />
¿A quién no le ha pasado alguna vez que, tras hacer clic en el botón "Imprimir" ha visto a parecer un cuadro de diálogo en la pantalla que dice...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuSI4LJ-i7cP4GA_c1zoQW7c85k2XpalAipPfCS6Hfl0WGq2LEUS5EyZ9XLDOD6I0AHHOA5G-4LsWUWfQI2F7PjAFEneVGq6vUdtJN6-eI5lbnxI6zihKKOVXh9BHcWOOuOdANVgEnPXz-/s1600/Imprimiendo+p%25C3%25A1gina+1+de+117.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuSI4LJ-i7cP4GA_c1zoQW7c85k2XpalAipPfCS6Hfl0WGq2LEUS5EyZ9XLDOD6I0AHHOA5G-4LsWUWfQI2F7PjAFEneVGq6vUdtJN6-eI5lbnxI6zihKKOVXh9BHcWOOuOdANVgEnPXz-/s1600/Imprimiendo+p%25C3%25A1gina+1+de+117.PNG" /></a></div>
<br />
<div style="text-align: justify;">
... es entonces cuando nos llevamos las manos a la cabeza y pensamos ¡¡¡¿¿¿ 121 páginas van a imprimirse???!!!</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Si ocurre esto y verdaderamente no queríamos imprimir 121 páginas, quizá lo que ocurra es que no hemos configurado bien la impresión de nuestra hoja de Excel. Si queremos imprimir en Microsoft Excel necesitamos configurar algunos aspectos clave para que el programa conozca, al menos, tres cosas importantes: </div>
<ol style="text-align: justify;">
<li>¿Qué celdas queremos imprimir ?</li>
<li>¿Qué queremos que aparezca en cada hoja impresa?</li>
<li>¿Qué márgenes necesitamos en cada hoja impresa? </li>
</ol>
<div style="text-align: justify;">
Por lo tanto, esta cuestión se convierte en vital pero, a la vez, muy fácil de solucionar. Tan solo tenemos que cumplir los siguientes 3 pasos antes de hacer clic en el botón "Imprimir".</div>
<br />
<span style="color: #e69138;"><span style="font-size: large;"><b>PASO 1: Establecer el área de impresión</b></span></span><br />
<br />
<div style="text-align: justify;">
El primer paso consiste en "decirle" a Excel dónde está el rango de celdas que queremos imprimir. Tenemos que tener en cuenta que en Excel hay más de 16.000 columnas y más de 1.048.000 filas que dan lugar a millones de celdas. ¿Por qué iba Excel a saber qué celdas, entre todos los millones existentes, son las que nosotros queremos imprimir?.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Así las cosas, el primer paso hacia la impresión es "Establecer el área de impresión". Esto se hace desde la ficha "Diseño de página":</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioSdns57cp52LARH273PHnvejiuMJfp5obMsda3oeCp6r4jMpJQ1SZqlYE3QuDz5i_1737tQC5GYM26ly_9I3RKJM4MYlH9SJyUOErACaJPYDsmKZlu4ONkT7Gkq5xl27iTaTFcAtNV8As/s1600/Establecer+el+%25C3%25A1rea+de+impresi%25C3%25B3n.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioSdns57cp52LARH273PHnvejiuMJfp5obMsda3oeCp6r4jMpJQ1SZqlYE3QuDz5i_1737tQC5GYM26ly_9I3RKJM4MYlH9SJyUOErACaJPYDsmKZlu4ONkT7Gkq5xl27iTaTFcAtNV8As/s1600/Establecer+el+%25C3%25A1rea+de+impresi%25C3%25B3n.PNG" /></a></div>
<br />
Una vez hecho esto y, aunque parezca que no ha ocurrido nada, Excel ya sabe qué es lo que queremos imprimir.<br />
<br />
<span style="color: #e69138;"><b><span style="font-size: large;">PASO 2: Establecer la escala </span></b></span><br />
<br />
<div style="text-align: justify;">
Establecer la escala significa decirle a Excel cómo queremos repartir toda la zona o área de impresión en páginas. Excel nos ofrece 3 opciones preconfiguradas (<span style="color: #cc0000;"><b>en las versiones de Excel 2010, 2013 y 2016 se encuentran en la ficha Archivo / Imprimir</b></span>) que se ajustarán a nuestras necesidades en la mayoría de los casos (además de "Sin escalado"): </div>
<ul style="text-align: justify;">
<li><b>Ajustar hoja en una página</b>: sirve para que el área de impresión establecida en el paso 1 aparezca íntegramente en una página. Tenemos que tener en cuenta que si el área de impresión es muy extensa, cuando Excel obliga a comprimirla en una sola página, es posible que se vea muy pequeña</li>
<li><b>Ajustar todas las columnas en una página:</b> sirve para que el ancho del área de impresión se ajuste al ancho de una página, haya las columnas que haya. También debemos tener en cuenta que si hay muchas columnas es posible que el tamaño se reduzca damasiado. Una primera solución a intentar sería cambiar la orientación del papel de "vertical" a "horizontal". En cualquier caso, <b><span style="color: #990000;">esta es la solución que mejores resultados suele tener</span></b>.</li>
<li><b>Ajustar todas las filas en una página: </b>de forma similar a la primera de las opciones comentadas, todo el contenido del área de impresión se ajusta y comprime para que todas las filas estén visibles en una sola página... aunque haya columnas que deban imprimirse en otras páginas. </li>
</ul>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgExIZPHXVw6nyrpjwonO1Ar-uU3x_33IhVezW-QlQ1StfPbgMhADK0r1wh_KK27vM_PCjHQeAU0FDcA5CUkJc_r8vTf03liLTDzIFeP8h9vObdvmuJMgOg6M2VahKI0MGO-UUYJS29eOhF/s1600/Establecer+escala.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgExIZPHXVw6nyrpjwonO1Ar-uU3x_33IhVezW-QlQ1StfPbgMhADK0r1wh_KK27vM_PCjHQeAU0FDcA5CUkJc_r8vTf03liLTDzIFeP8h9vObdvmuJMgOg6M2VahKI0MGO-UUYJS29eOhF/s1600/Establecer+escala.PNG" /></a></div>
<br />
<span style="color: #e69138;"><b><span style="font-size: large;">PASO 3: Establecer los márgenes adecuados </span></b></span><br />
<br />
<div style="text-align: justify;">
Como última configuraciòn recomendable está la configuración de los márgenes. Es decir, el espacio que hay entre el texto y el borde de la página impresa.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
La configuración de los márgenes podemos conseguirla por varios caminos. Pero uno de los más directos es desde la ficha "Diseño de página" y después desplegando el comando "Márgenes"...</div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3Spfl10Q_3g2XmTIUotaGOvokOxwFpyg4McWr6PwwyESdFS4cV1XSdM0uJCvVoiyjfegN90ony7Ul0HjQGF7ymKs3gPtEVD5tu_BpVqH5acfz2-AK95y6OwS4neuBCZHsM0s3EM_c3rt2/s1600/Establecer+m%25C3%25A1rgenes.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3Spfl10Q_3g2XmTIUotaGOvokOxwFpyg4McWr6PwwyESdFS4cV1XSdM0uJCvVoiyjfegN90ony7Ul0HjQGF7ymKs3gPtEVD5tu_BpVqH5acfz2-AK95y6OwS4neuBCZHsM0s3EM_c3rt2/s1600/Establecer+m%25C3%25A1rgenes.PNG" /></a></div>
<br />
<div style="text-align: justify;">
... tan solo queda elegir la opción deseada.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Está claro que hay más configuraciones posibles (y en algunos casos necesarias) como el tamaño del papel y la orientación (vertical u horizontal), pero las 3 descritas en este artículo son las más importantes que no debemos obviar nunca si queremos que nuestras impresiones cumplan con unos mínimos.</div>
<br />
José Manuel Pomares Medrano <br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9KQqil0ZjeEhnSJppa1gv6cCqaS4_Jlfk1qvaG8K70bJy6ZqHG6XIWzi7sWyC4EGBHgfWkhpjCUlAWaFtYMddo5w-AjylCcn8AWIvacdSJbPx1u50Zlc7A0B7FUyiaYX6HrOZt3gJedN/s1600/Cabecera+t%25C3%25A9mporaExcel.PNG" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="96" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9KQqil0ZjeEhnSJppa1gv6cCqaS4_Jlfk1qvaG8K70bJy6ZqHG6XIWzi7sWyC4EGBHgfWkhpjCUlAWaFtYMddo5w-AjylCcn8AWIvacdSJbPx1u50Zlc7A0B7FUyiaYX6HrOZt3gJedN/s640/Cabecera+t%25C3%25A9mporaExcel.PNG" width="640" /></a><br />
<br />
<br />
<br />
<br />
<br />
<br />Témpora Consultoreshttp://www.blogger.com/profile/09000632812723289961noreply@blogger.com3tag:blogger.com,1999:blog-8253525174733356300.post-44564168160918520402015-09-29T02:37:00.002+02:002015-09-29T02:39:46.358+02:00Office 365, Office online, Office de compra única ¿Qué es mejor?<div style="text-align: justify;">
Muchos usuarios de Office no conocen muy bien las diferencias que existen entre estas 3 modalidades que ofrece Microsoft para usar su conocida suite ofimática. En este post vamos a intentar aclarlo, puesto que tampoco es muy difícil.</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNNUrhjqnzb8fnpKu33W1reKB5ytFxSiMOSY7wiWnPs2LH38clPHJ6-eclL-Hm8NSHMgIJYae9ROCxDM63Hk4pWHeI0fR00LbBxRH2nTXw4fDHjfecWumep9rrQXUwNZB-ZzLcha2vsH2S/s1600/Office+2016.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNNUrhjqnzb8fnpKu33W1reKB5ytFxSiMOSY7wiWnPs2LH38clPHJ6-eclL-Hm8NSHMgIJYae9ROCxDM63Hk4pWHeI0fR00LbBxRH2nTXw4fDHjfecWumep9rrQXUwNZB-ZzLcha2vsH2S/s1600/Office+2016.PNG" /></a></div>
<br />
<span style="color: #e69138;"><span style="font-size: large;"><b>Office 365</b></span></span><br />
<br />
<div style="text-align: justify;">
Microsoft ofrece Office 365 en modo suscripción (como un alquiler). Esta versión cubre las necesidades de usuarios que precisan un paquete ofimático de altas prestaciones (las máximas que tiene Office) puesto que las aplicaciones de Office se instalan por completo en el equipo del usuario (no se trabaja en la web). Lo que ocurre es que, al ser mediante suscripción o alquiler, Microsoft controla el permiso de utilización via internet hasta que abandonamos la suscripción.</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAaHSIszXE4MnrTG-pii4XJXMpmu1QvJn2nTcyUuyBcEaDf07moGnfyv1PZQtn7d3Z3Yrar9aBuOz3p4tz_DXnPiSmmnWJpzWhCL-cmJkX3JCRslEJTzngN6HdhC_RoZlfZtL6AZDsxirK/s1600/Office+365.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAaHSIszXE4MnrTG-pii4XJXMpmu1QvJn2nTcyUuyBcEaDf07moGnfyv1PZQtn7d3Z3Yrar9aBuOz3p4tz_DXnPiSmmnWJpzWhCL-cmJkX3JCRslEJTzngN6HdhC_RoZlfZtL6AZDsxirK/s1600/Office+365.PNG" /></a></div>
<br />
<div style="text-align: justify;">
Podemos ver en la imagen anterior las características de esta opción, entre las que destacamos la posibilidad de que cinco usuarios utilicen el paquete ofimático y también el hecho de que siempre tendremos sin cargo adicional la última versión que exista en el mercado. Es una opción ideal para familias o pequeñas empresas.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: #e69138;"><span style="font-size: large;"><b>Office online</b></span></span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Office online (Office Web Apps) es una versión reducida de Office y que tiene como principal característica el hecho de trabajar sobre un navegador web y mostrar algún espacio publicitario. Es decir, no tenemos las aplicaciones instaladas en nuestro equipo.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Office online es una opción gratuita y, como decíamos anteriormente, no ofrece todas las funcionalidades de Office 365 u Office de compra única. Para utilizar Office online solo tenemos que tener una cuenta de Microsoft para poder acceder (también para Office 365 era necesario este requisito).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
En las siguientes imágenes podemos ver la diferencia de funcionalidades existentes entre la ficha "Diseño de página" de Word online y la misma ficha en Word de compra única o escritorio:</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiR1W8cD6Vn3XaznSdu9llAy0kyougSe3eT9FK6azFDRHVvAY_3w_jKi4mwiu28aP4l4zcehDpumoAP-0YqgdjVZHQXZiCLeQYIPGWT_CfjaRFAMHjnFW4uIPt9Jnxp4dnW_UhKqtne3hAI/s1600/FichaDise%25C3%25B1oPaginaWordOnline.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="66" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiR1W8cD6Vn3XaznSdu9llAy0kyougSe3eT9FK6azFDRHVvAY_3w_jKi4mwiu28aP4l4zcehDpumoAP-0YqgdjVZHQXZiCLeQYIPGWT_CfjaRFAMHjnFW4uIPt9Jnxp4dnW_UhKqtne3hAI/s400/FichaDise%25C3%25B1oPaginaWordOnline.PNG" width="400" /></a></div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQqfw45CaMIcdtHEnYru5qrLiQx9LCqYLYUbJNt34VmSZqWRbE5VufNDvZ-BTZRgJg7kHG1Oa_5TU3ZogNo9vp7ziygErDLDpfWMwniUUvz2tghAhvuJ_QKjk9_0X7AG198NBB5MKJ22Ur/s1600/FichaRevisarWord.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="42" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQqfw45CaMIcdtHEnYru5qrLiQx9LCqYLYUbJNt34VmSZqWRbE5VufNDvZ-BTZRgJg7kHG1Oa_5TU3ZogNo9vp7ziygErDLDpfWMwniUUvz2tghAhvuJ_QKjk9_0X7AG198NBB5MKJ22Ur/s400/FichaRevisarWord.PNG" width="400" /></a></div>
<br />
<div style="text-align: justify;">
Aunque el trabajo se realice eminentemente online, también es posible descargar al equipo los archivos generados por Office online.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Podemos decir que es una buena opción para usuarios poco exigentes que utilicen Office solo de vez en cuando y con funcionalidades básicas. Para un 60-70% de usuarios podría ser suficiente.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: #e69138;"><span style="font-size: large;"><b>Office de compra única</b></span></span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Cuando hablamos de Office de compra única, nos referimos a la aplicación de escritorio Office que tradicionalmente conocemos. Es decir, completa en cuanto a funcionalidades y en propiedad (no en modo suscripción o alquiler).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Con esta opción, si compramos una versión determinada, no tendremos derecho a la actualización de nuestro paquete a versiones posteriores y la licencia será para un solo usuario.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
En las últimas versiones, Microsoft se está esforzando por orientar el funcionamiento de Office al trabajo compartido y online, por lo cual, si trabajamos registrados en una cuenta de office podremos guardar los archivos directamente en la nube (en el espacio de almacenamiento OneDrive de Microsoft).</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuyUE5ILHOqey3zpBiSnAcpT_0P1mRqgZaJaChmXRHGCz7l-iodvc0PS0YxYkqkCnv4nw_GLmKuzy-jAiYECv1GH4WMHiLVvcagNU7E_r1Q9IBItj4gTSGNks2oIpa3c68UuPLzWQOdkE6/s1600/FotoCuentaMicrosoft.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuyUE5ILHOqey3zpBiSnAcpT_0P1mRqgZaJaChmXRHGCz7l-iodvc0PS0YxYkqkCnv4nw_GLmKuzy-jAiYECv1GH4WMHiLVvcagNU7E_r1Q9IBItj4gTSGNks2oIpa3c68UuPLzWQOdkE6/s1600/FotoCuentaMicrosoft.PNG" /></a></div>
<br />
<div style="text-align: justify;">
Esta opción de Office es ideal para profesionales con necesidades y exigencias máximas, desarrolladores y grandes empresas.</div>
<div style="text-align: justify;">
<br /></div>
<br />
José Manuel Pomares Medrano <br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9KQqil0ZjeEhnSJppa1gv6cCqaS4_Jlfk1qvaG8K70bJy6ZqHG6XIWzi7sWyC4EGBHgfWkhpjCUlAWaFtYMddo5w-AjylCcn8AWIvacdSJbPx1u50Zlc7A0B7FUyiaYX6HrOZt3gJedN/s1600/Cabecera+t%25C3%25A9mporaExcel.PNG" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="96" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd9KQqil0ZjeEhnSJppa1gv6cCqaS4_Jlfk1qvaG8K70bJy6ZqHG6XIWzi7sWyC4EGBHgfWkhpjCUlAWaFtYMddo5w-AjylCcn8AWIvacdSJbPx1u50Zlc7A0B7FUyiaYX6HrOZt3gJedN/s640/Cabecera+t%25C3%25A9mporaExcel.PNG" width="640" /></a><br />
<br />
<br />
<br />Témpora Consultoreshttp://www.blogger.com/profile/09000632812723289961noreply@blogger.com0