Cómo copiar sin la protección
Resuelto
Caroline
-
Caroline -
Caroline -
Hola,
Tengo un gran archivo que contiene varias hojas de Excel. Las hojas están protegidas por contraseña. Un código VBA permite guardar una de estas hojas en una subcarpeta.
Luego, me gustaría tomar una hoja de una subcarpeta (guardada anteriormente) y guardarla en un nuevo libro eliminando la protección sin que tenga que escribir la contraseña. (Para que otros puedan modificar estas últimas sin que tenga que dar la contraseña). No puedo hacerlo. Gracias por tu ayuda.
Tengo un gran archivo que contiene varias hojas de Excel. Las hojas están protegidas por contraseña. Un código VBA permite guardar una de estas hojas en una subcarpeta.
Luego, me gustaría tomar una hoja de una subcarpeta (guardada anteriormente) y guardarla en un nuevo libro eliminando la protección sin que tenga que escribir la contraseña. (Para que otros puedan modificar estas últimas sin que tenga que dar la contraseña). No puedo hacerlo. Gracias por tu ayuda.
4 respuestas
-
Hola,
Basta con copiar las celdas de la hoja protegida en una hoja en blanco.
Por ejemplo (si la hoja 1 está protegida y la hoja 2 está en blanco):Worksheets(1).Cells.Copy Worksheets(2).Cells
--
Atentamente
Patrice-
Hola y gracias por tu ayuda. Realmente no estoy familiarizada con los códigos, así que no entiendo mucho cómo ejecutarlo.
Al mismo tiempo, es una hoja que me gustaría copiar en un nuevo libro y no en una segunda hoja.
Esto, para luego enviarla por correo electrónico como archivo adjunto, en formato Excel. (ya que el destinatario no puede abrir archivos PDF)
El propósito de esto: Al guardarla en un nuevo libro, no protegido, podremos eliminar los botones que contiene el formulario original que no sirven de nada al destinatario. (Estos botones inicialmente sirven para saltar de una hoja a otra en un libro grande). Debería ser posible que otras personas puedan hacer esto fácilmente sin necesidad de la contraseña de protección del archivo principal.
Si no, he pensado en enviar por correo electrónico solo la parte imprimible de la hoja (usando la vista de saltos de página y poniendo en gris la parte que no quiero), pero ahí tampoco sé cómo hacerlo. UFF. Gracias si alguien puede ayudarme.
Gracias
-
-
Hola,
Entonces adapta este código:Option Explicit Sub test() Dim wbk As Workbook Dim shp As Shape ' Crear un libro en blanco que contenga una sola hoja Set wbk = Workbooks.Add(xlWBATWorksheet) ' Copiar las celdas de la hoja deseada (a adaptar) ThisWorkbook.Worksheets("Feuil1").Cells.Copy wbk.Worksheets(1).Cells ' Eliminar todas las formas en la hoja For Each shp In wbk.Worksheets(1).Shapes shp.Delete Next shp End Sub
--
Cordialmente
Patrice -
Casi lo tenemos. :)
El código funciona, pero el formato de la página debería mantenerse igual (ancho de las columnas, altura de las filas, tamaño de página). Al ejecutar el código, los formatos ya no son los mismos. Todo debería permanecer en una sola página para poder imprimir. Además, mi hoja contiene una imagen que desaparece cuando ejecuto el código; debería quedarse, excepto los botones. Pero si no es posible conservar la imagen, puedo prescindir de ella sin los botones.
Muchas gracias, su ayuda es apreciada. -
Hola
Los formatos permanecen iguales (ancho de columnas, formatos de celdas, MFC, ...), lo que puede cambiar es la altura de algunas filas y el diseño que no se copia.
Para conservar la imagen, simplemente hay que conocer su nombre (aparece a la izquierda en la barra de fórmulas cuando la imagen está seleccionada), y se pueden copiar las alturas de las filas:
Option Explicit Sub test() Dim wbk As Workbook Dim wsh As Worksheet Dim shp As Shape Dim rng As Range Application.ScreenUpdating = False ' Definir la hoja fuente Set wsh = ThisWorkbook.Worksheets("Feuil1") ' Crear un libro en blanco que contenga una sola hoja Set wbk = Workbooks.Add(xlWBATWorksheet) ' En la hoja 1 de este libro: With wbk.Worksheets(1) ' Copiar las celdas de la hoja fuente (a adaptar) wsh.Cells.Copy .Cells ' Copiar la altura de las filas For Each rng In .UsedRange.Rows rng.RowHeight = wsh.Rows(rng.Row).RowHeight Next rng ' Eliminar todas las formas en la hoja, excepto Imagen 1 For Each shp In .Shapes If shp.Name <> "Imagen 1" Then shp.Delete Next shp End With Application.ScreenUpdating = True End Sub
--
Atentamente
Patrice-
Ahora funciona y, efectivamente, es el formato el que no se mantiene igual. Pero puedo revertirlo antes de enviar o imprimir el documento, a menos que, por supuesto, haya alguna manera de agregar este criterio en el código...
¡Muchas gracias! :)- ```html
Option Explicit Sub test() Dim wbk As Workbook Dim wsh As Worksheet Dim shp As Shape Dim rng As Range Dim psu As PageSetup Application.ScreenUpdating = False ' Définir la feuille source Set wsh = ThisWorkbook.Worksheets("Feuil1") ' Créer un classeur vierge contenant une seule feuille Set wbk = Workbooks.Add(xlWBATWorksheet) ' Sur la feuille 1 de ce classeur : With wbk.Worksheets(1) ' Y copier les cellules de la feuille source (à adapter) wsh.Cells.Copy .Cells ' Copier la hauteur des lignes For Each rng In .UsedRange.Rows rng.RowHeight = wsh.Rows(rng.Row).RowHeight Next rng ' Supprimer toutes les formes posées sur la feuille, sauf Image 1 For Each shp In .Shapes If shp.Name <> "Image 1" Then shp.Delete End If Next shp ' Copier la mise en page (principales propriétés) With .PageSetup ' Feuille .Orientation = wsh.PageSetup.Orientation .PaperSize = wsh.PageSetup.PaperSize .PrintArea = wsh.PageSetup.PrintArea ' Marges .TopMargin = wsh.PageSetup.TopMargin .BottomMargin = wsh.PageSetup.BottomMargin .RightMargin = wsh.PageSetup.RightMargin .LeftMargin = wsh.PageSetup.LeftMargin ' En têtes et pieds de page .RightFooter = wsh.PageSetup.RightFooter .CenterFooter = wsh.PageSetup.CenterFooter .LeftFooter = wsh.PageSetup.LeftFooter .RightHeader = wsh.PageSetup.RightHeader .CenterHeader = wsh.PageSetup.CenterHeader .LeftHeader = wsh.PageSetup.LeftHeader ' Autres propriétés de mise en page .Zoom = wsh.PageSetup.Zoom .FitToPagesTall = wsh.PageSetup.FitToPagesTall .FitToPagesWide = wsh.PageSetup.FitToPagesWide End With End With Application.ScreenUpdating = True End Sub
Patrice ```
-