Verificar el nombre de una hoja de calculo

Tengo el siguiente código:

Sub NombreHoja()
   ActiveSheet.Name = Range("B1").Value
End Sub

Bueno pone el nombre a la hoja de calculo según el valor de la celda, mi pregunta es de que si hay otra hoja con el mismo nombre me de un aviso para cambiar de nombre o en su caso asignarle por defecto un carater numérico para diferenciarse de la otra hoja que tenga el mismo nombre.

2 Respuestas

Respuesta
1

Una opción puede ser colocar un control de error y en ese caso asignarle otro nombre o dejar el predeterminado que asigna Excel.

Sub NombreHoja()
On Error Resume Next
   ActiveSheet.Name = Range("B1").Value
   If Err.Number > 0 Then
    MsgBox "Ya existe hoja con nombre " & [B1]
    'opcional: colocar otro nombre
    ActiveSheet.Name = "AJUSTAR"
    End If
    On Error GoTo 0
End Sub

Otra opción sería controlar primero si ya existe ese nombre y avisar para que modifiquen la celda B1:

Sub Nombre_Hoja()
For Each sh In Sheets
If sh.Name = Range("B1") Then
    MsgBox "Ya existe hoja con nombre " & [B1] & ". Modifica la celda B1."
    Exit Sub
End If
Next sh
ActiveSheet.Name = Range("B1").Value
End Sub

Muy amable por las opciones, las dos son excelentes opciones, solo que en la opción1 sera que por ejemplo digamos ya tengo la hoja con el nombre AAA y bueno al querer poner el mismo nombre en una nueva hoja que en vez de poner "AJUSTAR" pueda poner el valor de la celda B1 más un carácter como " AAA1" así como hace el excel cuando creamos una nueva hoja lo renombra AAA(2)

Saludos

Jesús

Más o menos así:

Sub NombreHoja()
'ActiveSheet.Name = Range("B1").Value
For Each sh In Sheets
If sh.Name = Range("B1") Then
MsgBox "Ya existe hoja con el mismo código " & [B1] & "Vuelva a intentar apretando el boton renombrar hoja"
Range("b1").FormulaLocal = "=INICIALES(B2)&+2"
If sh.Name = Range("B1") Then
Range("b1").FormulaLocal = "=INICIALES(B2)&+3"
If sh.Name = Range("B1") Then
Range("b1").FormulaLocal = "=INICIALES(B2)&+4"
Exit Sub
End If
End If
End If
Next sh
ActiveSheet.Name = Range("B1").Value

End sub 

Como no sabemos hasta cuántos subíndices puedes llegar a tener, vamos a colocar algún separador, en mi caso utilicé guión bajo.

Entonces si existe la hoja a la activa la nombrará como xxxx_1, si luego necesitas otra será xxxx_2 y así.

Sub Nombre_Hoja()
'x Elsamatilde
For Each Sh In Sheets
If InStr(1, Sh.Name, Range("B1")) > 0 Then
    'se busca el guión bajo porque no sabemos cuántos índices puede llegar a tener
    For i = Len(Sh.Name) To 1 Step -1
        If Mid(Sh.Name, i, 1) = "_" Then
            indi = Right(Sh.Name, Len(Sh.Name) - i) + 1
            nvonbre = Left(Sh.Name, i) & indi
            ActiveSheet.Name = nvonbre
            Exit For
        End If
    Next i
    'si i = 1 es que no encontró el guión
    If i = 0 Then
        nvonbre = Range("B1") & "_1"
        ActiveSheet.Name = nvonbre
    End If
    MsgBox "Ya existe hoja con nombre " & [B1] & ". Se la nombra como " & nvonbre & ".", , "ATENCIÓN"
    Exit Sub
End If
Next Sh
ActiveSheet.Name = Range("B1").Value
End Sub

Probala y si esto resuelve tu consulta no olvides valorarla.

Sdos!

Respuesta
1

Prueba esto

Function BuscarHoja1(nombreHoja As String) As Boolean
For i = 1 To Worksheets.Count
If Worksheets(i).Name = nombreHoja Then
BuscarHoja1 = True
Exit Function
End If
Next
BuscarHoja1 = False
End Function

Y quedaría comprobar y actuar

Private Sub CommandButton1_Click()
Dim nombreHoja As String
nombreHoja = Range("B1").Value
If (BuscarHoja1(nombreHoja)) Then
MsgBox nombreHoja & " encontrada"
Else
MsgBox nombreHoja & " no existe"
End If
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas