Borrar, eliminar Area de Impresion de un rango

Tengo esta rutina dentro de un evento para guardar hoja1

En esta hoja tengo definidas (yo lo hice) 2 areas de impresion, así aparece en Administrador de nombres

='Lista Repuestos'!$B$1:$K$51;'Lista Repuestos'!$M$1:$V$51
    Set h2 = Sheets(1)
    If Range("N11") = "" Then   'Si N11 esta vacia procede
        'AQUI QUIERO BORRAR SOLO LA AREA DE IMPRESION 'Lista Repuestos'!$M$1:$V$51
        h2. Shapes. Range(Array("uno", "dos", "tres", "cuatro", "imagen2", "Texto5", "imagen4")).Delete
    Else
        h2.Shapes.Range(Array("uno", "dos", "tres", "cuatro")).Delete
    End If

1 Respuesta

Respuesta
1

H o l a:

No entiendo bien lo que necesitas.

Con esta línea estableces el área de impresión:

ActiveSheet.PageSetup.PrintArea = "$B$1:$K$51"

Puede ser así:

h2.PageSetup.PrintArea = "$B$1:$K$51"

Con activeSheet no se sabe cuál es la hoja activa.

No entiendo esto que pones:

Esta es la doble area de Impresion creada por mi  ='Lista Repuestos'!$B$1:$K$51;'Lista Repuestos'!$M$1:$V$51

Quieres que sea esto: B$1:$K$51 o esto: M$1:$V$51, de qué depende?

Sal u dos

='Lista Repuestos'!$B$1:$K$51;'Lista Repuestos'!$M$1:$V$51

esas son las areas de impresion creadas, asi aparece en Administrador de nombres

Pretendia que al guardar la hoja si N11 estuviera vacio que solo tenga ='Lista Repuestos'!$B$1:$K$51

Hice esto

 Al guardar una copia de la hoja con la macro
 Set h2 = Sheets(1)
    If Range("N11") = "" Then ' Si N11 esta vacia procede a
'En la copia
'Establecer área de impresión en la copia
        ActiveSheet.PageSetup.PrintArea = "$B$1:$K$51"
        h2.Shapes.Range(Array("uno", "dos", "tres", "cuatro", "imagen2", "Texto5", "imagen4")).Delete
    'Por si hay datos en este rango y no los quiere en la copia, los eliminará pero tendrás Desproteger este rango en la hoja Copia
 h2.Unprotect Password:="By Jot@" 
        h2.Range("L1:AZ1500").Clear 
    Else 'Si N11 NO esta vacia entonces
        h2.Shapes.Range(Array("uno", "dos", "tres", "cuatro")).Delete
    'Por si hay datos en este rango y no los quiere en la copia, los eliminará pero tendrás Desproteger este rango en la hoja Copia
 h2.Unprotect Password:="By Jot@" 
        h2.Range("W1:AZ1500").Clear 
    End If

Funciona bien pero quisiera tu aprobacion o enmienda de algun detalle

El N11 es parte de pagina2 porque si no uso la página 2 (de la misma hoja) entonces no hace falta que al imprimir la copia, se imprima o aparezca la área de impresión de esa página.

En la misma hoja1 de B a QUE es la `página 1 y desde M a V.

Si no uso la página 2 de M a V, todorastro de esa página desaparezca y efectivamente así logre hacer con el código arriba

Este el código completo

Sub guardar_Copia() 'PARA GUARDAR COMO XLSX
'Por.Dante Amor http://www.todoexpertos.com/preguntas/6fxnalqm9tyxkxdd/en-macro-excel-copiar-el-rango-en-ves-de-la-hoja?selectedanswerid=6g395i5pqbj6ipxt
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
        Set h1 = Sheets(1)
'Nombre para el archivo Para solo las iniciales en E8
        nbr = Ini(Quitar(h1.Range("E8"))) & "_" & h1.Name & " " & h1.Range("J8") & " " & h1.Range("K9").Value
'Ruta carpeta destino en la ventana Guardar como:. Puede cambiar la ruta aqui
    rut = "C:\0\1\"
'Guardar copia en
    With Application.FileDialog(msoFileDialogFolderPicker) 'Abre el cuadro dialogo
        .Title = "Selecciona una carpeta"
        .AllowMultiSelect = False
        .InitialFileName = rut
'Si cancela sale de la macro
        If .Show <> -1 Then Exit Sub
        cp = .SelectedItems(1)
    End With
'Copia la hoja
    h1.Copy
'Elimina objetos Shapes (formas) existentes en la hoja
    Set h2 = Sheets(1)
    If Range("N11") = "" Then
'Establecer área de impresión
        ActiveSheet.PageSetup.PrintArea = "$B$1:$K$51"
        h2.Shapes.Range(Array("uno", "dos", "tres", "cuatro", "imagen2", "Texto5", "imagen4")).Delete
    'Por si hay datos en este rango y no los quiere en la copia, los eliminará pero tendrás Desproteger este rango en la hoja Copia
 h2.Unprotect Password:="By Jot@" 'Desprotege la copia para ejecutar limpiesa en el rango
        h2.Range("L1:AZ1500").Clear 'puede cambiar el rango o desactivarlo si no lo necesita
    Else
        h2.Shapes.Range(Array("uno", "dos", "tres", "cuatro")).Delete
    'Por si hay datos en este rango y no los quiere en la copia, los eliminará pero tendrás Desproteger este rango en la hoja Copia
 h2.Unprotect Password:="By Jot@" 'Desprotege la copia para ejecutar limpiesa en el rango
        h2.Range("W1:AZ1500").Clear 'puede cambiar el rango o desactivarlo si no lo necesita
    End If
'Proteger la copia completa totalmente
    h2.Protect Password:="By Jot@", DrawingObjects:=True, Contents:=True, Scenarios:=True
    h2.EnableSelection = xlNoSelection 'Restringe todo, seleccion y escritura
    ActiveWorkbook.Protect Password:="By Jot@", Structure:=True, Windows:=True
'Guarda hoja como xlsx
    ActiveWorkbook.SaveAs Filename:=cp & "\" & nbr & ".xlsx", _
        FileFormat:=xlOpenXMLWorkbook, ReadOnlyRecommended:=False, _
        CreateBackup:=False
    ActiveWorkbook.Close
    MsgBox "Archivo guardado en " & cp & "\" & nbr & ".xlsx"
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    Range("B11").Select
End Sub

Ni idea de lo que quieres, primer envías un código de 6 líneas y luego envías un código de 1000 líneas, pero no explicas qué necesitas.

Es más fácil que expliques con imágenes, con ejemplos, con pasos, que con 1000 líneas de código que tengo que leer una para una y aún así no entiendo qué quieres, simplemente porque no lo has explicado.

Nuevamente te lo pido:

Explica con imágenes, con ejemplos y con pasos.

Me quedo SOLO con esta pregunta, cuando este resuelta, pasare a la otra.

Yo a ti, eliminaría todo lo que tengas ahí sobre la pregunta: "En Excel con formulario, Visualizar línea seleccionada" pasaremos a ella cuando tyengamos esta "Borrar, eliminar Área de Impresión de un rango" resuelta

En el código para guardar la hoja

Sub guardar_Copia() 'PARA GUARDAR COMO XLSX
'Por.Dante Amor http://www.todoexpertos.com/preguntas/6fxnalqm9tyxkxdd/en-macro-excel-copiar-el-rango-en-ves-de-la-hoja?selectedanswerid=6g395i5pqbj6ipxt
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
        Set h1 = Sheets(1)
'Nombre para el archivo Para solo las iniciales en E8
        nbr = Ini(Quitar(h1.Range("E8"))) & "_" & h1.Name & " " & h1.Range("J8") & " " & h1.Range("K9").Value
'Ruta carpeta destino en la ventana Guardar como:. Puede cambiar la ruta aqui
    rut = "C:\0\1\"
'Guardar copia en
    With Application.FileDialog(msoFileDialogFolderPicker) 'Abre el cuadro dialogo
        .Title = "Selecciona una carpeta"
        .AllowMultiSelect = False
        .InitialFileName = rut
'Si cancela sale de la macro
        If .Show <> -1 Then Exit Sub
        cp = .SelectedItems(1)
    End With
'Copia la hoja
    h1.Copy
'Elimina objetos Shapes (formas) existentes en la hoja
    Set h2 = Sheets(1)
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    If Range("N11") = "" Then
'Establecer área de impresión
        ActiveSheet.PageSetup.PrintArea = "$B$1:$K$51"
        h2.Shapes.Range(Array("uno", "dos", "tres", "cuatro", "imagen2", "Texto5", "imagen4")).Delete
    'Por si hay datos en este rango y no los quiere en la copia, los eliminará pero tendrás Desproteger este rango en la hoja Copia
 h2.Unprotect Password:="By Jot@" 'Desprotege la copia para ejecutar limpiesa en el rango
        h2.Range("L1:AZ1500").Clear 'puede cambiar el rango o desactivarlo si no lo necesita
    Else
        h2.Shapes.Range(Array("uno", "dos", "tres", "cuatro")).Delete
    'Por si hay datos en este rango y no los quiere en la copia, los eliminará pero tendrás Desproteger este rango en la hoja Copia
 h2.Unprotect Password:="By Jot@" 'Desprotege la copia para ejecutar limpiesa en el rango
        h2.Range("W1:AZ1500").Clear 'puede cambiar el rango o desactivarlo si no lo necesita
    End If
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
'Proteger la copia completa totalmente
    h2.Protect Password:="By Jot@", DrawingObjects:=True, Contents:=True, Scenarios:=True
    h2.EnableSelection = xlNoSelection 'Restringe todo, seleccion y escritura
    ActiveWorkbook.Protect Password:="By Jot@", Structure:=True, Windows:=True
'Guarda hoja como xlsx
    ActiveWorkbook.SaveAs Filename:=cp & "\" & nbr & ".xlsx", _
        FileFormat:=xlOpenXMLWorkbook, ReadOnlyRecommended:=False, _
        CreateBackup:=False
    ActiveWorkbook.Close
    MsgBox "Archivo guardado en " & cp & "\" & nbr & ".xlsx"
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    Range("B11").Select
End Sub

el cual le incuí este que sigue, verifica

Set h2 = Sheets(1)
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    If Range("N11") = "" Then ' Si N11 esta vacia procede a
'En la copia
'Establecer área de impresión en la copia
        ActiveSheet.PageSetup.PrintArea = "$B$1:$K$51"
        h2.Shapes.Range(Array("uno", "dos", "tres", "cuatro", "imagen2", "Texto5", "imagen4")).Delete
    'Por si hay datos en este rango y no los quiere en la copia, los eliminará pero tendrás Desproteger este rango en la hoja Copia
 h2.Unprotect Password:="By Jot@" 
        h2.Range("L1:AZ1500").Clear 
    Else 'Si N11 NO esta vacia entonces
        h2.Shapes.Range(Array("uno", "dos", "tres", "cuatro")).Delete
    'Por si hay datos en este rango y no los quiere en la copia, los eliminará pero tendrás Desproteger este rango en la hoja Copia
 h2.Unprotect Password:="By Jot@" 
        h2.Range("W1:AZ1500").Clear 
    End If
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Solo quiero tu aprobacion si este ultimo esta bien hubicado, y si necesita alguna modificacion  o correccion.

Funciona bien, de maravilla pero como experto necesito tu aprobación o corrección, solo eso.

El titulo es confuso porque al prencipio pensaba en la Area de Impresion pero eso ya lo resolvi con la linea         ActiveSheet.PageSetup.PrintArea = "$B$1:$K$51"

Gracias

Lo anterior (código)

Sub guardar_Copia() 'PARA GUARDAR COMO XLSX

esta en el libro Lista Para Repuestos (ALCALDE)

Si te funciona, no entiendo qué puedo revisarle.

Solamente revisa, si estás estableciendo la hoja en h1 o h2, todas los rangos deberán tener la hoja a la que corresponde, por ejemplo tienes esta línea:

If Range("N11") = "" Then

No dice de cuál hoja.


También tienes esta otra línea:

ActiveSheet.PageSetup.PrintArea = "$B$1:$K$51"

Dice activesheet, debes poner h1 o h2, según la hoja que corresponda.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas