Excel - CREAR HOJAS Y ELIMINAR SI SE REPITE EL NOMBRE

 
Vista:
sin imagen de perfil
Val: 15
Ha aumentado 1 puesto en Excel (en relación al último mes)
Gráfica de Excel

CREAR HOJAS Y ELIMINAR SI SE REPITE EL NOMBRE

Publicado por DAVID (9 intervenciones) el 14/07/2017 19:12:35
SALUDOS A TODOS TENGO UN PROBLEMA CON MI CÓDIGO OJALA ME PUEDAN AYUDAR POR FAVOR, EL PROBLEMA ES EL SIGUIENTE:

HE CREADO UN USERFORM CON LA FINALIDAD DE CREAR UN REPORTE RESPECTO A UNA BASE DE DATOS, CUANDO LE DOY CLIC EN "CREAR REPORTE" ME TIENE QUE CREAR UNA HOJA (LA CUAL YO INGRESO EL NOMBRE DE LA HOJA) Y DENTRO DE ESTA TODO EL REPORTE, PERO ANTES DE CREAR LA HOJA QUIERO CONDICIONAR DE QUE SI EL NOMBRE DE LA HOJA QUE HE INGRESADO YA EXISTE TENGA LA OPCIÓN DE CAMBIAR EL NOMBRE DE LA HOJA QUE HE INGRESADO O DE ELIMINAR LA HOJA EXISTENTE PARA LUEGO CREAR UN NUEVO REGISTRO; PERO SI EL NOMBRE DE LA HOJA QUE HE INGRESADO ES DIFERENTE A LOS NOMBRES DE LAS HOJAS EXISTENTES SIMPLEMENTE ME CREA EL REPORTE.

HE CREADO EL CÓDIGO PERO LO COMBINO ESTAS 3 CONDICIONES ME SALE ERROR 1004, EL NOMBRE ESTÁ OCUPADO O ALGO ASÍ, NO SE SI PUEDEN DARLE UNA CHEQUEADA AL CÓDIGO PARA VER SI HE COMETIDO UN ERROR.

EN LA HOJA PRINCIPAL DE LA BASE DE DATOS HAY UN BOTÓN "CREAR UN REPORTE" QUE ME ABRE ESTE USERFORM, SE AGRADECE DE ANTE MANO SU APOYO.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Rafael

CREAR HOJAS Y ELIMINAR SI SE REPITE EL NOMBRE

Publicado por Rafael (29 intervenciones) el 15/07/2017 07:46:05
Buenas David,

Gracias por compartir tu código aquí, tras analizarlo he detectado el problema:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
'PARA CREAR UN REPORTE SI NO SE REPITE EL NOMBRE DE LA HOJA
 
Application.ScreenUpdating = False
 
For i = 1 To Worksheets.Count
 
    HOJAEXISTENTE = Sheets(i).Name
 
    If HOJAEXISTENTE <> NOMBREHOJA Then
 
    Call DATA.CREAR_REPORTE
 
'    Else
'
'    GoTo HERE:
 
    End If
 
Next i
 
Application.ScreenUpdating = True

Fijate bien lo que estás haciendo, coges el nombre de la primera hoja, SI NO ES EL QUE HAS ELEGIDO PARA CREAR (perdon por las mayusculas), Crea la hoja nueva con el nombre, hace todos los pasos y vuelve aquí, pasa a la segunda hoja para coger su nombre, y repite el proceso, en el momento que ya pasa a comprobar la segunda hoja ya EXISTE la hoja nueva y por ello te da el error.

Solución que te propongo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Application.ScreenUpdating = False
 
For i = 1 To Worksheets.Count
 
    HOJAEXISTENTE = Sheets(i).Name
 
    If HOJAEXISTENTE <> NOMBREHOJA Then
 
        VARIABLEINVENTADA = VARIABLEINVENTADA + 0
 
    Else
 
        VARIABLEINVENTADA = VARIABLEINVENTADA + 1
'
'    GoTo HERE:
 
    End If
 
Next i
 
    If VARIABLEINVENTADA = 0 Then
 
        Call DATA.CREAR_REPORTE
 
    Else
 
        MsgBox "Ya existe la hoja prueba con otro nombre"
 
    End If
 
Application.ScreenUpdating = True

Te he puesto una variable inventada que lo que te va a hacer es la comprobación simplemente, si el nombre no existe suma 0 a esa variable, si existe suma 1, al final de toda la revisión si la variable sigue siendo 0 podrá crear la hoja, sino devuelve un mensaje avisando de que ya existe esa hoja.

Por último échale un ojo al siguiente bloque:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
'PARA ELIMINAR UNA HOJA SI ESTÁ DUPLICADO Y LUEGO CREAR EL REPORTE
 
'HERE:
 
Application.ScreenUpdating = False
 
For i = 1 To Worksheets.Count
 
    HOJAEXISTENTE2 = Sheets(i).Name
 
    If HOJAEXISTENTE2 = NOMBREHOJA2 Then
 
    COMODIN = MsgBox("HAY UNA HOJA CON EL MISMO NOMBRE, DESEA ELIMINARLA (SI) O DESEA CAMBIAR EL NOMBRE (NO)", vbYesNo, "ATENCIÓN")
 
    End If
 
Next i
 
If COMODIN = vbNo Then
 
    MsgBox "CAMBIE EL NOMBRE DE LA HOJA A CREAR POR FAVOR", vbExclamation, "RESULTADO"
 
    Exit Sub
 
Else
 
    MsgBox "SE ELIMINARÁ LA HOJA " & NOMBREHOJA2 & " Y SE CREARÁ UN NUEVO REPORTE.", vbInformation, "RESULTADO"
 
    Sheets(NOMBREHOJA2).Delete
 
    Call DATA.CREAR_REPORTE
 
End If
 
Application.ScreenUpdating = True

Ya que vuelves a comprobar por segunda vez si ya existe la hoja, creo que se podría obviar. Esto ya a tu gusto que los códigos son muy personales XD.

Espero te haya sido útil y te sirva esta respuesta.

Un saludo.
Rafa
http://officepostit.es
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar