Saltar al contenido

Simplificar macro para no crear el archivo copia.xlsm


Recommended Posts

publicado

Hola amig@s.

Esta macro

Sub GuardaSinMacros()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set l1 = ThisWorkbook
Ruta = "D:\Datos Mecanicos\"
nombre = Range("G4") & "_" & Range("C13") & "-" & Range("H13").Value & ".xlsx"
'Cria archivo llamado Copia.xlsm en la misma ruta para que sirva de base a la creacion del .xlsx en variable nombre
l1.SaveCopyAs Ruta & "copia.xlsm"
Set l2 = Workbooks.Open(Ruta & "copia.xlsm")
l2.SaveAs Ruta & nombre, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False 'cria archivo requerido
l2.Close
Kill Ruta & "copia.xlsm" 'elimina el archivo Copia.xlsm en la ruta
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Sheets(1).Range("I3").Value = Sheets(1).Range("I3").Value + 1 'Agrega + 1 al conteo de factura
End Sub[/CODE]

Lo que hace es crear un archivo Copia.xlsm que sirve de base para la creacion del requerido en variable nombre pero este de la variable nombre tiene que ser con extension .xlsx y no xlsm.

El origen contiene macros y contendrá y esta macro que les dejo elimina cualquier codigo del archivo de la variable nombre porque eso pretendo, que sea sin macro alguna.

Se que alguien me dirá; si te funciona así, ¿porque modificarla? pues quiero simplificarla para que no tenga que criar una base (Copia.xlsm) para fabricar el archivo que requiero, eso nada mas.

Ademas de esto, quiero que me agreguen alguna linea para eliminar el boton ActiveX con caption Excel_PDF del de la variable nombre, que tengo en la hoja del origen desde el que ejecuto la macro

Gracias

presupuesto_AyudaExcel.zip

publicado

Buenas [uSER=53155]@JoaoM[/uSER] utiliza lo siguiente

Sub GuardaSinMacros()
Dim ruta As String
Dim nombre As String
Dim wb As Object
Application.ScreenUpdating = False
Application.DisplayAlerts = False
ruta = "D:\Datos Mecanicos\"
nombre = Hoja1.Range("G4") & "_" & Hoja1.Range("C13") & "-" & Hoja1.Range("H13").Value & ".xlsx"
ThisWorkbook.Worksheets.Copy
Set wb = Workbooks(Workbooks.Count)
With wb
.Sheets(1).Shapes("Excel_PDF").Delete
.SaveAs Filename:=ruta & nombre, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
.Close True
End With
Set wb = Nothing
Application.DisplayAlerts = True
Application.ScreenUpdating = True
ThisWorkbook.Sheets(1).Range("I3").Value = ThisWorkbook.Sheets(1).Range("I3").Value + 1 'Agrega + 1 al conteo de factura
End Sub[/CODE]

[/indent]

Un saludo

publicado

Ok logroastur, gracias por tu tan importante ayuda para mí.

Quisiera que me comentaras la macro, ¿porque?

Veo en una línea, PDF y creia que TAMBIEN me crearía de una el archivo PDF

        .Sheets(1).Shapes("Excel_PDF").Delete[/CODE]

Cuanto a la creación del PDF con un solo click en el botón de la hoja, (no sé si lo bajaste para darte cuenta que tengo la macro para la creación del PDF, Macro que la llamo de esta misma, en eso no tengo problema porque después de la Sub GuardaSinMacros() le coloco

PDF y listo.

Quiero que sepas (por si algo piensas) que la creación del PDF ya antes me salía el archivo (PDF) limpio, es decir, sin botón ni macros (es obvio) y eso es CORRECTO, no tengo problemas con eso.

Tanto escribir para solo pedir que me la comentes, por favor y, si no es perjudicial para ti, jejejejjejeej.

Soy mui pero mui malo en explicaciones o exposiciones, me alargo para expresar pocas cosas

Gracias una vez más

Edito:

Nuevamente, aquí mismo te lo pido y me disculpas por no haberlo pensado antes.

En tu macro, podías agregar algo para que TAMBIEN SOLO copie los valores? y no las formulas y sin los comentarios en las celdas que los tienen.

Todo presupuesto es para envío al "cliente" y a estos no les interesa ni macros, botones o formulas, y a la vez se alivia (peso) el libro

Gracias y si se puede bien venida sea, sino, PUUUUUUUEEEEEEEEEEEESSSSSSSS, a llorar al valle (como se dice por acá) jajajjajajaja

publicado

No estoy seguro que este bien, te pido me corrijas si algo falta o esta mal colocado

Sub GuardaSinMacros()
PDF
Dim ruta As String
Dim nombre As String
Dim wb As Object
Application.ScreenUpdating = False 'DesactivA la actualización de pantallas para acelerar el código de la macro
Application.DisplayAlerts = False 'Desactiva las solicitudes y mensajes de alerta
ruta = "D:\Datos Mecanicos\" 'Donde guarda el libro
'Nombre a dar al libro
nombre = Hoja1.Range("G4") & "_" & Hoja1.Range("C13") & "-" & Hoja1.Range("H13").Value & ".xlsx"
ThisWorkbook.Worksheets.Copy 'Copia la hoja
Set wb = Workbooks(Workbooks.Count)
With wb
.Sheets(1).Shapes("Excel_PDF").Delete 'Elimina de la copia, cualquier Shapes (boton)
'Guarda el archivo en ruta y nombre
.SaveAs Filename:=ruta & nombre, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
.Close True
End With
Set wb = Nothing
Application.DisplayAlerts = True
Application.ScreenUpdating = True
'Agregar + 1 al conteo de factura ORIGEN
ThisWorkbook.Sheets(1).Range("I3").Value = ThisWorkbook.Sheets(1).Range("I3").Value + 1
End Sub[/CODE]

Me faltaria la Set wb = Workbooks(Workbooks.Count) y tambien Set wb = Nothing que no recuerdo para, si algo se baraja en mi mente que es para desactivar ¿que? ¿el libro copiado?

publicado

Buenas [uSER=53155]@JoaoM[/uSER] utiliza lo siguiente

Sub GuardaSinMacros()
Dim ruta As String
Dim nombre As String
Dim wb As Object
Dim i As Long
Dim d As String
ruta = "D:\Datos Mecanicos\"
Application.ScreenUpdating = False
Application.DisplayAlerts = False
With ThisWorkbook.Sheets(1)
nombre = .Range("G4") & "_" & _
.Range("C13") & "-" & _
.Range("H13").Value
.Copy
End With
Set wb = Workbooks(Workbooks.Count)
With wb
With .Sheets(1)
For i = .Shapes.Count To 1 Step -1
d = .Shapes(i).TopLeftCell.Address(False, False)
Select Case d
Case "J2": .Shapes(i).Delete
Case "J3": .Shapes(i).Delete
Case "L3": .Shapes(i).Delete
End Select
Next
With .Range("A2:J60")
.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=ruta & nombre & ".pdf", _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False
.Copy
.PasteSpecial xlPasteValues
Application.CutCopyMode = False
End With
With .Cells
.Locked = True
.FormulaHidden = False
End With
.Protect Password:=1234, _
DrawingObjects:=True, _
Contents:=True, _
Scenarios:=True
.EnableSelection = xlNoRestrictions
End With
.SaveAs Filename:=ruta & nombre & ".xlsx", _
FileFormat:=xlOpenXMLWorkbook, _
CreateBackup:=False
.Close True
End With
Set wb = Nothing
Application.DisplayAlerts = True
Application.ScreenUpdating = True
With ThisWorkbook
With .Sheets(1).Range("I3")
.Value = .Value + 1
End With
End With
End Sub[/CODE]

[/indent]

Un saludo

publicado

Hola logruastor. Gracias una ves mas y no me cansaré de darte las gracias por que es lo que puedo y debo hacer.

Hay una linea que se coloca para que la copia al abrirla no abra con el rango seleccionado Application.CutCopyMode = False

¿donde la coloco, en que punto de la macro para que la copia o quede con el rango seleccionado?

Gracias. No paras de surprender, al menos a estos inaptos y inexpertos en el tema COMO YO en que tu estas mas que cosido, jejejejejjeje, HAAAAAAAAAAAAA pero hablame de meánica en maquinaria pesada con mis 67? seguro te dejo a mil millas de distancia, ¿es? o tambien te metes con eso? jajajajjaja

Los comentarios siguen apareciendo en la copia, esos que en la esquina superior derecha de la celda aparece con un punto rojo

publicado

Hola logroastur

Si protejo la hoja me manda error y me apunta al Select Case.

Desbloqueo las celdas J2, J3 y L3 protejo la hoja y sigue lo mism.

Mi protecccion es para que nadie sea en la copia, sea en el origen, pueda cambiar el valor de las columnas I16 a 37 y J del 16 a J40, asi mismo las celdas que contienen datos fijos y permanentes.

Con la hoja protegida y solo poder seleccionar las celdas donde tien que escribir,

Quise proteger la hoja en la plantilla, de hecho lo hice pero, al ejecutar la macro me manda error y se refiere a la j2, j3 y L3 de Select CASE.

Le desactive este Select completo pero luego me manda error en otra línea y ya no sé qué hacer.

publicado

Hola logro

En resumen lo que quiero es:

Que copie la hoja (rango) (crie) en PDF (ya lo hace)

Que copie la hoja (rango) (crie) en xlsx (ya lo hace)

Que elimine TODA macro DE LA COPIA .xlsx (ya lo hace)

Que no transporte las formulas del origen a la copia (ya lo hace)

Que elimine todos los botones DE LA COPIA .xlsx solamente (ya lo hace).

Que proteja (TODO) su contenido, formas, datos, ETC en la copia .xlsx solamente, con passw o de alguna forma pero que la proteja de forma a que NADIE pueda modificar dato alguno en la copia. Ahora solo protege las formas que existen, quiero proteger TODO

Al abrir la copia, se ve TODO el rango seleccionado, QUE NO SEA ASÍ

En el libro origen, SI PROTEJO LA HOJA dejando solo LAS CELDAS A USAR desbloqueadas, me manda errores y quiero que protegida me deje ejecutar la macro, aunque tenga la J2, J3 y L3 desbloqueadas y desprotegidas, como se reflejan en la macro

presupuesto_FORO.zip

publicado

Le meti Range("A2").Select entre estas 2 lineas

 Application.CutCopyMode = False
End With[/CODE]

y solucione lo de que el rango en la copia, quedaba selecionado

Al menos lo de querer la copia TOTALMENTE PROTEGIDA, no lo logro.

Por favor una mano inocente que mueva los dedos, la necesito

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.