Buscar hoja y vista preliminar de rango excel

Tengo un problemita que no he podido resolver, y les paso a describir para que me ayuden:

Tengo un userform con dos combobox y un botón, el primer combobox1 me busca el nombre de la hoja, y el segundo combobox busca el rango a visualizar. El problema resulta cuando por ejemplo el combobox1 no encuentra el nombre de la hoja, pues quiero que si no encuentra el dato me envíe un mensaje de "No encontrado" y si existe la hoja, pues que me deje seguir. Aquí las macros que utilizo:

Private Sub ComboBox1_Change()
If ComboBox1 <> "" Then
Worksheets(ComboBox1.Text).Activate
Else
        MsgBox "No existe la planilla " & ComboBox1.Text
End If
End Sub
Private Sub CommandButton1_Click()
If ComboBox2.Text = "PLANILLA CIERRE" Then
Unload Me
ActiveSheet.PrintPreview
End If
    If ComboBox2.Text = "PLANILLA IMO" Then
    Unload Me
    Range("A32:D65").Select
    Selection.PrintPreview
    Hoja1.Activate
    End If
If ComboBox2.Text = "PLANILLA CERES" Then
Unload Me
Range("F32:I65").Select
Selection.PrintPreview
Hoja1.Activate
End If
    If ComboBox2.Text = "PLANILLA CONV." Then
    Unload Me
    Range("K32:N65").Select
    Selection.PrintPreview
    Hoja1.Activate
    End If
If ComboBox2.Text = "DINERO" Then
Unload Me
Range("A72:D80").Select
Selection.PrintPreview
Hoja1.Activate
End If
    If ComboBox2.Text = "GRANO" Then
    Unload Me
    Range("A82:E88").Select
    Selection.PrintPreview
    Hoja1.Activate
    End If
If ComboBox2.Text = "GASTOS" Then
Unload Me
Range("A90:C95").Select
Selection.PrintPreview
Hoja1.Activate
End If
    If ComboBox2.Text = "ADELANTOS" Then
    Unload Me
    Range("K18:M21").Select
    Selection.PrintPreview
    Hoja1.Activate
    End If
Hoja1.Activate
End Sub

Se que la macro es grande, pero si pueden hacerlo mas corto seria mejor.

1 respuesta

Respuesta
1

H o l a:

Cambia tu código por lo siguiente:

Private Sub CommandButton1_Click()
'Por.Dante Amor
    If ComboBox1 = "" Then
        MsgBox "selecciona la hoja", vbCritical, "ERROR"
        ComboBox1.SetFocus
        Exit Sub
    End If
    '
    If ComboBox2 = "" Then
        MsgBox "selecciona un rango a visualizar", vbCritical, "ERROR"
        ComboBox2.SetFocus
        Exit Sub
    End If
    '
    Set h = Sheets(ComboBox1.Value)
    Select Case ComboBox2
        Case "PLANILLA CIERRE": Set r = h.Cells
        Case "PLANILLA IMO":    Set r = h.Range("A32:D65")
        Case "PLANILLA CERES":  Set r = h.Range("F32:I65")
        Case "PLANILLA CONV.":  Set r = h.Range("K32:N65")
        Case "DINERO":          Set r = h.Range("A72:D80")
        Case "GRANO":           Set r = h.Range("A82:E88")
        Case "GASTOS":          Set r = h.Range("A90:C95")
        Case "ADELANTOS":       Set r = h.Range("K18:M21")
        Case Else:              MsgBox "El dato seleccionado no tiene rango", vbCritical, "ERROR"
    End Select
    Application.ScreenUpdating = True
    Me.Hide
    r.PrintPreview
    Me.Show
    Hoja1.Activate
End Sub
'
Private Sub UserForm_Initialize()
'Por.Dante Amor
    ComboBox1.Style = 2             'solamente puedes seleccionar datos del combo
    ComboBox2.Style = 2             'solamente puedes seleccionar datos del combo
    '
    For Each h In Sheets
        ComboBox1.AddItem h.Name    'carga los nombres de las hojas
    Next
    ComboBox2. AddItem "PLANILLA CIERRE"
    ComboBox2. AddItem "PLANILLA IMO"
    ComboBox2. AddItem "PLANILLA CERES"
    ComboBox2.AddItem "PLANILLA CONV."
    ComboBox2. AddItem "DINERO"
    ComboBox2. AddItem "GRANO"
    ComboBox2. AddItem "GASTOS"
    ComboBox2. AddItem "ADELANTOS"
End Sub

Notas:

1. Ya no es necesario el evento ComboBox1_Change

2. Es necesario el evento initialize para cargar los datos en los combos. En el combobox1, se cargarán los nombres de las hojas.

3. Agregué a los combox la propiedad Style, para que solamente puedas seleccionar un dato que está dentro del combobox, de esa forma no habrá error de que la hoja no existe.

4. No es necesario cerrar el formulario, con estas instrucciones, el formulario solamente se ocultará, te presenta la vista previa, cuando cierras la vista previa, te regresa al formulario para que selecciones otra hoja u otro rango:

    Application.ScreenUpdating = True
    Me. Hide
    r. PrintPreview
    Me.Show

Prueba y me comentas.


':)
'S aludos. D a n t e   A m o r . R ecuerda valorar la respuesta. G racias
':)R ecuerda valorar la respuesta. G r a c i a s

¡Gracias!  Eres el mejor amigo Dante

Estimado dante, quería pedirte un favor extra: En el combobox 1 solo quiero que salga las hojas a partir de la 3 hacia adelante, como lo hago?

For Each h In Sheets
        ComboBox1.AddItem h.Name

Cambia por esto:

    For Each h In Sheets
        If h.Index >= 3 Then ComboBox1.AddItem h.Name           
    Next

sal u dos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas