Error en macro para guardar archivo

Tengo el siguiente código

Dim VentanasProtegidas As Boolean
Dim EstructuraProtegida As Boolean
Dim NombreHoja As String
Dim Confirmacion As String
Dim NombreArchivo As String
Dim GuardarComo As Variant
Dim Extension As String
'
'En caso de error.
On Error GoTo ErrorHandler
'
semana = Year(Date)
'Validamos si la ventana o la estructura del archivo están protegidos.
VentanasProtegidas = ActiveWorkbook.ProtectWindows
EstructuraProtegida = ActiveWorkbook.ProtectStructure
'
'En caso de estar protegidas mostramos mensaje.
If VentanasProtegidas = True Or EstructuraProtegida = True Then
    MsgBox "No se puede ejecutar el comando cuando la estructura del archivo está protegida.", _
           vbExclamation, "Advertencia"
Else
    '
    'Copiamos la hoja y guardamos.
    NombreHoja = semana
    Confirmacion = MsgBox("Desea Guardar La Informacion Del Año '" & NombreHoja & "' como archivo nuevo?", _
                          vbQuestion + vbYesNo, "Confirmacion")
    Application.ScreenUpdating = True
    If Confirmacion = vbYes Then
'        Sheets("Hoja1").Select
'        Sheets("Hoja1").Copy
        Sheets(Array("Inventario", "Salidas_Enero", "Salidas_Febrero", "Salidas_Marzo", "Salidas_Abril", "Salidas_Mayo", "Salidas_Junio", "Salidas_Julio", "Salidas_Agosto", "Salidas_Septiembre", "Salidas_Octubre", "Salidas_Noviembre", "Salidas_Diciembre", "Entrada_Enero", "Entrada_Febrero", "Entrada_Marzo", "Entrada_Abril", "Entrada_Mayo", "Entrada_Junio", "Entrada_Julio", "Entrada_Agosto", "Entrada_Septiembre", "Entrada_Octubre", "Entrada_Noviembre", "Entrada_Diciembre", "Departamento", "Totales")).Copy
        NombreArchivo = "Inventario del año " & semana
        GuardarComo = Application.GetSaveAsFilename(InitialFileName:="Inventario del año " & NombreHoja, _
            filefilter:="Libro de Excel(*.xlsx), *.xlsx, Libro de Excel habilitado para macros(*.xlsm), *.xlsm, Libro de Excel 97-2003(*.xls), *.xls,CSV (delimitado por comas)(*.csv),*.csv", _
            Title:="Guardar Como")
        If GuardarComo = False Then
            Workbooks(NombreArchivo).Close SaveChanges:=False
        Else
            With Application.WorksheetFunction
                Extension = .Trim(Right(.Substitute(GuardarComo, ".", .Rept(" ", 500)), 500))
            End With
            Select Case Extension
            Case Is = "xlsx"
                ActiveWorkbook.SaveAs GuardarComo
            Case Is = "xlsm"
                ActiveWorkbook.SaveAs GuardarComo, xlOpenXMLWorkbookMacroEnabled
            Case Is = "xls"
                ActiveWorkbook.SaveAs GuardarComo, xlExcel8
            Case Is = "csv"
                ActiveWorkbook.SaveAs GuardarComo, xlCSV
            Case Else
                ActiveWorkbook.SaveAs GuardarComo
            End Select
            Call RecorreLibro(NombreArchivo)
            Application.ActiveWorkbook.Close SaveChanges:=True
            'Call BorraDatos
        End If
    Else
    End If
End If
'Application.ActiveWorkbook.Close SaveChanges:=False
Exit Sub
'En caso de error mostramos un mensaje.
ErrorHandler:
MsgBox "Ha ocurrido un error: " & Err.Description, vbExclamation, "ERROR"
'Workbooks(NombreArchivo).Close SaveChanges:=False

el problema se da que al llegar a esta instruccion 

Select Case Extension
Case Is = "xlsx"
ActiveWorkbook. SaveAs GuardarComo

Me arroja el siguiente error.

La verdad no se que este sucediendo. Si alguno puede ayudarme estaré agradecido.

1 Respuesta

Respuesta
1

Cambia esta línea

ActiveWorkbook. SaveAs GuardarComo

Por esta

ActiveWorkbook. SaveAs GuardarComo, xlOpenXMLWorkbook


Si tienes problemas, también cambia esta línea:

Extension = .Trim(Right(.Substitute(GuardarComo, ".", .Rept(" ", 500)), 500))

Por esta

Extension = Mid(GuardarComo, InStrRev(GuardarComo, ".") + 1)


Si sigues con problemas, tendrías que decirme qué tienes en la variable NombreHoja al momento de que ocurre el error

Si se resolvió el problema, no olvides valorar la respuesta.

Hola dante. NombreHoja tiene Inventario del Año 2016

Poniendo eso que me dices me cambia el nombre es mi libro actual y no el libro que estoy generando nuevo. 

¿Qué versión de excel tienes?

Envíame tu archivo para revisarlo.

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “Manuel Escalona” y el título de esta pregunta.

Excel 2013 dante. Ya te lo envío

Enviado

Dante. A mi me cambia el nombre del archivo activo. Además de eso el archivo que genero lo establece con macros. Y no puede ser usado con macros. Perdona la tardanza en responder estaba en otras labores que no estaban planificadas

Te anexo otra alternativa para establecer en un objeto el nuevo libro creado:

Sub ExportaDatos()
Dim VentanasProtegidas As Boolean
Dim EstructuraProtegida As Boolean
Dim NombreHoja As String
Dim Confirmacion As String
Dim NombreArchivo As String
Dim GuardarComo As Variant
Dim Extension As String
'
'En caso de error.
On Error GoTo ErrorHandler
'
semana = Year(Date)
'Validamos si la ventana o la estructura del archivo están protegidos.
VentanasProtegidas = ActiveWorkbook.ProtectWindows
EstructuraProtegida = ActiveWorkbook.ProtectStructure
'
'En caso de estar protegidas mostramos mensaje.
If VentanasProtegidas = True Or EstructuraProtegida = True Then
    MsgBox "No se puede ejecutar el comando cuando la estructura del archivo está protegida.", _
           vbExclamation, "Advertencia"
Else
    '
    'Copiamos la hoja y guardamos.
    NombreHoja = semana
    Confirmacion = MsgBox("Desea Guardar La Informacion Del Año '" & NombreHoja & "' como archivo nuevo?", _
                          vbQuestion + vbYesNo, "Confirmacion")
    Application.ScreenUpdating = True
    If Confirmacion = vbYes Then
'        Sheets("Hoja1").Select
'        Sheets("Hoja1").Copy
        '
        'Act.Por.Dante Amor
        '
        Set l1 = ThisWorkbook
        Application.SheetsInNewWorkbook = 1
        Set l2 = Workbooks.Add
        l1.Sheets(Array("Inventario", "Salidas_Enero", "Salidas_Febrero", _
                        "Salidas_Marzo", "Salidas_Abril", "Salidas_Mayo", _
                        "Salidas_Junio", "Salidas_Julio", "Salidas_Agosto", _
                        "Salidas_Septiembre", "Salidas_Octubre", "Salidas_Noviembre", _
                        "Salidas_Diciembre", "Entrada_Enero", "Entrada_Febrero", _
                        "Entrada_Marzo", "Entrada_Abril", "Entrada_Mayo", _
                        "Entrada_Junio", "Entrada_Julio", "Entrada_Agosto", _
                        "Entrada_Septiembre", "Entrada_Octubre", "Entrada_Noviembre", _
                        "Entrada_Diciembre", "Departamento", "Totales")).Copy _
            after:=l2.Sheets(1)
        NombreArchivo = "Inventario del año " & semana
        GuardarComo = Application.GetSaveAsFilename(InitialFileName:="Inventario del año " & NombreHoja, _
            filefilter:="Libro de Excel(*.xlsx), *.xlsx, Libro de Excel habilitado para macros(*.xlsm), *.xlsm, Libro de Excel 97-2003(*.xls), *.xls,CSV (delimitado por comas)(*.csv),*.csv", _
            Title:="Guardar Como")
        If GuardarComo = False Then
            Workbooks(NombreArchivo).Close SaveChanges:=False
        Else
            With Application.WorksheetFunction
                Extension = .Trim(Right(.Substitute(GuardarComo, ".", .Rept(" ", 500)), 500))
            End With
            Application.DisplayAlerts = False
            Select Case Extension
                Case Is = "xlsx"
                    'ActiveWorkbook.SaveAs GuardarComo
                    l2.SaveAs GuardarComo, xlOpenXMLWorkbook
                Case Is = "xlsm"
                    l2.SaveAs GuardarComo, xlOpenXMLWorkbookMacroEnabled
                Case Is = "xls"
                    l2.SaveAs GuardarComo, xlExcel8
                Case Is = "csv"
                    l2.SaveAs GuardarComo, xlCSV
                Case Else
                    l2.SaveAs GuardarComo
            End Select
            Call RecorreLibro(NombreArchivo)
            l2.Sheets(1).Delete
            l2.Close SaveChanges:=True
            'Call BorraDatos
            '
            'Fin.Act.Por.Dante Amor
            '
        End If
    Else
    End If
End If
'Application.ActiveWorkbook.Close SaveChanges:=False
Exit Sub
'En caso de error mostramos un mensaje.
ErrorHandler:
MsgBox "Ha ocurrido un error: " & Err.Description, vbExclamation, "ERROR"
'Workbooks(NombreArchivo).Close SaveChanges:=False
End Sub
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas