Macros Excel

2
PROGRAMACIÓN MACROS EXCEL Gráficas (2 de 2) Félix Alberto Jiménez [email protected] computer!dea abril 2003 76 Después de que el mes pasado viéramos de qué forma se modifican las series de datos de las gráficas de Excel por medio de la programación de macros, en esta entrega del curso conoceremos los distintos tipos de gráficas con los que podremos trabajar en este proceso. i alguna conclusión hemos debido sacar a lo largo de la segunda parte del curso de programación en Visual Basic (la dedicada a explicar la programación de macros sobre Microsoft Excel) es que la posibili- dad de automatizar todo tipo de tareas que nos ofre- cen las aplicaciones de Microsoft Office hace que podamos com- plementar nuestros documentos. Se volverán no sólo más operativos, sino también mucho más atractivos para el usuario. En esta línea va enfocada la última entrega de la parte del curso de programación dedicada a las macros, ya que trataremos de presentar la gama de posibles gráficas que utilizar y el modo de cambiar de estilo las gráficas de nuestros documentos en tiempo de ejecución, de modo que los datos se puedan presentar a gusto del usuario sin necesidad de que éste conozca los pormenores de las propiedades de las gráficas. Tipos de gráficas Para referirnos al tipo de gráfica de un Char- tObject, hemos de acceder a la propiedad ChartType del subobjeto Chart correspondien- te. Como ya vimos en la entrega anterior del curso, para hacer referencia a cada uno de los gráficos de una hoja hemos de pasar previa- mente por el objeto WorkSheet correspondien- te a la hoja de trabajo en cuestión. Así, para modificar el tipo de gráfica del primer gráfico de la primera hoja de trabajo del libro la expresión correspondiente podría escribir: Worksheets(1).ChartObjects(1).Chart.ChartType = <I>Constante<P> donde Constante es un valor constante de tipo XlChartType. En la siguiente tabla podemos observar toda la colección de valores de este tipo de cons- tantes, si bien es preciso tener en cuenta que no siempre es posible cam- biar de tipo de gráfica sin modificar algunas otras propiedades del objeto: xlLine Línea xlLineMarkersStacked Línea apilada con marcadores xlLineStacked Línea apilada xlPie Circular xlPieOfPie Circular con subgráfico circular xlPyramidBarStacked Barra piramidal apilada xlPyramidCol Columna piramidal 3D xlPyramidColClustered Columna piramidal agrupada xlPyramidColStacked Columna piramidal apilada xlPyramidColStacked100 Columna piramidal apilada 100% xlRadar Radial xlRadarFilled Radial relleno xlRadarMarkers Radial con marcadores de datos xlStockHLC Máximos, mínimos, cierre xlStockOHLC Apertura, máximos, mínimos, cierre xlStockVHLC Volumen, máximos, mínimos, cierre xlStockVOHLC Volumen, apertura, máximos, mínimos, cierre xlSurface Superficie 3D xlSurfaceTopView Superficie (vista superior) xlSurfaceTopViewWireframe Superficie (vista superior de la trama) xlSurfaceWireframe Superficie 3D (trama) xlXYScatter Dispersión xlXYScatterLines Dispersión con líneas xlXYScatterLinesNoMarkers Dispersión con líneas y sin marcadores de datos xlXYScatterSmooth Dispersión con líneas suavizadas xlXYScatterSmoothNoMarkers Dispersión con líneas suavizadas y sin marcadores de datos xl3DArea Área 3D xl3DAreaStacked Área 3D apilada xl3DAreaStacked100 Área apilada 100% xl3DBarClustered Barra 3D agrupada xl3DBarStacked Barra 3D apilada xl3DBarStacked100 Barra 3D apilada 100% xl3DColumn Columna 3D xl3DColumnClustered Columna 3D agrupada xl3DColumnStacked Columna 3D apilada xl3DColumnStacked100 Columna 3D apilada 100% xl3DLine Línea 3D xl3DPie Circular 3D xl3DPieExploded Circular seccionado 3D xlArea Área xlAreaStacked Área apilada xlAreaStacked100 Área apilada 100% xlBarClustered Barra agrupada xlBarOfPie Circular con subgráfico de barras xlBarStacked Barra apilada xlBarStacked100 Barra apilada 100% xlBubble Burbuja xlBubble3DEffect Burbuja con efectos 3D xlColumnClustered Columna agrupada xlColumnStacked Columna apilada xlColumnStacked100 Columna apilada 100% xlConeBarClustered Barra cónica agrupada xlConeBarStacked Barra cónica apilada xlConeBarStacked100 Barra cónica apilada 100% xlConeCol Columna cónica 3D xlConeColClustered Columna cónica agrupada xlConeColStacked Columna cónica apilada xlConeColStacked100 Columna cónica apilada 100% xlCylinderBarClustered Barra cilíndrica agrupada xlCylinderBarStacked Barra cilíndrica apilada xlCylinderBarStacked100 Barra cilíndrica apilada 100% xlCylinderCol Columna cilíndrica 3D xlCylinderColClustered Columna cónica agrupada xlCylinderColStacked Columna cónica apilada xlCylinderColStacked100 Columna cilíndrica apilada 100% xlDoughnut Anillos xlDoughnutExploded Anillos seccionado xlLineMarkers Línea con marcadores xlLineMarkersStacked100 Línea apilada 100% con marcadores xlLineStacked100 Línea apilada 100% xlPieExploded Circular seccionado xlPyramidBarClustered Barra piramidal agrupada xlPyramidBarStacked100 Barra piramidal apilada 100% Como es fácil entender, cada una de las propiedades que se definen al utili- zar el Asistente para gráficos se pueden modificar igualmente por medio de programación, de modo que las limitaciones que existen a la hora de auto- matizar los documentos de Microsoft Excel radican, principalmente, en nosotros mismos. S CI 076-077 20/3/03 19:22 Página 1

Transcript of Macros Excel

Page 1: Macros Excel

PROGRAMACIÓNMACROS EXCEL

Gráficas (2 de 2) Félix Alberto Jiménez [email protected]

computer!dea abril 200376

Después de que el mes pasadoviéramos de qué forma se modificanlas series de datos de las gráficas deExcel por medio de la programaciónde macros, en esta entrega del cursoconoceremos los distintos tipos degráficas con los que podremostrabajar en este proceso.

i alguna conclusión hemos debido sacar a lo largo dela segunda parte del curso de programación enVisual Basic (la dedicada a explicar la programaciónde macros sobre Microsoft Excel) es que la posibili-dad de automatizar todo tipo de tareas que nos ofre-

cen las aplicaciones de Microsoft Office hace que podamos com-plementar nuestros documentos. Se volverán no sólo másoperativos, sino también mucho más atractivos para el usuario.En esta línea va enfocada la última entrega de la parte del cursode programación dedicada a las macros, ya que trataremos depresentar la gama de posibles gráficas que utilizar y el modo decambiar de estilo las gráficas de nuestros documentos en tiempode ejecución, de modo que los datos se puedan presentar a gustodel usuario sin necesidad de que éste conozca los pormenores delas propiedades de las gráficas.

Tipos de gráficasPara referirnos al tipo de gráfica de un Char-tObject, hemos de acceder a la propiedadChartType del subobjeto Chart correspondien-te. Como ya vimos en la entrega anterior delcurso, para hacer referencia a cada uno de losgráficos de una hoja hemos de pasar previa-mente por el objeto WorkSheet correspondien-te a la hoja de trabajo en cuestión. Así, paramodificar el tipo de gráfica del primer gráficode la primera hoja de trabajo del libro laexpresión correspondiente podría escribir:

Worksheets(1).ChartObjects(1).Chart.ChartType = <I>Constante<P>

donde Constante es un valor constante de tipo XlChartType. En la siguientetabla podemos observar toda la colección de valores de este tipo de cons-tantes, si bien es preciso tener en cuenta que no siempre es posible cam-biar de tipo de gráfica sin modificar algunas otras propiedades del objeto:

xlLine LíneaxlLineMarkersStacked Línea apilada con marcadoresxlLineStacked Línea apiladaxlPie CircularxlPieOfPie Circular con subgráfico circularxlPyramidBarStacked Barra piramidal apiladaxlPyramidCol Columna piramidal 3DxlPyramidColClustered Columna piramidal agrupadaxlPyramidColStacked Columna piramidal apiladaxlPyramidColStacked100 Columna piramidal apilada 100%xlRadar RadialxlRadarFilled Radial rellenoxlRadarMarkers Radial con marcadores de datosxlStockHLC Máximos, mínimos, cierre

