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
 

Leer las respuestas

#1 Héctor Miguel
20/04/2006 - 01:11 | Informe spam
hola, Maty !

1) [hasta donde se]... el uso de controles combobox y listbox -> de multiples columnas 'sirve' [o es utilizado]...
[principalmente] para mostrar datos que -> tienen relacion [en varias columnas] CON SU MISMA 'FILA' :-(
[p.e.] puedes 'ampliar' la informacion de un dato/fila en las siguientes columnas [pero] SIEMPRE de la misma fila ;)

2) si tu intencion [o necesidad] es que el usuario pueda 'diferenciar' la columna seleccionada [y no solo la fila]...
[me parece que] necesitaras 'mostrar' TODAS las opciones -> en una sola columna :-(
tal como esta el codigo de tu funcion HojaElegida ;)

3) [solo una 'sugerencia']... existe un tipo de datos 'especifico' para estableer referencias a objetos 'hoja de calculo'...
utiliza -> As Worksheet => en lugar de -> As Object

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

... 9 hojas... 3 Verdes, 3 Azules y 3 Rojas, cada una... contiene 4 rangos iguales... con datos diferentes.
Para ver la informacion que le interesa, el usuario debe seleccionar una hoja y un rango
asi el sistema le presenta el resultado en una hoja llamada 'Vistas'
... un UserForm... un ComboBox1... aparecen las 9 hojas organizadas en 3 columnas
... un ComboBox2 para seleccionar uno de los 4 Rangos.
... los datos se presentan asi 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
... Como se deberia estructurar la function HojaElegida, para seleccionar exactamente una de las 9 hojas, usando un ComboBox?
... funciona muy bien cuado se trata de una sola columna, pero falla cuando se trata de 3 columnas.
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

Preguntas similares