Hola a todos los excelnautas.
La pregunta es si es posible que al clickear un boton me grabe el libro con el nombre que se encuentre en una celda.
Saludos
Ferchogz



Sub CrearArchivo()
Dim Archivo As String, Ruta As String
'Establecemos la ruta
Ruta = "C:\COPIAS\"
'Formamos el nombre del nuevo archivo
Archivo = Left([A1], 2) & Format(Date, "yymmdd") & ".xls"
'Comprobamos si el nuevo nombre contiene caracteres invalidos
If Not NombreValido(Archivo) Then Exit Sub
'Comprobamos si el disco existe
If Not DiscoExiste(Ruta) Then Exit Sub
'Comprobamos si la ruta existe y, si no, la creamos o cancelamos
If Not RutaExiste(Ruta) Then Exit Sub
'Inhabilitamos alertas para reemplazar
'archivos existentes sin previo aviso
Application.DisplayAlerts = False
'Guardamos la copia
ActiveWorkbook.SaveAs Ruta & Archivo
'Volvemos a habilitar las alertas
Application.DisplayAlerts = True
End Sub
Function NombreValido(Nombre As String) As Boolean
Dim CarInvalidos As Variant, i As Long
CarInvalidos = Array(":", "\", "/", "?", "*", "[", "]")
For i = 0 To UBound(CarInvalidos)
If InStr(Nombre, CarInvalidos(i)) Then
MsgBox "El nombre """ & Nombre _
& """ contiene caracteres invalidos: """ _
& CarInvalidos(i) & """."
NombreValido = False
Exit Function
End If
Next i
NombreValido = True
End Function
Function RutaExiste(Ruta As String) As Boolean
Dim Directorios, i As Long, x As String
On Error Resume Next
x = GetAttr(Ruta) And 0
If Err.Number <> 0 Then
Respuesta = MsgBox( _
"La carpeta no existe. Desea crearla?", _
vbExclamation + vbOKCancel)
If Respuesta = vbCancel Then
MsgBox "Se ha cancelado la operacion.", vbInformation
Exit Function
End If
On Error GoTo 0
Directorios = Split(IIf(Right(Ruta, 1) = "\", _
Left(Ruta, Len(Ruta) - 1), Ruta), "\"): Ruta = ""
For i = LBound(Directorios) To UBound(Directorios)
Ruta = Ruta & Directorios(i) & "\"
On Error Resume Next
x = GetAttr(Ruta) And 0
If Err.Number <> 0 Then MkDir Ruta
On Error GoTo 0
Next i
End If
RutaExiste = True
End Function
Function DiscoExiste(Ruta As String) As Boolean
Dim fs, Disco, Discos
Set fs = CreateObject("Scripting.FileSystemObject")
Set Discos = fs.Drives
For Each Disco In Discos
If Left(Ruta, 1) = Disco.DriveLetter Then
DiscoExiste = True
Exit Function
End If
Next Disco
MsgBox "No existe la unidad de disco solicitada", vbCritical
End Function

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 8 invitados