Download - Macros Excel

Transcript
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