Saltar al contenido

Pedir al usuario que escriba el nombre de la hoja nueva


Recommended Posts

publicado

Buenas tardes. 

Tengo una macro que crea hojas copiando una ya existente, y yo quiero que cuando se creen estas nuevas hojas le salga un cuadro o algo al usuario para que escriba el nombre que quiere.

Ejemplo:

Tengo: 

HojaBase, HojaGeneradora

En la HojaBase está la macro que crea nuevas hojas copiando HojaGeneradora y los nombres de estas nuevas hojas por defecto son asi: HojaGeneradora (2), HojaGeneradora (3), etc.

Entonces yo quiero que cuando se cliquee en la macro para crear una nueva hoja, en lugar de que excel la renombre como HojaGeneradora (número), se le pida al usuario el nombre que quiera que tenga.

¿Es eso posible?

Gracias.

publicado
Hace 12 horas, 96andres96 dijo:

¿Es eso posible?

Sí:
 

nom=InputBox("Introduzca el nombre de la Hoja nueva","Nombre de Hoja")
ActiveSheet.Copy
ActiveSheet.Name=nom

 

publicado
Hace 10 horas, Haplox dijo:

Sí:
 


nom=InputBox("Introduzca el nombre de la Hoja nueva","Nombre de Hoja")
ActiveSheet.Copy
ActiveSheet.Name=nom

 

Me surge un error y una duda.

Yo tengo una macro que copia una hoja base y a partir de esa hoja pues genera otras iguales. Entonces puse tu código en esa macro para que al generar una nueva hoja me salte de forma automática lo de poner su nombre:

Sub GenerarNuevaEmpresa()
'
' Acceso directo: CTRL+e
'
    Sheets("NuevaEmpresa").Select
    Sheets("NuevaEmpresa").Copy After:=Sheets(5)
    nom = InputBox("Introduzca el nombre de la Hoja nueva", "Nombre de Hoja")
	ActiveSheet.Copy
	ActiveSheet.Name = nom
End Sub

 

El error es que cuando le pongo el nombre, efectivamente me copia la hoja, pero me la ubica en un libro aparte y yo quiero que se ubique en el mismo libro que tengo yo.

A parte de esto, gracias por la ayuda, me ha servido.

publicado

He logrado solucionar lo de que copie en otra hoja. Ya me copia todo correcto, pero tengo un nuevo problema y con este si que no he logrado solucionarlo:

Sub GenerarNuevaEmpresa()
'
' GenerarNuevaEmpresa Macro
' Esta macro genera una nueva empresa a partir de la hoja BaseEmpresa.
'
' Acceso directo: CTRL+e
'
    nom = InputBox("Introduzca el nombre de la Hoja nueva", "Nombre de Hoja")
    
    For s = 1 To Sheets.Count
   
        Do While Sheets(s).Name = nom Or Sheets(s).Name = ""
            nom = InputBox("Ese nombre ya existe. Introduzca el nombre de la Hoja nueva", "Nombre de Hoja")
        Loop
   
    Next 'cierre del for
    
    Sheets("NuevaEmpresa").Copy After:=Sheets(5)
    ActiveSheet.Name = nom
    
End Sub

Cuando creo una empresa quiero que su nombre no esté repetido. Por eso le pido al usuario que el nombre introducido no se repita con el de ninguna otra hoja del libro, pero me surge el problema de que si deja espacio en blanco la sentencia del while no le afecta. Del mismo modo me pasa con el que si elige un nombre repetido. Por ejemplo si tengo una hoja llamada A y otra llamada B y el usuario al introducir el nombre de la nueva hoja la llama A le sale error porque está repetida, pero si luego introduce el nombre de otra hoja existente ahí el while no salta. ¿Qué puede ser?

publicado
En 16/11/2020 at 14:41 , 96andres96 dijo:

Cuando creo una empresa quiero que su nombre no esté repetido

Prueba con el siguiente código. El que tienes no está bien construido, por eso te da error

Sub GenerarNuevaEmpresa()
'
' GenerarNuevaEmpresa Macro
' Esta macro genera una nueva empresa a partir de la hoja BaseEmpresa.
'
' Acceso directo: CTRL+e
'
    nom = InputBox("Introduzca el nombre de la Hoja nueva", "Nombre de Hoja")
    
For s = 1 To Sheets.Count
	If Sheets(s).name=nom then
		c=c+1
	End If
Next s
    
    If c>0 then
    	nom = InputBox("Ese nombre ya existe. Introduzca el nombre de la Hoja nueva", "Nombre de Hoja")
        Sheets("NuevaEmpresa").Copy After:=Sheets(5)
    	ActiveSheet.Name = nom
    Else
    	Sheets("NuevaEmpresa").Copy After:=Sheets(5)
    	ActiveSheet.Name = nom
    End If
    
End Sub
publicado
Hace 7 horas, Haplox dijo:

Prueba con el siguiente código. El que tienes no está bien construido, por eso te da error


Sub GenerarNuevaEmpresa()
'
' GenerarNuevaEmpresa Macro
' Esta macro genera una nueva empresa a partir de la hoja BaseEmpresa.
'
' Acceso directo: CTRL+e
'
    nom = InputBox("Introduzca el nombre de la Hoja nueva", "Nombre de Hoja")
    
For s = 1 To Sheets.Count
	If Sheets(s).name=nom then
		c=c+1
	End If
Next s
    
    If c>0 then
    	nom = InputBox("Ese nombre ya existe. Introduzca el nombre de la Hoja nueva", "Nombre de Hoja")
        Sheets("NuevaEmpresa").Copy After:=Sheets(5)
    	ActiveSheet.Name = nom
    Else
    	Sheets("NuevaEmpresa").Copy After:=Sheets(5)
    	ActiveSheet.Name = nom
    End If
    
End Sub

 

Gracias por responder, pero me sigue saliendo el mismo error.

Si por ejemplo tengo una hoja llamada Hola, y al crear otra empresa le pongo el nombre de Hola me ejecuta bien el código, pero si por una segunda vez introduzco el nombre Hola me salta error en el código. Es decir, si el usuario se equivoca y repite una vez el nombre de una hoja ya creada todo bien, pero si escribe dos veces por error el nombre de una hoja repetida salta error. He probado con muchos códigos y de forma diferente, pero no consigo solucionarlo.

publicado
Hace 5 horas, 96andres96 dijo:

Si por ejemplo tengo una hoja llamada Hola, y al crear otra empresa le pongo el nombre de Hola me ejecuta bien el código, pero si por una segunda vez introduzco el nombre Hola me salta error en el código

Chico, hay que ser más espabilado... ?

Sub GenerarNuevaEmpresa()
'
' GenerarNuevaEmpresa Macro
' Esta macro genera una nueva empresa a partir de la hoja BaseEmpresa.
'
' Acceso directo: CTRL+e
'
    nom = InputBox("Introduzca el nombre de la Hoja nueva", "Nombre de Hoja")
    
For s = 1 To Sheets.Count
	If Sheets(s).name=nom then
		c=c+1
	End If
Next s

seguir:
    If c>0 then
    	nom = InputBox("Ese nombre ya existe. Introduzca el nombre de la Hoja nueva", "Nombre de Hoja")
        if nom=nom then
        	MsgBox "No puede introducir el mismo nombre, pues está repetido","Error en nombre"
        	goto seguir
        End If
        Sheets("NuevaEmpresa").Copy After:=Sheets(5)
    	ActiveSheet.Name = nom
    Else
    	Sheets("NuevaEmpresa").Copy After:=Sheets(5)
    	ActiveSheet.Name = nom
    End If
    
End Sub
publicado
Hace 4 horas, Haplox dijo:

Chico, hay que ser más espabilado... ?


Sub GenerarNuevaEmpresa()
'
' GenerarNuevaEmpresa Macro
' Esta macro genera una nueva empresa a partir de la hoja BaseEmpresa.
'
' Acceso directo: CTRL+e
'
    nom = InputBox("Introduzca el nombre de la Hoja nueva", "Nombre de Hoja")
    
For s = 1 To Sheets.Count
	If Sheets(s).name=nom then
		c=c+1
	End If
Next s

seguir:
    If c>0 then
    	nom = InputBox("Ese nombre ya existe. Introduzca el nombre de la Hoja nueva", "Nombre de Hoja")
        if nom=nom then
        	MsgBox "No puede introducir el mismo nombre, pues está repetido","Error en nombre"
        	goto seguir
        End If
        Sheets("NuevaEmpresa").Copy After:=Sheets(5)
    	ActiveSheet.Name = nom
    Else
    	Sheets("NuevaEmpresa").Copy After:=Sheets(5)
    	ActiveSheet.Name = nom
    End If
    
End Sub

Gracias por la ayuda. De todas formas tuve que cambiar algunas cosas del código que me mandaste para que se ejecutase bien, pero gracias a él puede hacerlo. Muchas gracias.

publicado

Hola

El problema no es solo si el usuario coloca un nombre repetido, también hay que considerar que no ponga caracteres inválidos en el nombre de hoja como ?*/[].... y además que respete el máximo de caracteres en el nombre de hoja (31 caracteres)

Este código te puede servir

Sub Copiar()
    Dim Nombre As String
    On Error Resume Next
    Sheets("NuevaEmpresa").Copy after:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
    Do
        Err.Clear
        Do
            Nombre = InputBox("Ponle un nombre a la nueva hoja", "Nombre de Hoja", Nombre)
            If Trim(Nombre) = "" Then
                MsgBox "No puedes dejar el nombre en blanco", vbCritical
            Else
                Exit Do
            End If
        Loop
        ActiveSheet.Name = Nombre
        If Err.Number <> 0 Then
            MsgBox "El nombre '" & UCase(Nombre) & "' no puede ser usado. Está repetido o el nombre contiene caracteres inválidos", vbCritical
        End If
    Loop While Err.Number <> 0
End Sub

 

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.