xlStockOHLC Apertura, máximos, mínimos, cierrexlStockVHLC Volumen, máximos, mínimos, cierrexlStockVOHLC Volumen, apertura, máximos, mínimos, cierrexlSurface Superficie 3DxlSurfaceTopView Superficie (vista superior)xlSurfaceTopViewWireframe Superficie (vista superior de la trama)xlSurfaceWireframe Superficie 3D (trama)xlXYScatter DispersiónxlXYScatterLines Dispersión con líneasxlXYScatterLinesNoMarkers Dispersión con líneas y sin marcadores de datosxlXYScatterSmooth Dispersión con líneas suavizadasxlXYScatterSmoothNoMarkers Dispersión con líneas suavizadas y sin

marcadores de datosxl3DArea Área 3Dxl3DAreaStacked Área 3D apiladaxl3DAreaStacked100 Área apilada 100%xl3DBarClustered Barra 3D agrupadaxl3DBarStacked Barra 3D apiladaxl3DBarStacked100 Barra 3D apilada 100%xl3DColumn Columna 3Dxl3DColumnClustered Columna 3D agrupadaxl3DColumnStacked Columna 3D apiladaxl3DColumnStacked100 Columna 3D apilada 100%xl3DLine Línea 3Dxl3DPie Circular 3Dxl3DPieExploded Circular seccionado 3DxlArea ÁreaxlAreaStacked Área apiladaxlAreaStacked100 Área apilada 100%xlBarClustered Barra agrupadaxlBarOfPie Circular con subgráfico de barrasxlBarStacked Barra apiladaxlBarStacked100 Barra apilada 100%xlBubble BurbujaxlBubble3DEffect Burbuja con efectos 3DxlColumnClustered Columna agrupadaxlColumnStacked Columna apiladaxlColumnStacked100 Columna apilada 100%xlConeBarClustered Barra cónica agrupadaxlConeBarStacked Barra cónica apiladaxlConeBarStacked100 Barra cónica apilada 100%xlConeCol Columna cónica 3DxlConeColClustered Columna cónica agrupadaxlConeColStacked Columna cónica apiladaxlConeColStacked100 Columna cónica apilada 100%xlCylinderBarClustered Barra cilíndrica agrupadaxlCylinderBarStacked Barra cilíndrica apiladaxlCylinderBarStacked100 Barra cilíndrica apilada 100%xlCylinderCol Columna cilíndrica 3DxlCylinderColClustered Columna cónica agrupadaxlCylinderColStacked Columna cónica apiladaxlCylinderColStacked100 Columna cilíndrica apilada 100%xlDoughnut AnillosxlDoughnutExploded Anillos seccionadoxlLineMarkers Línea con marcadoresxlLineMarkersStacked100 Línea apilada 100% con marcadoresxlLineStacked100 Línea apilada 100%xlPieExploded Circular seccionadoxlPyramidBarClustered Barra piramidal agrupadaxlPyramidBarStacked100 Barra piramidal apilada 100%

Como es fácil entender, cada una de las propiedades que se definen al utili-zar el Asistente para gráficos se pueden modificar igualmente por medio deprogramación, de modo que las limitaciones que existen a la hora de auto-matizar los documentos de Microsoft Excel radican, principalmente, ennosotros mismos.

S

CI 076-077 20/3/03 19:22 Página 1

Page 2: Macros Excel

Lo primero que haremos será poner a disposi-ción del usuario del sistema un cuadro combi-nado que le permita cambiar el estilo de la

gráfica a su antojo. Para poder hacerlo, mostramos, en la ventana deMicrosoft Excel con el documentocreado el mes anterior abierto, labarra de herramientas Cuadro decontroles (Ver/Barras de herra-mientas/Cuadro de controles) y,con la opción Cuadro combinadoseleccionada, dibujamos un Com-boBox junto al botón de comandoexistente. A continuación, pasa-mos al modo de diseño (pulsandosobre el botón correspondiente enla barra de herramientas Cuadrode controles) y, a través delcomando Propiedades del menú contextual (desplegado al pulsar conel botón derecho sobre el objeto correspondiente) del cuadro combina-do modificamos sus propiedades Name, aplicando el valor cmbEstilo-Grafica, y Style, que debe tomar el valor 2 – fmStyleDropDownList yque imposibilita que el usuario introduzca valores por teclado en elcuadro combinado, lo que nos evitará tener que hacer una posteriordepuración.

