Está en la página 1de 3

mircoles, 28 de enero de 2015

VBA: Evitar nombres de hojas duplicados en Excel.


Al hilo de una entrada anterior (ver) un lector preguntaba por la forma de ir generando hojas con
nombres no duplicados, siguiendo una autonumeracin:
...cmo hacer si tengo registros repetidos en la hoja origen que hace que el programa falle porque ya tiene una hoja con ese nombre,, pero necesito que si existe una hoja
con ese nombre le ponga un _2 o un _3 y siga...

La idea es que a partir de un listado de una hoja de Excel ir generando las diferentes hojas, y en caso
de repeticin, aadirles un autonumrico:

El trabajo consiste en generar una Function ('ExisteHoja') que determine si existe o no una hoja en
nuestro libro de trabajo con el nombre nuevo a generar.
Esta Function la emplearemos en el procedimiento Sub 'CrearHojas', donde recorremos el rango de la
hoja de clculo con los nombres a dar, y con el que conseguimos ir renumerando aquellas hojas
iguales...
Insertamos y ejecutamos el siguiente procedimiento 'CrearHojas':
view plainprint?

1.

Sub CrearHojas()

2.

Dim HojaOrigen As Worksheet, HojaNueva As Worksheet

3.

Set HojaOrigen = Sheets("origen")

4.
5.

'para recorrer los 11 registros del listado

6.

For i = 1 To 11

7.

'duplicamos la Hoja 'modelo'

8.

Sheets("modelo").Copy after:=Worksheets(Worksheets.Count)

9.

Set HojaNueva = Sheets(Worksheets.Count)

10.

nombrehoja = Worksheets("origen").Cells(7 + i, 4).Value

11.
12.

If ExisteHoja(CStr(nombrehoja)) = True Then

13.

x=x+1

14.

If ExisteHoja(nombrehoja & "_" & x) = True Then

15.

y=y+1

16.

'damos nombre a la hoja cuando existe duplicidad...

17.

HojaNueva.Name = nombrehoja & "_" & y

18.

Else

19.
20.
21.

HojaNueva.Name = nombrehoja & "_" & x


End If
Else

22.

'damos nombre a la hoja si no existiera

23.

HojaNueva.Name = nombrehoja

24.

x = 1: y = 1

25.

End If

26.
27. Next i
28. End Sub
29. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
30. Function ExisteHoja(Nombre As String, Optional Libro As Workbook)

31. Dim sh As Worksheet


32. 'controlamos el argumento Opcional
33. 'que identifica el Libro donde Buscar...
34. If Libro Is Nothing Then Set Libro = ThisWorkbook
35.
36. 'controlamos la existencia de la hoja
37. 'si tuvieramos un error es que existe...
38. On Error Resume Next
39. Set sh = Libro.Sheets(Nombre)
40. On Error GoTo 0
41.
42. ExisteHoja = Not sh Is Nothing
43. End Function

El resultado sera:

También podría gustarte