Macro para guardar un libro de excel

Tengo la siguiente macro con un botón

Sub GuardarCopia()
'Por.Dante Amor
ruta = ThisWorkbook.Path & "\"
Set h1 = Sheets("menu")
celda = "e18"
'
nombre = Format(h1.Range(celda), ".xsml")
ThisWorkbook.SaveCopyAs ruta & nombre
MsgBox "Copia guardada!", vbInformation, ""
End Sub

La macro funciona a la perfección pero al guardarse el libro lo guarda en un formato no válido y yo necesito que se guarde en formato. Libro de excel habilitado para macros(xslm).

1 respuesta

Respuesta
1

Hasta donde recuerdo no existe la extensión "*.xslm" así que asumo que es un error de sintaxis que no has visto/resuelto. A eso súmale que estás usando la instrucción "Format", al menos al parecer, innecesariamente y, sobre todo, de forma incorrecta.

Reemplaza esto:

nombre = Format(h1.Range(celda), ".xsml")

Por esto:

nombre = h1.range(celda) & ".xlsm"

Comentas que tal

Abraham Valencia

PD: No he revisado lo demás, he ido al punto que al parecer es tu principal dilema

Perdon la extencion es xlsm

Pero sigue guardándolo en un formato no compatible

¿Hiciste el cambio tal cuál indiqué? Pega, nuevamente tu macro para volver a verla ¿qué versión de Office usas? Muestra también el valor exacto de tu celda "E18". Si te da tiempo, pásanos una versión de alguno de esos archivos supuestamente "no compatibles".

Abraham Valencia

como te paso el archivo?


Sub GuardarCopia()
'Por.Dante Amor
ruta = ThisWorkbook.Path & "\"
Set h1 = Sheets("menu")
celda = "H18"
'
nombre = Format(h1.Range(celda), ".xlsm")
ThisWorkbook.SaveCopyAs ruta & nombre
MsgBox "Copia guardada!", vbInformation, ""
End Sub

la primera foto es propiedades del archivo como lo guarda

la segunda es el archivo y la celda de donde toma el nombre es H18

office 2016 es mi version pero otras personas a las que les envío tienen versiones anterires

No has hecho el cambio que te he sugerido. Hazlo y verás.

Abraham Valencia

Perdón no había cambiado lo de format, mil gracias me re siervio. Pero si no te molesta, sobre esta misma planilla tengo la siguiente macro

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, _
Cancel As Boolean)
If ActiveSheet.Range("H18") = "Ingrese Legajo primero" Then
MsgBox ("Por favor ingrese o verifique el numero de legajo")
Range("E18").Select
Else
'Lunes
If ActiveSheet.Range("J22") = "SI" Then
If ActiveSheet.Range("E83") = "" Or ActiveSheet.Range("F83") = "" Then
lunes = "lunes, "
'MsgBox ("Falta seleccionar menu del Lunes")
End If
End If
'Martes
If ActiveSheet.Range("J34") = "SI" Then
If ActiveSheet.Range("G83") = "" Or ActiveSheet.Range("H83") = "" Then
martes = "martes, "
'MsgBox ("Falta seleccionar menu del Martes")
End If
End If
'Miercoles
If ActiveSheet.Range("J46") = "SI" Then
If ActiveSheet.Range("I83") = "" Or ActiveSheet.Range("J83") = "" Then
miercoles = "miercoles, "
'MsgBox ("Falta seleccionar menu del Miercoles")
End If
End If
'Jueves
If ActiveSheet.Range("J58") = "SI" Then
If ActiveSheet.Range("K83") = "" Or ActiveSheet.Range("L83") = "" Then
jueves = "jueves, "
'MsgBox ("Falta seleccionar menu del Jueves")
End If
End If
'Viernes
If ActiveSheet.Range("J70") = "SI" Then
If ActiveSheet.Range("M83") = "" Or ActiveSheet.Range("N83") = "" Then
viernes = "viernes, "
'MsgBox ("Falta seleccionar menu del Viernes")
End If
End If
If lunes = "lunes, " Or martes = "martes, " Or miercoles = "miercoles, " Or jueves = "jueves, " Or viernes = "viernes, " Then
'Alerta de los dias no completados
MsgBox ("Falta seleccionar menu ó postre del día: " + lunes + martes + miercoles + jueves + viernes)
'If a = vbNo Then Cancel = True
End If
'MsgBox ("La celda e6 NO es NUll")
End If
End Sub

Que me obligaba a poner numero de legajo y seleccionar todos los menúes de todos los días pero al usar esta nueva macro de guardado ya no me salta que debo poner legajo etc

¿Hay manera de combinar ambas?

Desde ya muchas gracias

Sugiero colocar todo eso, no en un evento como lo tienes ahora, sino simplemente dentro de la otra rutina (sub) en la parte inicial.

Abraham Valencia

Perdón por mi ignorancia 

Rutina (sub)

Luego la macro pequeña y luego la otra sin pon poner en end sub

Coloca todo dentro de tu rutina "GuardarCopia", antes del código actual, debería funcionar. Solo asegúrate de que si se cumple todo lo que necesitas, el código actual de "GuardarCopia" se active.

Abraham Valencia

PD: OJO, no he revisado al detalles esa ultima.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas