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