Inmediatamente después, pasamos a progra-mar el evento Open del libro de trabajo, ya que

cada vez que se abra el documento ha de rellenarse la lista de valoresdel cuadro combinado. En realidad, lo único que haremos en estasubrutina será llamar al procedimiento InicializarComboGráficas queescribiremos a continuación en el código de la hoja 1 del documento.Así, tras acceder a la ventana decódigo de Microsoft Visual Basic(Herramientas/Macro/Editor deVisual Basic), abrimos la ventanade código del libro de trabajohaciendo un doble clic con elratón sobre el objeto ThisWorkbo-ok en el árbol de la ventana Pro-yecto. Una vez allí, escribimos lallamada al procedimiento querellenará el cuadro combinado y lainicialización del mismo para cadaejecución:

Private Sub Workbook_Open()'Al abrir el libro de trabajo llamamos al'procedimiento InicializarComboGraficas'que se encuentra en la hoja 1 del libro de'trabajo y que rellena el cuadro combinado'con una serie de valoresWorksheets(1).InicializarComboGraficas'Después especificamos un estilo de barras 2D,'que ocupa la primera posición (0) de la lista,'a la gráfica como valor predeterminadoWorksheets(1).cmbEstiloGrafica.ListIndex = 0

End Sub

MACROS EXCEL

computer!dea abril 200377

PASO 2

Finalmente, escribimos el código del procedi-miento InicializarComboGraficas y el de la

subrutina asociada al evento de cambio de valor del cuadro combi-nado (Change) tras el código escrito en la versión anterior en el laHoja 1. Esencialmente, lo que haremos en la subrutina Inicializar-ComboGraficas será rellenar el cuadro combinado con valorescorrespondientes a diferentes tipos de gráficas compatibles (barrasy columnas). Esos valores serán el nombre descriptivo del tipo degráfica, ya que al programar el evento Change del combo asociare-mos esas descripciones al valor real de la constante correspondien-te por medio de una estructura Select Case. Una posibilidad paracodificar ambos procedimientos podría ser la siguiente:

Public Sub InicializarComboGraficas()'Procedimiento a través del cual rellenaremos el'cuadro combinado de la hoja de cálculo con las'posibles gráficas que utilizar

'Primero borramos el "combo" de los valores'que pudiera guardar de la última ejecucióncmbEstiloGrafica.Clear'Después, utilizando el método AddItem de los'cuadros combinados añadimos títulos a las'entradas (necesariamente strings)cmbEstiloGrafica.AddItem "Columnas 2D"cmbEstiloGrafica.AddItem "Columnas 3D"cmbEstiloGrafica.AddItem "Barras 2D"cmbEstiloGrafica.AddItem "Barras 3D"'de todas las posibilidades de gráficos ofreceremos'aquellas de tipo barra que resulten representativas'de los datos que mostrar

End Sub

Private Sub cmbEstiloGrafica_Change()'Al cambiar el valor del "combo" de gráficas

With Worksheets(1).ChartObjects(1).Chart'Primero accedemos al área gráfica del primer'objeto gráfico de la primera hoja del libro'de trabajo

Select Case cmbEstiloGrafica.ListIndex'Analizamos la posición en la lista del valor'actual del cuadro combinado

Case 0'Si es Barras 2D ocupa la posición 0

.ChartType = xlColumnClustered'Especificamos el valor correspondiente'a su propiedad ChartType

Case 1'Si es Barras 3D ocupa la posición 1

.ChartType = xl3DColumn'Especificamos el valor correspondiente'a su propiedad ChartType

Case 2'Si es Filas 2D ocupa la posición 2

.ChartType = xlBarClustered'Especificamos el valor correspondiente'a su propiedad ChartType

Case 3'Si es Filas 3D ocupa la posición 3

.ChartType = xl3DBarClustered'Especificamos el valor correspondiente'a su propiedad ChartType

End SelectEnd With

End Sub

PASO 1

Modificar el tipo de gráficaen tiempo de ejecución

▼▼

PASO 3

CI 076-077 20/3/03 19:22 Página 2