Hola amigos, saludos paco
Tengo esta macro busxada con S. google y bajada de la WEB
Sub Guarda_consecutivo()
'Boton en Hoja1
'xxxxxxxxxxxxxxxxxxxxxxxxxx
Sheets(2).Select 'AGREGUE ESTA.SE QUE LAS 2 LINEAS LAS PUEDES COLOCAR EN UNA SOLA
Range("B2").Select
'xxxxxxxxxxxxxxxxxxxxxxxxxx
Range("b2").Value = Range("b2").Value
archivo = ThisWorkbook.Path & "\" & Range("b10") & Format(Date, " dd-mm-yyyy ") & Range("c2")
If Dir(archivo & ".xls") <> "" Then
Names.Add "archivos", "=files(""" & archivo & "*.xls"")"
archivo = archivo & Format([counta(archivos)] + 1, "_0")
Names("archivos").Delete
End If
ActiveWorkbook.SaveAs archivo & ".xls"
End Sub
Hace que al copiar el libro, se copie según nombre
Si existe el libro con el mismo nombre, le agrega un numero (consecutivo); archivo = archivo & Format([counta(archivos)] + 1, "_0")
Hasta aqui bien PEEERO, cierra el libro origen y me deja la copia abierta y precisamente quiero lo contrario, QUE CIERRE LA COPIA Y ME MANTENGA EL ORIGEN ABIERTO, para eguir trabajando CON EL ORIGEN
Tambien si se puede hacer en una sola linea las 2 primeras, lo he visto pero no recuerdo como es
Dejo el libro con lamacro
Adjunto | Tamaño |
---|---|
consulta_necesitomas.com_.xls | 39.5 KB |
Asi es como me funciono, tambien puse lo el select en una linea para que recuerdes como se hace
Sub Guarda_consecutivo()
'Boton en Hoja1
'xxxxxxxxxxxxxxxxxxxxxxxxxx
Sheets(2).Range("B2").Select
'xxxxxxxxxxxxxxxxxxxxxxxxxx
Range("b2").Value = Range("b2").Value
Archivo = ThisWorkbook.Path & "\" & Range("b10") & Format(Date, " dd-mm-yyyy ") & Range("c2")
If Dir(Archivo & ".xls") <> "" Then
Dim libro As Workbook
Names.Add "archivos", "=files(""" & Archivo & "*.xls"")"
archivo1 = Archivo & Format([counta(archivos)] + 1, "_0")
ActiveWorkbook.SaveAs archivo1 & ".xls"
Names("archivos").Delete
Set libro = ActiveWorkbook
End If
Workbooks.Open (Archivo)
libro.Close True
End Sub
Hola Bridge.assa, mil gracias por tomar en cuenta mi solicitud
Probado y tengo a decir que
El boton para ejecucion de la macro, esta en la hoja1 y la captacion de datos (celdas) para dar el nombre al libro estan en la Hoja2
Aunque la macro capte de la hoja1 donde esta el boton, sigue los mismos errores apareciendo
1º- me manda error en tiempo de ejecucion
Error en el metodo Select de la clase Range
en la linea
'xxxxxxxxxxxxxxxxxxxxxxxxxx
Sheets(2).Range("B2").Select Entiendo que esta linea tien que ser desactivada pero, tengo que tener la direccion hacia la Hoja2 Sheets(2).select
'xxxxxxxxxxxxxxxxxxxxxxxxxx
2º- Desactivo la linea y cambia el error
y me marca la linea
End If
Workbooks.Open (Archivo)
libro.Close True
Si solo dejo Sheets(2).Select Por lo de seleccionar la hoja2 visto que el boton está en la hoja1 y la captacion tien que ser de la hoja2
Sigue el mismo error de la imagen y en la misma linea Workbooks.Open (Archivo)
¿Algo que se pueda hacer? Estoy con Excel 2013
Intentar seleccionar un rango en una hoja que no está seleccionada provoca este error 1004 en el método Select de la clase Range
Lo raro es que esto no siempre falla, a veces funciona o parece que funciona, o depende de la versión, o no sé
Así que o lo haces en dos pasos, primero seleccionas la hoja y luego seleccionas la celda
O directamente no seleccionas la celda, porque no necesitas seleccionar la hoja ni seleccionar la celda para tomar su valor
por ejemplo para referirte al valor de la celda b10 de la hoja 2, puedes hacerlo así
ThisWorkbook.Sheets(2).Range("b10").Value
Esto permite leer el valor de esa celda (en el libro que contiene el código) independientemente de cuál sea la hoja activa
Así que podrías leer esas celdas para obtener el nobmre de tu archivo por ejemplo así:
With ThisWorkbook.Sheets(2)
.Range("b2").Value = .Range("b2").Value
archivo = ThisWorkbook.Path & "\" & .Range("b10").Value & Format(Date, " dd-mm-yyyy ") & .Range("c2").Value
End With
Fíjate que dentro del With utilizo .Range con un punto, para indicar que es un rango de esa hoja
------
Ya sé Excel, pero necesito más.
Hola Paco
Gracias por tu aporte a mi fallo
Funciono y mas rapido que antes PEEEEEEERO
Me cierra el origen y me deja la copia abierta. DEBERIA dejarme abierto el origen y haber cerrado la copia
el unico fallo que le encuentro
[code]Sub Guarda_consecutivo()
With ThisWorkbook.Sheets(2)
.Range("b2").Value = .Range("b2").Value
archivo = ThisWorkbook.Path & "\" & .Range("b10").Value & Format(Date, " dd-mm-yyyy ") & .Range("c2").Value
End With
If Dir(archivo & ".xls") <> "" Then
Names.Add "archivos", "=files(""" & archivo & "*.xls"")"
archivo = archivo & Format([counta(archivos)] + 1, "_0")
Names("archivos").Delete
End If
ActiveWorkbook.SaveAs archivo & ".xls"
End Sub[/code]
o utilizas una solución parecida a la que te propone bridge.assa, utilizando una variable de objeto para cerrar el libro que quieras,
o en vez de guardar como utilizas "guardar copia como", que crea una copia del archivo pero sigues trabajando con el original.
ActiveWorkbook.SaveCopyAs archivo & ".xls"
------
Ya sé Excel, pero necesito más.
Cuanto no vale el saber? y cuanto te agradezco tu solucion
Gracias bridge
Gracias Paco, un genio al lado de expertos, sin menospreciar estos. Una WEB llena de sabiduria y en esta frase, incluio a todos aquellos que de forma altruista, ayudan a inexpertos como yo
Quedo al jorno jejejejeje
Resuelto