Uso del Elseif

Hola:
Tengo una hoja excel en la que le he puesto un botón de comando. Este deberá detectar la última celda rellena de la columna C y según su valor imprimir unas páginas u otras.
Te adjunto mi macro a ver si me encuentras el fallo. Hago el paso a paso y salvo que sea menor de 9 (que si me salta el mensaje), siempre me imprime la primera página (la opción 2). Si u fuera 80 imprimiría la página 1 cuando tendría que ser la 1 y la 2.
Private Sub CommandButton2_Click()
u = Range("C" & Rows.Count).End(xlUp).Row 'localizamos la última celda con valor
If u < 9 Then 'si es menor de 9 lanzamos el mensaje, si no seguimos
        MsgBox "No hay nada que imprimir"
    ElseIf 8 < u <= 78 Then 'si esta entre 8 y 78 imprimimos la página 1
        PrintOut from:=1, to:=1, copies:=1
    ElseIf 78 < u < 153 Then 'si está entre 78 y 153 imprimimos de la 1 a la 2
        PrintOut from:=1, to:=2, copies:=1
    ElseIf u > 152 Then 'si es mayor a 152 imprimimos de la 1 a la 3
        PrintOut from:=1, to:=3, copies:=1
End If
End Sub
¿Dónde está el fallo? Me estoy volviendo loco porque creo que está bien escrito.
Un saludo

3 Respuestas

Respuesta
1
ElseIf u = o Or u <= 75 Then
Con esto ya tienes la guía.
Perdona, presioné el botón equivocado.
ElseIf u = 8 And u > 9 Or u <= 75 Then
Con esto ya tienes la guía.
Respuesta
1
Tu código ha sido corregido y probado..
Solo te faltaba defint el ActiveWindows y la Activesheet antes de Print
Sub MyMacro()
u = Range("C" & Rows.Count).End(xlUp).Row 'localizamos la última celda con valor
If u < 9 Then 'si es menor de 9 lanzamos el mensaje, si no seguimos
        MsgBox "No hay nada que imprimir"
    ElseIf u < 78 Then   'si esta entre 8 y 78 imprimimos la página 1
    ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate _
        :=True
    ElseIf u < 153 Then
    ActiveWindow.SelectedSheets.PrintOut From:=1, To:=2, Copies:=1, Collate _
        :=True
    ElseIf u > 152 Then 'si es mayor a 152 imprimimos de la 1 a la 3
    ActiveWindow.SelectedSheets.PrintOut From:=1, To:=3, Copies:=1, Collate _
        :=True
End If
End Sub
Hola:
Tu respuesta funciona, gracias.
Al final después de darle vueltas encontré esta otra forma que también funciona.
Private Sub CommandButton2_Click()
u = Range("C" & Rows.Count).End(xlUp).Row
If u < 9 Then
MsgBox "No hay nada que imprimir"
Else
    If 8 < u And u < 79 Then
    PrintOut From:=1, To:=1, Copies:=1
    Else
        If 78 < u And u < 153 Then
        PrintOut From:=1, To:=2, Copies:=1
        Else
            If u > 152 And u < 243 Then
            PrintOut From:=1, To:=3, Copies:=1
            Else
            MsgBox "Hay más de 234 registros. Avisar a Carlos"
            End If
        End If
    End If
End If
De todas formas tu manera es mucho más sencilla.
Muchas gracias.
Carlos
Respuesta
1
La verdad es que yo uso otra forma de imprimir:
Sub Impresion_InformeIncendios()
    Dim primera, ultima As Variant
    Worksheets("Informe_Incendios").Unprotect "bomba2010"
    Range("A1").Select
    primera = ActiveCell.Address
    Range("K52").Select
    'Selection.End(xlDown).Select '** Puede ser una alternativa **
    ultima = ActiveCell.Address
    Worksheets("Informe_Incendios").PageSetup.PrintArea = primera & ":" & ultima
    Range("b1").Select
    ActiveSheet.PrintOut
    Worksheets("Informe_Incendios").Protect "bomba2010", True, True, True
End Sub
 Otra forma:
Sub ImpresionConsumo()
    Call AbrirH8
    Dim primera, ultima As Variant
    Dim lineas As Integer
    Worksheets("Informe").Unprotect "bomba2010"
    Range("A1").Select
    primera = ActiveCell.Address
    Range("G10").Select
    lineas = ActiveCell.Value
    Range("K14").Select
    ActiveCell.Offset(lineas, 0).Select
    'Selection.End(xlDown).Select
    ultima = ActiveCell.Address
    Worksheets("Informe").PageSetup.PrintArea = primera & ":" & ultima
    Range("a15").Select
    Rows("15:600").EntireRow.AutoFit
    Worksheets("Informe").Protect "bomba2010", True, True, True
    'Call AbrirH4
End Sub
Sub SoloImprime()
    ActiveSheet.PrintOut
End Sub
Hola:
¿Y cómo ves la mía? ¿Alguna idea de porque no funciona? Lo que yo quiero es imprimir 1 página, 2 o 3 en función del número de datos que tenga.
Un saludo,
Ok
Lo que no entiendo porque usas la condición If, si basta con tomar el rango que se va a imprimir y tomar el área de impresión la cantidad de hojas las prepara solo el excel.
Ayudame a poder entender la macro, puede que funcione pero no es necesario solo se toma el área a imprimir, tal como lo hacer manual si quisieras imprimir.
Hola:
Ayer después de darle hacer muchas pruebas conseguí que funcionara. Adjunto el código por si a alguien le es útil. Yo relleno datos en una columna y en función del número de datos hago que imprima en 1 hoja, 2 o 3.
Private Sub CommandButton2_Click()
u = Range("C" & Rows.Count).End(xlUp).Row
If u < 9 Then
MsgBox "No hay nada que imprimir"
Else
    If 8 < u And u < 79 Then
    PrintOut from:=1, to:=1, copies:=1
    Else
        If 78 < u And u < 153 Then
        PrintOut from:=1, to:=2, copies:=1
        Else
            If u > 152 And u < 243 Then
            PrintOut from:=1, to:=3, copies:=1
            Else
            MsgBox "Hay más de 234 registros. Avisar a Carlos"
            End If
        End If
    End If
End If
End Sub
Gracias por el interés

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas