Código VBA: verifique lo que está seleccionado actualmente en Excel
Muchas veces queremos determinar qué tipo de objeto se ha seleccionado en Excel. Ayuda con la verificación de errores antes de ejecutar un fragmento de código.
código básico
Esta acción es solo una sola línea de código:
Sub pruebaSelección()MsgBox TypeName(Selección)End Sub
Incorporar el cheque en una declaración Select
Si desea tratar los tipos de selección de manera diferente, puede resultar útil una declaración de caso similar a la siguiente.
Sub testSelection()Seleccione Caso TipoNombre(Selección) Caso "ChartArea", "ChartTitle" 'Hacer algo en el gráfico Caso "Rango" 'Hacer algo en el rango Caso De lo contrario 'Oh, cielos, no es una selección aceptable. 'Haz algo más.End SelectEnd Sub
Permitir que se seleccione cualquier parte de un objeto
Algunos objetos, como los gráficos, pueden resultar difíciles de seleccionar. Dependiendo de dónde hagan clic los usuarios, la selección puede estar en Serie, Leyenda o Barras de error. Todos estos son partes del ChartObject. Para trabajar con el gráfico sin importar dónde haya hecho clic el usuario, suba el Modelo de objetos de documento hasta que TypeName sea "ChartObject". Mire el código a continuación para ver un ejemplo.
'Cree una variable llamada tempSelection para contener la selecciónDim tempSelection As ObjectSet tempSelection = Selection'El bucle sigue buscando el padre de tempSelection hasta que llegue a la parte superior del modelo de objetos de documento. Haga mientras TypeName(tempSelection) "Aplicación" 'Si tempSelection es igual a ChartObject, salga del bucle; de lo contrario, busque el padre de tempSelection y vuelva a realizar el bucle. Si TypeName(tempSelection) = "ChartObject" Luego salga, haga lo contrario, establezca tempSelection = tempSelection.Parent End IfLoop'Si se seleccionó alguna parte de un gráfico incrustado, MsgBox muestre "ChartObject"; si no, se mostrará "Aplicación"MsgBox TypeName(tempSelection)
Los gráficos también pueden ser hojas, en lugar de incrustarse. Sus comportamientos son ligeramente diferentes, por lo que es importante diferenciar entre una hoja de gráfico y un gráfico incrustado.
Una hoja de gráfico tiene la siguiente estructura de modelo de objetos de documento.
Aplicación - Libro de trabajo - Gráfico - ChartArea ...
Un gráfico incrustado tiene la siguiente estructura de modelo de objetos de documento.
Aplicación - Libro de trabajo - Hoja de trabajo - ChartObject - Gráfico - ChartArea ...
Existe una manera sencilla de distinguir entre los dos tipos de gráficos.
- Sólo los gráficos incrustados tienen un ChartObject
- Si el padre del gráfico es un libro de trabajo, es una hoja de gráfico,
El siguiente código mostrará un mensaje de Gráfico si la selección es una hoja de gráfico.
Dim tempSelection como objeto Establecer tempSelection = SelectionDo Mientras TypeName(tempSelection) "Aplicación" Si TypeName(tempSelection) = "Gráfico" y _ TypeName(tempSelection.Parent) = "Libro de trabajo" Entonces salga Haga lo contrario Establezca tempSelection = tempSelection.Parent End IfLoopMsgBox TypeName (selección temporal)
Una lista de todas las selecciones posibles.
Según la información del Explorador de objetos, creo que la lista completa de posibles selecciones sería:
- Eje
- Título del eje
- Cuadro
- Área del gráfico
- Objeto gráfico
- Objetos de gráfico
- Gráficos
- Titulo del gráfico
- Etiqueta de datos
- Etiquetas de datos
- Tabla de datos
- Etiqueta de unidad de visualización
- Barras abajo
- Líneas de caída
- Barras de error
- Piso
- Líneas de cuadrícula
- HolaLoLines
- Líneas guía
- Leyenda
- Entrada de leyenda
- ListaColumna
- Lista de objetos
- ListaFila
- Objeto OLE
- Objetos OLE
- Área de parcela
- Punto
- Rango
- Serie
- SerieLíneas
- Forma
- Rango de formas
- Hojas
- Rango de texto2
- Etiquetas de marca
- Línea de tendencia
- Barras arriba
- Paredes
- Hoja de cálculo
- Hojas de trabajo
- formas
- Tabla dinámica
No es necesario tratar cada selección de manera diferente, objetos similares pueden tratarse de la misma manera. Vea el ejemplo de Seleccionar caso en el código anterior.
Deja una respuesta