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
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 IfFunciona 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 Subel 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
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxSolo 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") = "" ThenNo 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.
- Compartir respuesta