No me manda aviso el cerrar el libro

Aquí de nuevo

No me manda aviso de existencia o no de la copia si existe copia o no, para que yo decida eliminar las copias o no, tomalo en cuenta

2 Respuestas

Respuesta
3

Me parece que te enredas por utilizar HOJA en lugar del nombre.

En el video Nº 11 de mi canal (Mejoras en el código) comento este detalle a partir del minuto 3, con la solución recomendada.

Por ahora, así quedó en tu libro:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Esto se ejecutará justo unos instantes antes de guardar el fichero y cerrar, para
'que al volver abrir, se abra con los nombres propios
If Hoja1.Name <> "Tabla1" Then Hoja1.Name = "Tabla1"
If Hoja2.Name <> "Tabla2" Then Hoja2.Name = "Tabla2"
If Hoja3.Name <> "Tabla3" Then Hoja3.Name = "Tabla3"
If Hoja4.Name <> "Suplente" Then Hoja4.Name = "Suplente"
'xxxxxxxxxx
Dim wSheet As Worksheet
'agregar todas las hojas en la matriz
hojas = Array("Tabla1", "Tabla2", "Tabla3")     'completar con las que falten
For y = LBound(hojas) To UBound(hojas)
    nbreCopia = "Copia_" & hojas(y) & "x"       'actualmente tus hojas tienen la x. (*)
    'control de posible hoja inexistente
    For Each sh In Sheets
        If sh.Name = nbreCopia Then
            'Si existe la hoja Copia se la elimina previa confirmación
            sino = MsgBox("La hoja " & nbreCopia & " existe. ¿Deseas eliminarla?", vbQuestion + vbYesNo, "Confirmar")
            'si se acepta se elimina
            If sino = vbYes Then
                Application.DisplayAlerts = False                      'deshabilita el mensaje de alerta al eliminar
                Sheets(nbreCopia).Delete
                Application.DisplayAlerts = True                       'habilita nuevamente los mensajes de alerta
            End If
            Exit For
        End If
    Next sh
Next y
End Sub

(*) Actualmente tus copias tienen una x al final, por eso le agregué esa letra en la cadena.

nbreCopia = "Copia_" & hojas(y) & "x"       'actualmente tus hojas tienen la x. (*)

Si no vas a colocar ningún agregado, dejala así:

nbreCopia = "Copia_" & hojas(y)

Respuesta
1

Aquí te dejo un ejemplo de cómo podrías implementar esta funcionalidad:

Sub VerificarCopia()
    Dim libro As Workbook
    Dim rutaArchivo As String
    ' Ruta del archivo que quieres verificar
    rutaArchivo = "C:\Ruta\Del\Archivo.xlsx"
    On Error Resume Next
    Set libro = Workbooks(rutaArchivo)
    On Error GoTo 0
    If Not libro Is Nothing Then
        MsgBox "Existe una copia del archivo abierta."
        ' Aquí puedes incluir el código para decidir si eliminar la copia o no
        ' Por ejemplo:
        ' If MsgBox("¿Deseas cerrar la copia del archivo?", vbYesNo) = vbYes Then
        '     libro.Close SaveChanges:=False
        ' End If
    Else
        MsgBox "No hay copias del archivo abiertas."
    End If
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas