¿Cómo copio valor de ComboBox en Hoja, a celda de misma Hoja, habiendo usado ya evento Click()?

Estoy aprendiendo
VBA y no se como copiar un valor seleccionado en un ComboBox ActiveX, el cual
se ubica en una hoja, a una celda de la misma hoja.
Lo que pasa es que ya tengo un
Evento Click asociado al ComboBox, lo estoy utilizando para seleccionar la
alternativa requerida de la lista a través de los siguientes 2 procedimientos:
Private Sub ComboClasif_Click()
'El combobox no queda activado
ActiveCell.Activate
End Sub
Private Sub Worksheet_Activate()
'Actualizo el combobox cada vez que activo la página
With Sheets( Clasificaciones )
'Si no hay información: limpio el combobox
If .[a2] = Then
ComboClasif.Clear
Exit Sub
End If
'Establezco los datos de entrada mediante la propiedad List
ComboClasif.List() = .Range(.[a2], .[a1].End(xlDown)).Value
End With
End Sub
y a través de este último hacer
la selección correspondiente:
Private Sub
ComboClasif_Change()
Hoja7.Select
Cells(ComboClasif.ListIndex + 2, 1).Select 'Obtener dato del renglón
seleccionado
End Sub

1 Respuesta

Respuesta
1

No entiendo porque la instrucción activecell. Activate, ¿qué quieres hacer con eso o que quieres evitar?

Hola Experto:
En honor a la verdad la instrucción activecell.actívate la
coloqué porque alguien me recomendó que la incluyera.
Te platico lo que pretendo:
1.
Tengo una hoja con una serie de gráficos
dispuestos verticalmente y entre uno y otro existe alguna información.
2.
Pretendo que solo se muestre un gráfico a la vez
con alguna de su información correspondiente.
3.
Para ello, en una columna a la izquierda le di
valores diferentes a las celdas acordes con cada fila donde se sitúa cada
gráfico y a cada fila donde hay información acorde al gráfico que pretendo
mostrar.
4.
Una vez hecho esto coloque un filtro para la
columna mencionada, de tal manera que si selecciono el valor 1 solo me va a
mostrar las filas que lo contienen y que tiene que ver son el gráfico 1 y su
información y así sucesivamente y me va a ocultar todos los demás y las filas con
valores vacíos.
5.
Grabé macros en las que iba seleccionando cada
grupo.
6.
Inserté un ComboBox a la Hoja el cual lleva por
nombre ComboClasif, a donde llevo para su selección, los datos contenidos en
otra parte de la hoja, los cuales son los nombres de los gráficos.
7.
Estas macros pretendo convertirlas en
procedimientos a los que llame a través de Call en una instrucción Select Case
incluida en algún procedimiento del ComboBox
8.
Posteriormente ocultaré la columna del filtro,
la lista de nombres de los gráficos y las áreas no utilizadas.
9.
El problema es que no logro manejar la
información contenida en el ComboBox; ahora estoy intentando hacerlo con
ListIndex, para que lo que busque sea la posición del nombre del gráfico en la
lista, pero no encuentro tampoco como hacerle.
10.
Me encontré que un Combo Box insertado en una
hoja no tiene disponible el evento Enter()
Espero que mi explicación sea entendible y que me disculpes
si digo algún disparate; sucede que apenas estoy intentando aprender VBA.
Gracias anticipadas y saludos

Bien todo lo que me comentas, veo que lo has pensado.

¿Por qué quieres el evento Enter?

Primero, pon la propiedad Style del combobox en DropDownList, lo puedes hacer en el cuadro de propiedades, no hace falta que sea por código.

Efectivamente tienes que usar la propiedad ListIndex, pero dentro del evento Change del combobox, q ees el evento que se va a ejecutar cada vez que cambie/seleccione un valor del combo, ¿supongo qué eso querías decir con el evento enter?

Recuerda que vba para excel dispone de una ayuda bastante buena para casos sencillos como propiedades y eventos, ya que siempre tiene un ejemplo.

Selecciona la palabra Listindex en tu código y presiona la tecla F1, así se te habría la ayuda de vba para excel y buscara la propiedad Listindex, si no lo encuentras o sigues sin aclararte en la forma de usarlo preguntame otra vez y te doy el código.

Hola duainsulch, si te parece voy a arrancar desde cero intentando ser más ordenado, para ello te inserté un enlace de MediaFire de donde puedes bajar el archivo correspondiente, y a continuación te describo propósito, objetivos y problema.

RESUMEN DEL OBJETIVO DE LA HOJA GRÁFICOS Y LO QUE PRETENDO
HACER CON ELLA:
Me voy a referir a la hoja Gráficos, cuyo origen de
información de cada uno de los que contiene, se ubica en la hoja IdYVal_Var y,
a su vez los datos que aparecen entre cada gráfico, se derivan de la hoja
Res_VarVal.


En el encabezado de la hoja se ubican dos cuadros de
validación (color cian con marco naranja). Al seleccionar la alternativa
deseada en el titulado ALCANCE-PROBLEMÁTICA, se jalan los datos necesarios para
generar los gráficos desde la hoja IdYVal_Var, así como los que se requieren para
los datos situados en cada gráfico desde la hoja Res_VarVal.


Lo que pretendo hacer es que solo se muestre un gráfico a la
vez, sin tener que recorrer hacia abajo la hoja hasta encontrar el que se
desea.


Se me ocurrió que normalmente esto lo podría hacer, situando
un filtro en una columna, en la que cada celda identificada con cada renglón
que pretendo mostrar, tuviese un caracter único de identificación para cada
gráfico (en este caso la columna B).


Así lo hice y con ello puedo filtrar las filas correspondientes
a cada gráfico, pero ahora quiero que se efectúe la tarea con solo identificar
y seleccionar el gráfico correspondiente.


Para ello, originalmente busque como hacerlo por medio de la
selección adecuada en el cuadro de validación que lleva por título
CLASIFICACIÓN DEL GRÁFICO (color cian con marco naranja), y no encontré como
hacerlo; posteriormente lo intenté a través de un ComboBox de Formulario y
tampoco me resultó; y por último, como si creo que puede funcionar, que es a
través de un ComboBox ActiveX al cual estoy buscando asociarle código.


PROPÓSITOS DEL CÓDIGO:
a) en primera instancia me permita hacer la identificación y
selección


b) que una vez seleccionado, me guarde la ubicación en la
que se encuentra la selección en la lista origen, dentro de una variable
c) que dentro del procedimiento que maneja el evento


Change(), y a través de una instrucción Select Case, en donde cada caso este
identificado con su número de ubicación en la lista (que es el que me sirvió
para guardarla en la variable a la que me refiero en b), compare con la
variable mencionada y, a través de ella, vaya al subprocedimiento de filtrado propio,
por medio de una instrucción Call y lo
ejecute.


Para cada una de las intenciones descritas anteriormente, se
me presenta un problema que no he podido resolver. Por lo pronto, para manejar
las consultas como casos separados, me concentraré en la complicación que tiene
que ver con la primera, la identificación y selección de la opción.


PROBLEMA:
ComboBox que no despliega el listado correspondiente
Cuando abro el libro e intento desplegar la lista del Combo
que provisionalmente está arriba de donde dice CLASIFICACIÓN DE GRÁFICO, que en
este caso se llama ComboClasif, solo me despliega un espacio vacío, y para que
funcione correctamente necesito irme al código, situarme en el procedimiento Worksheet_Activate()
y darle click al botón Ejecutar Sub/UserForm (w) de la barra de
herramientas. Además, si hago alguna selección una vez realizada la acción para
que funcione el combo y guardo, cuando vuelvo a abrir el libro me presenta la
opción seleccionada antes.


Una vez que funcione todo correctamente, pretendo que el
combo referido en el párrafo anterior, sustituya
al cuadro de validación correspondiente.

No veo donde aparezca el enlace. Por si las dudas aquí va:

http://www.mediafire.com/?emeeo7q1qy45vwz

La respuesta a tu problema es sencilla: Al abrir el libro directamente en cierta pagina, no se ejecuta el evento Activate de esa página, por lo que la solución es copiar el código del evento en el evento workbook_open (dentro de Thisworkbook). Y para que la selección del combo sea siempre la misma al abrir, añades al final de ese código la instrucción

combobox1.listindex = 0

Asi se te coloca en el primer valor de la lista del combo (o en el numero que quieras), te pego el código que tienes que poner en workbook_open, pues hay que añadir un punto cuando haces referencia al combo o daría error por no saber a que hoja se refiere:

Private Sub Workbook_Open()
'Actualizo el combobox cada vez que activo la página
With Sheets("Gráficos")
 'Si no hay información: limpio el combobox
 If .[m13] = "" Then
 ComboClasif.Clear
 Exit Sub
 End If
 'Establezco los datos de entrada mediante la propiedad List
 .ComboClasif.List() = .Range(.[m13], .[m12].End(xlDown)).Value
 .ComboClasif.ListIndex = 0
End With
End Sub

¿había alguna cosa mas al respecto?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas