Editar macro para no generar vínculos

Tengo este código que Dante Amor, me ayudo a generar:

Private Sub CommandButton3_Click()
'Por.Dante Amor
Application.ScreenUpdating = False
Application.DisplayAlerts = False
'
Set l1 = ThisWorkbook
nombre = Sheets(2).[A62]
If nombre = "" Then
MsgBox "La celda A62 esta vacía, revisar.", vbCritical
Exit Sub
End If
If IsDate(nombre) Then
nombre = Format(nombre, "dd-mm-yyyy")
End If
una = True
For Each h In Sheets
If h.Visible = True Then
If una Then
una = False
h.Copy
Set l2 = ActiveWorkbook
Else
h.Copy After:=l2.Sheets(l2.Sheets.Count)
End If
End If
Next
'
ruta = l1.Path & "\"
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Selecciona una carpeta"
.AllowMultiSelect = False
.InitialFileName = ruta
If .Show <> -1 Then Exit Sub
cp = .SelectedItems(1)
End With
'
l2.SaveAs Filename:=cp & "\" & nombre & ".xlsx", _
FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
l2.Close
'
MsgBox "Hojas guardadas con el nombre: " & nombre, vbInformation, "COPIAR HOJAS"
End Sub

El detalle es que cuando genera el nuevo libro, queda vinculado al libro de origen y varias fórmulas dan resultado 0, por ese vínculo que se generó; por eso pido su asesoría para que cuando se copie a un libro nuevo, no suceda esto

1 respuesta

Respuesta
1

H o l a:

Prueba con la siguiente macro

Private Sub CommandButton3_Click()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    '
    Set l1 = ThisWorkbook
    nombre = Sheets(2).[A62]
    If nombre = "" Then
        MsgBox "La celda A62 esta vacía, revisar.", vbCritical
        Exit Sub
    End If
    If IsDate(nombre) Then
        nombre = Format(nombre, "dd-mm-yyyy")
    End If
    '
    ruta = l1.Path & "\"
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "Selecciona una carpeta"
        .AllowMultiSelect = False
        .InitialFileName = ruta
        If .Show <> -1 Then Exit Sub
        cp = .SelectedItems(1)
    End With
    '
    ThisWorkbook.SaveCopyAs cp & "\" & nombre & ".xlsm"
    Set l2 = Workbooks.Open(cp & "\" & nombre & ".xlsm")
    For Each h In l2.Sheets
        If h.Visible = False Then
            h.Delete
        End If
    Next
    l2.SaveAs Filename:=cp & "\" & nombre & ".xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
    l2.Close
    '
    MsgBox "Hojas guardadas con el nombre: " & nombre, vbInformation, "COPIAR HOJAS"
End Sub

':)
S a l u d o s . D a n t e   A m o r
':) Si es lo que necesitas. Recuerda valorar la respuesta. G r a c i a s.

Hola experto gracias por la respuesta, te mando el error que me arrojo:

De hecho si crea el archivo, pero cuando deseo abrirlo, me manda error de que el formato o la extensión no son válidos

Saludos

H o l a:

Elegiste la única carpeta que tiene un problema.

¿Probaste con otra carpeta?

De cualquier forma te anexo la macro actualizada:

Private Sub CommandButton3_Click()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    '
    Set l1 = ThisWorkbook
    nombre = Sheets(2).[A62]
    If nombre = "" Then
        MsgBox "La celda A62 esta vacía, revisar.", vbCritical
        Exit Sub
    End If
    If IsDate(nombre) Then
        nombre = Format(nombre, "dd-mm-yyyy")
    End If
    '
    ruta = l1.Path & "\"
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "Selecciona una carpeta"
        .AllowMultiSelect = False
        .InitialFileName = ruta
        If .Show <> -1 Then Exit Sub
        cp = .SelectedItems(1)
    End With
    '
    If Right(cp, 1) = "\" Then
        cp = Mid(cp, 1, Len(cp) - 1)
    End If
    ThisWorkbook.SaveCopyAs cp & "\" & nombre & ".xlsm"
    Set l2 = Workbooks.Open(cp & "\" & nombre & ".xlsm")
    For Each h In l2.Sheets
        If h.Visible = False Then
            h.Delete
        End If
    Next
    l2.SaveAs Filename:=cp & "\" & nombre & ".xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
    l2.Close
    '
    MsgBox "Hojas guardadas con el nombre: " & nombre, vbInformation, "COPIAR HOJAS"
End Sub

':)
':)

Hola experto, ya aplique la macro que me mandaste y me arroja el mismo resultado,

El error lo ubica en esta parte del código, ya hice pruebas en otras carpetas y el error persiste, tu ayuda por favor.

Saludos

Pero no agregaste las nueva líneas que puse en la macro:

   If Right(cp, 1) = "\" Then
        cp = Mid(cp, 1, Len(cp) - 1)
    End If

Si de hecho, te agrego lo que me indica e imagen del código que me mandaste ya con la actualización:

Saludos

No entiendo. ¿Modificaste la macro?

Si modificas la macro y no me dices qué le modificaste, no puedo saber qué está pasando.

La macro va a abrir un archivo "xlsm" y en tu imagen dice que intenta abrir un archivo "xlsx":


También veo que ya valoraste mi respuesta y yo sigo ayudando. Si ya no requieres mi ayuda, no hay problema. Pero si todavía quieres mi ayuda, espera hasta al final y entonces decides la valoración a mi respuesta.


Si quieres mi ayuda, envíame tu archivo con la última macro que tengas.

Me dices qué versión de excel tienes.

Mi correo [email protected]

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

Hola buen día, ya le mande el correo

Saludos

Hola, ya la probe y esta un 90%; el ultimo detalle espero y es que me genera una copia extra del archivo original,  ejemplo:

Al presionar el botón para generar la macro me genera 2 archivos:

El archivo que necesito con las pestañas que yo seleccione (este es el bueno) y una copia extra del archivo original, este es el que le pediría si me ayudar a eliminar.

Saludos

Para crear lo que necesitas es necesario crear un archivo de respaldo. Lo voy a eliminar.

Macro actualizada:

Private Sub CommandButton3_Click()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    '
    Set l1 = ThisWorkbook
    nombre = Sheets(2).[A62]
    If nombre = "" Then
        MsgBox "La celda A62 esta vacía, revisar.", vbCritical
        Exit Sub
    End If
    If IsDate(nombre) Then
        nombre = Format(nombre, "dd-mm-yyyy")
    End If
    '
    Ruta = l1.Path & "\"
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "Selecciona una carpeta"
        .AllowMultiSelect = False
        .InitialFileName = Ruta
        If .Show <> -1 Then Exit Sub
        cp = .SelectedItems(1)
    End With
    If Right(cp, 1) = "\" Then
        cp = Mid(cp, 1, Len(cp) - 1)
    End If
    ThisWorkbook.SaveCopyAs cp & "\respaldo.xlsb"
    Application.EnableEvents = False
    Set l2 = Workbooks.Open(cp & "\respaldo.xlsb")
    For Each h In l2.Sheets
        If h.Visible = False Then
            h.Delete
        End If
    Next
    l2.SaveAs Filename:=cp & "\" & nombre & ".xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
    l2.Close
    Kill cp & "\respaldo.xlsb"
    Application.EnableEvents = True
    '
    MsgBox "Hojas guardadas con el nombre: " & nombre, vbInformation, "COPIAR HOJAS"
End Sub

'Recuerda cambiar la valoración a la respuesta. Al final de mi respuesta tienes un botón que dice "VOTADA", presiona ese botón y te aparece la opción "CAMBIAR VOTACIÓN"

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas