ComboBox de 3 columnas

18/04/2006 - 17:22 por Maty | Informe spam
Estimados Señores:
Tengo un archivo Excel con 9 hojas, clasificadas así: 3 Verdes, 3 Azules y 3
Rojas, cada una de esas hojas contiene 4 rangos iguales pero, obviamente, con
datos diferentes.

Para ver la información que le interesa, el usuario debe seleccionar una
hoja y un rango, así el sistema le presenta el resultado en una hoja llamada
“Vistas”

Para lograr ese proceso, he diseñado un UserForm que contiene un ComboBox1
donde aparecen las 9 hojas organizadas en 3 columnas, y un ComboBox2 para
seleccionar uno de los 4 Rangos.

En términos de columnas los datos se presentan así en una hoja auxiliar:

VERDES AZULES ROJOS RANGOS
Verde1 Azul1 Roja1 Rango 1
Verde2 Azul2 Roja2 Rango 2
Verde3 Azul3 Roja3 Rango 3
Rango 4

La consulta concreta es: ¿Cómo se debería estructurar la “function
HojaElegida”, para seleccionar exactamente una de las 9 hojas, usando un
ComboBox?

La estructura de la “function HojaElegida”, funciona muy bien cuado se trata
de una sola columna, pero falla cuando se trata de 3 columnas.

Muchas gracias por su atención, Maty

A continuación presento todas las rutinas utilizadas para lograr ese proceso:

Option Explicit

Private Sub ComboBox1_Change() 'Seleccioina Hoja
End Sub

Private Sub ComboBox2_Change() 'Selecciona Rango
End Sub

Private Sub ComboBox4_Change()
End Sub

Private Sub CommandButton2_Click() 'Aceptar
CopiarRango
End Sub

Private Sub CommandButton3_Click() 'Salir
Sheets("Menú").Select
Range("A1").Select
Unload Me
End Sub

Private Function HojaElegida() As Object
Dim oRetorno As Object
Select Case ComboBox1.ListIndex
Case 0
Set oRetorno = Sheets("Verde1")
Case 1
Set oRetorno = Sheets("Verde2")
Case 2
Set oRetorno = Sheets("Verde3")
Case 3
Set oRetorno = Sheets("Azul1")
Case 4
Set oRetorno = Sheets("Azul2")
Case 5
Set oRetorno = Sheets("Azul3")
Case 6
Set oRetorno = Sheets("Rojo1")
Case 7
Set oRetorno = Sheets("Rojo2")
Case 8
Set oRetorno = Sheets("Rojo3")
End Select
Set HojaElegida = oRetorno
End Function

Private Function RangoElegido() As String
Select Case ComboBox2.ListIndex
Case 0
RangoElegido = "A1:B6"
Case 1
RangoElegido = "A8:B13"
Case 2
RangoElegido = "A15:B20"
Case 3
RangoElegido = "A22:B27"
End Select
End Function

Private Sub CopiarRango()
Dim oHoja As Object
Dim oRango As Range
Dim sRango As String
Dim Vistas As Object
Set oHoja = HojaElegida
sRango = RangoElegido
If (oHoja Is Nothing) Or (sRango = vbNullString) Then
MsgBox "Debe elegir la hoja y el rango"
Exit Sub
End If
Set oRango = oHoja.Range(sRango)
oRango.Copy
Sheets("Vistas").Activate
Sheets("Vistas").Range("A5").PasteSpecial
Sheets("Vistas").Range("A3").Value = oHoja.Name
Sheets("Vistas").Range("B3").Value = Me.ComboBox2
UserForm1.Hide
End Sub

Private Sub UserForm_Click()
End Sub

Preguntas similare

Leer las respuestas

#6 Héctor Miguel
21/04/2006 - 20:22 | Informe spam
hola, Maty !

Lo cierto es que para mis necesidades se requiere que el usuario tenga a la vista las 3 columnas...
... para resolver el problema de... haber marcado una hoja en mas de un ComboBox...
Private Sub CommandButton5_Click()
Unload Me
UserForm1.Show
End Sub
... no es nada elegante, pero si funciona. Sin embargo, sigo pensando que a lo mejor hay una forma en que el usuario
al marcar una segunda hoja en otro ComboBox, automaticamente se borre la anterior hoja marcada en cualquiera de los otros 2 [...]



suponiendo que los combos con los nombres de las hojas son ComboBox1, ComboBox2 y ComboBox3
[incluso podrias 'ahorrarte' la funcion para estabecer cual es la 'hoja elegida' si la cambias por una variable] ;)
prueba con algo +/- como lo siguiente [modifica donde corresponda]...
en el modulo de codigo del formulario ==Dim Hoja_elegida As Worksheet
Private Sub ComboBox1_Change()
If ComboBox1.ListIndex = -1 Then Exit Sub
Set Hoja_elegida = Worksheets(ComboBox1.Text)
ComboBox2.ListIndex = -1
ComboBox3.ListIndex = -1
End Sub
Private Sub ComboBox2_Change()
If ComboBox2.ListIndex = -1 Then Exit Sub
Set Hoja_elegida = Worksheets(ComboBox2.Text)
ComboBox1.ListIndex = -1
ComboBox3.ListIndex = -1
End Sub
Private Sub ComboBox3_Change()
If ComboBox3.ListIndex = -1 Then Exit Sub
Set Hoja_elegida = Worksheets(ComboBox3.Text)
ComboBox1.ListIndex = -1
ComboBox2.ListIndex = -1
End Sub

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#7 Maty
21/04/2006 - 22:42 | Informe spam
Estimado Héctor:
Simplemente fantástico, resultó mucho mejor de lo que me imaginaba. Un
millón de gracias.
Maty

"Héctor Miguel" escribió:

hola, Maty !

> Lo cierto es que para mis necesidades se requiere que el usuario tenga a la vista las 3 columnas...
> ... para resolver el problema de... haber marcado una hoja en mas de un ComboBox...
> Private Sub CommandButton5_Click()
> Unload Me
> UserForm1.Show
> End Sub
> ... no es nada elegante, pero si funciona. Sin embargo, sigo pensando que a lo mejor hay una forma en que el usuario
> al marcar una segunda hoja en otro ComboBox, automaticamente se borre la anterior hoja marcada en cualquiera de los otros 2 [...]

suponiendo que los combos con los nombres de las hojas son ComboBox1, ComboBox2 y ComboBox3
[incluso podrias 'ahorrarte' la funcion para estabecer cual es la 'hoja elegida' si la cambias por una variable] ;)
prueba con algo +/- como lo siguiente [modifica donde corresponda]...
en el modulo de codigo del formulario ==> Dim Hoja_elegida As Worksheet
Private Sub ComboBox1_Change()
If ComboBox1.ListIndex = -1 Then Exit Sub
Set Hoja_elegida = Worksheets(ComboBox1.Text)
ComboBox2.ListIndex = -1
ComboBox3.ListIndex = -1
End Sub
Private Sub ComboBox2_Change()
If ComboBox2.ListIndex = -1 Then Exit Sub
Set Hoja_elegida = Worksheets(ComboBox2.Text)
ComboBox1.ListIndex = -1
ComboBox3.ListIndex = -1
End Sub
Private Sub ComboBox3_Change()
If ComboBox3.ListIndex = -1 Then Exit Sub
Set Hoja_elegida = Worksheets(ComboBox3.Text)
ComboBox1.ListIndex = -1
ComboBox2.ListIndex = -1
End Sub

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.



Respuesta Responder a este mensaje
#8 Maty
22/04/2006 - 20:05 | Informe spam
Estimado Héctor:
Entiendo que a través de este foro no se puede adjuntar archivos, pero el
problema que necesito plantearte requiere que tengas a la mano un par de
pequeños archivos. Será posible que te los pueda hacer llegar de alguna forma?

Posiblemente a ti te han ocurrido casos extraños con aplicaciones excel,
para mi el caso mas extraño que me ha sucedido es el que mas abajo te
describo, hasta un colega me ha dicho que el libro parece estar embrujado.

Caso extraño: Tengo dos archivos (Proyecta.xls y Simula.xls). Cada uno tiene
3 Hojas, (Llamar, Vistas y Carátula, esta última oculta). Al pulsar el botón
CARATULA en la Hoja Llamar, se copia la Hoja Carátula en la Hoja Vistas.
Ambos archivos tienen exactamente el mismo código en sus respectivos Editores
de Visual Basic, sin embargo, por alguna razón desconocida, la
personalización del pie de página que realiza ese código, no surte el mismo
efecto en los dos archivos.

Se espera que al imprimir la página o al pulsar el icono “Vista Preliminar”
se vea el siguiente pie de página:
Sección Izquierda: Nombre del Archivo y Nombre de la Hoja
Sección central: # Página
Sección derecha: Fecha

Ello ocurre perfectamente con el archivo Proyecta, pero no con el archivo
Simula, el cual presenta el siguiente pie de página:
Sección Izquierda: Fecha y Nombre de la Hoja
Sección central: # Página
Sección derecha: En blanco

Donde estará la trampita?

"Maty" escribió:

Estimado Héctor:
Simplemente fantástico, resultó mucho mejor de lo que me imaginaba. Un
millón de gracias.
Maty

"Héctor Miguel" escribió:

> hola, Maty !
>
> > Lo cierto es que para mis necesidades se requiere que el usuario tenga a la vista las 3 columnas...
> > ... para resolver el problema de... haber marcado una hoja en mas de un ComboBox...
> > Private Sub CommandButton5_Click()
> > Unload Me
> > UserForm1.Show
> > End Sub
> > ... no es nada elegante, pero si funciona. Sin embargo, sigo pensando que a lo mejor hay una forma en que el usuario
> > al marcar una segunda hoja en otro ComboBox, automaticamente se borre la anterior hoja marcada en cualquiera de los otros 2 [...]
>
> suponiendo que los combos con los nombres de las hojas son ComboBox1, ComboBox2 y ComboBox3
> [incluso podrias 'ahorrarte' la funcion para estabecer cual es la 'hoja elegida' si la cambias por una variable] ;)
> prueba con algo +/- como lo siguiente [modifica donde corresponda]...
> en el modulo de codigo del formulario ==> > Dim Hoja_elegida As Worksheet
> Private Sub ComboBox1_Change()
> If ComboBox1.ListIndex = -1 Then Exit Sub
> Set Hoja_elegida = Worksheets(ComboBox1.Text)
> ComboBox2.ListIndex = -1
> ComboBox3.ListIndex = -1
> End Sub
> Private Sub ComboBox2_Change()
> If ComboBox2.ListIndex = -1 Then Exit Sub
> Set Hoja_elegida = Worksheets(ComboBox2.Text)
> ComboBox1.ListIndex = -1
> ComboBox3.ListIndex = -1
> End Sub
> Private Sub ComboBox3_Change()
> If ComboBox3.ListIndex = -1 Then Exit Sub
> Set Hoja_elegida = Worksheets(ComboBox3.Text)
> ComboBox1.ListIndex = -1
> ComboBox2.ListIndex = -1
> End Sub
>
> si cualquier duda [o informacion adicional]... comentas ?
> saludos,
> hector.
>
>
>
Respuesta Responder a este mensaje
#9 Héctor Miguel
22/04/2006 - 21:14 | Informe spam
hola, Maty !

Entiendo que a traves de este foro no se puede adjuntar archivos
pero el problema que necesito plantearte requiere que tengas a la mano un par de peque#os archivos.
Sera posible que te los pueda hacer llegar de alguna forma?



puedes enviarlos [plis, en .ZIP] si quitas de la direccion que aparece el 'NO...SPAM...PLS'

... el caso mas extra#o que me ha sucedido es el que mas abajo te describo
... un colega me ha dicho que el libro parece estar embrujado.
... dos archivos (Proyecta.xls y Simula.xls). Cada uno tiene 3 Hojas (Llamar, Vistas y Caratula, esta ultima oculta).
Al pulsar el boton CARATULA en la Hoja Llamar, se copia la Hoja Caratula en la Hoja Vistas.
Ambos archivos tienen exactamente el mismo codigo en sus respectivos Editores de Visual Basic
sin embargo, por alguna razon desconocida, la personalizacion del pie de pagina que realiza ese codigo
no surte el mismo efecto en los dos archivos.
Se espera que al imprimir la pagina o al pulsar el icono "Vista Preliminar" se vea el siguiente pie de pagina:
Seccion Izquierda: Nombre del Archivo y Nombre de la Hoja Seccion central: # Pagina Seccion derecha: Fecha
Ello ocurre perfectamente con el archivo Proyecta, pero no con el archivo Simula, el cual presenta el siguiente pie de pagina:
Seccion Izquierda: Fecha y Nombre de la Hoja Seccion central: # Pagina Seccion derecha: En blanco
Donde estara la trampita?



puedes exponer algunos datos en el foro ? [como p.e.]:
-> el tipo de 'boton' que tienes incrustado en la hoja 'caratula' [formularios o cuadro de controles]
-> el codigo que hace el copiado de la hoja ?
-> el codigo que 'personaliza' el pie de pagina ? [asi como en que -tipo de- modulo se encuentra]
-> cual es el pie de pagina que 'muestra' ANTES de ser copiada ?

saludos,
hector.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida