Mensaje: hoja ya existe al guardar una hoja.

Agregar código de hoja ya existe a este código:

¿Cuando guardo una hoja con la fecha repetida me marca error.

Sub CpHoja()
'copiar hoja
Dim Carpeta As String
Carpeta = "C:\EMPRESA\"
MesAño = Sheets("hoja1").[e5] + Sheets("hoja1").[f5]
NombreAforo = "Ing" & "(" & MesAño & ")"
Dia = Sheets("hoja1").[d5]
Sheets("hoja2").[a1:e50].Copy
Workbooks.Open Filename:=(Carpeta & NombreAforo)
Set NuevaH = Worksheets.Add
With NuevaH
.Name = "Dia " & Dia
.[a1].PasteSpecial Paste:=xlPasteAll
.Columns("a").ColumnWidth = 3
.Columns("b:c").ColumnWidth = 34.43
.Columns("d").ColumnWidth = 3
.Columns("e").ColumnWidth = 34.43
.Rows("1:13").RowHeight = 12.75
.Rows("14:40").RowHeight = 25.5
.Rows("41:48").RowHeight = 12.75
End With
[f1].Activate
ActiveWorkbook.Close savechanges:=True
Application.CutCopyMode = False
Sheets("hoja2").[C14:c29,c32:c40].ClearContents
ActiveWorkbook.Save
End Sub

1 Respuesta

Respuesta
1

. 11.04.17 #VBA Control de existencia de hoja

Buenas noches, Cecilio

Sobre la misma rutina que publicaste agregué el control antes de crear la hoja.

Si esta ya existiera, un mensaje te avisará de tal situación y detendrá la ejecución de la macro.

Usa, entonces, esta versión:

Sub CpHoja()
'copiar hoja
Dim Carpeta As String
Carpeta = "C:\EMPRESA\"
MesAño = Sheets("hoja1").[e5] + Sheets("hoja1").[f5]
NombreAforo = "Ing" & "(" & MesAño & ")"
Dia = Sheets("hoja1").[d5]
'
'inserté control aquí:
On Error Resume Next
Set SheetExist = ActiveWorkbook.Sheets("Dia " & Dia)
If Err <> 0 Then
'creación de la hoja con el nombre indicado
    Sheets("hoja2").[a1:e50].Copy
    Workbooks.Open Filename:=(Carpeta & NombreAforo)
    Set NuevaH = Worksheets.Add
    With NuevaH
        .Name = "Dia " & Dia
        .[a1].PasteSpecial Paste:=xlPasteAll
        .Columns("a").ColumnWidth = 3
        .Columns("b:c").ColumnWidth = 34.43
        .Columns("d").ColumnWidth = 3
        .Columns("e").ColumnWidth = 34.43
        .Rows("1:13").RowHeight = 12.75
        .Rows("14:40").RowHeight = 25.5
        .Rows("41:48").RowHeight = 12.75
    End With
    [f1].Activate
    ActiveWorkbook.Close savechanges:=True
    Application.CutCopyMode = False
    Sheets("hoja2").[C14:c29,c32:c40].ClearContents
    ActiveWorkbook.Save
Else
    ElMensaje = "YA EXISTE HOJA CON EL NOMBRE: " & "Dia " & Dia & Chr(10) & _
    "Rutina termina aqui sin hacer cambio alguno."
    ElTitulo = "HOJA EXISTENTE!!!"
    TipoMens = vbCritical
    MsgBox ElMensaje, TipoMens, ElTitulo
End If
On Error GoTo 0
Err.Clear
Set SheetExist = Nothing
Set NuevaH = Nothing
End Sub

Gracias por la pronta respuesta. Al guardar una hoja con el día repetido no me manda el mensaje que la hoja ya existe, lo que hace es guardar la hoja como hoja1 o hoja2...

lo que necesito es: si la hoja ya existe no la guarde para poder cambiar el día. 

.

Hola, Cecilio

El problema está en que la evaluación de la existencia de la hoja se hacía sobre el archivo de donde se dispara la rutina y luego abría el archivo donde insertar la hoja.

Prueba con la siguiente variante que intenta resolver tal situación:

Sub CpHoja()
'copiar hoja
Dim Carpeta As String
Carpeta = "C:\EMPRESA\"
MesAño = Sheets("hoja1").[e5] + Sheets("hoja1").[f5]
NombreAforo = "Ing" & "(" & MesAño & ")"
Dia = Sheets("hoja1").[d5]
'
'  
ArchOrig = ActiveWorkbook.Name
Application.ScreenUpdating = False
'Control de existencia de hoja en destino:
'  
Workbooks.Open Filename:=(Carpeta & NombreAforo) ' movido aquí
ArchDest = ActiveWorkbook.Name
On Error Resume Next
Set SheetExist = ActiveWorkbook.Sheets("Dia " & Dia)
If Err <> 0 Then
    'creación de la hoja con el nombre indicado
    '  
    Windows(ArchOrig).Activate
    Sheets("hoja2").[a1:e50].Copy
    Windows(ArchDest).Activate
    Set NuevaH = Worksheets.Add
    With NuevaH
        .Name = "Dia " & Dia
        .[a1].PasteSpecial Paste:=xlPasteAll
        .Columns("a").ColumnWidth = 3
        .Columns("b:c").ColumnWidth = 34.43
        .Columns("d").ColumnWidth = 3
        .Columns("e").ColumnWidth = 34.43
        .Rows("1:13").RowHeight = 12.75
        .Rows("14:40").RowHeight = 25.5
        .Rows("41:48").RowHeight = 12.75
    End With
    [f1].Activate
    ActiveWorkbook.Close savechanges:=True
    Application.CutCopyMode = False
    Sheets("hoja2").[C14:c29,c32:c40].ClearContents
    ActiveWorkbook.Save
Else
    Application.ScreenUpdating = True
    ElMensaje = "YA EXISTE HOJA CON EL NOMBRE: " & "Dia " & Dia & Chr(10) & _
    "Rutina termina aqui sin hacer cambio alguno."
    ElTitulo = "HOJA EXISTENTE!!!"
    TipoMens = vbCritical
    MsgBox ElMensaje, TipoMens, ElTitulo
End If
On Error GoTo 0
Err.Clear
Set SheetExist = Nothing
Set NuevaH = Nothing
End Sub

Espero que ahora te funcione correctamente

Abrazo

Fer

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas