Visual Basic para Aplicaciones - error 91

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil
Val: 177
Bronce
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

error 91

Publicado por Albert (204 intervenciones) el 11/06/2020 20:38:59
Buenas tardes foreros, he creado un código que crea una copia de una hoja y le cambia el nombre lo he probado desde otra hoja y funciona, lo he hecho cuando cambio el valor de una celda concreta, pero si la tengo que modificar por lo que sea me crea otra hoja y asi una vez y otra he pensado que creando un form donde le pongo el nombre de la celda funcionara mejor, y cuando he creado el formulario para decirle la celda donde va a estar el nombre de la nueva hoja me da erro 91 en la linea del With, creo que no he creado bien la linea donde esta el nombre de la celda, os adjunto el código por si me podéis decir que es lo que esta mal.

1
2
3
4
5
6
7
8
9
10
11
Sub HojaNueva()
Dim Sitio As Range
 
With Sitio = Sheets("Datos").Range(UserForm1.TextBox1)
End With
 
Worksheets("Vivienda 1").Copy After:=Sheets(Sheets.Count)
Sheets("Vivienda 1 (2)").Select
Sheets("Vivienda 1 (2)").Name = Nombre
Sheets(Nombre) = Sitio.Select
End Sub

Mil gracias de antemano
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 Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

error 91

Publicado por Antoni Masana (498 intervenciones) el 12/06/2020 09:03:27
Vamos por partes:

he creado un código que crea una copia de una hoja y le cambia el nombre

Esta esta bien pero si lo ejecutas dos veces la segunda da error porque intentas crear dos hojas con el mismo nombre.

lo he hecho cuando cambio el valor de una celda concreta, pero si la tengo que modificar por lo que sea me crea otra hoja y así una vez y otra

Evidentemente. si la macro se ejecuta cada vez que cambias el contenido de una celda y cada contenido es diferente tendrás un montón de hoja.

La macro que has publicado esta llena de errores.
Lo mejor es que subas el libro y explique cuando y porque se debe crear una nueva hoja y sera más fácil ayudarte.

Saludos.
\\//_
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
sin imagen de perfil
Val: 177
Bronce
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

error 91

Publicado por Albert (204 intervenciones) el 13/06/2020 19:07:11
Gracies Antoni por tu interés, adjunto el libro donde esta la macro , si vas a la hoja DATOS en el editor veras como lo he hecho para poder cambiar en nombre de las hojas (depende del proyecto las llaman de una manera u otra) y por si acaso son necesarias mas he creado lo que veras al final (en verde) pero pasa lo que ya conté se crea cada vez que cambio en nombre de momento solo la columna "L" pero si genero dos no veas la que lío......
Cuando clicas el botón donde debería abrir el formulario para poner en nombre es cuando da el error 91 si abrir el form
Mil Gracias de antemano
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
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

error 91

Publicado por Antoni Masana (498 intervenciones) el 14/06/2020 10:08:43
Esto es lo que debe tener para que al modificar las celdas del rango C8:K8 cambie el nombre de la hoja y no de errores.

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Private Texto As String
 
' ---&--- Guarda el contenido de las celda al entrar
 
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Column >= 3 And Target.Column <= 11 And Target.Row = 8 Then
        Texto = Target.Text
    End If
End Sub
 
' ---&--- Verifica al salir de la celda
 
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Existe As Boolean, A As Byte
 
    ' ---&--- Delimita al Rango C8:K8
 
    If Target.Column >= 3 And Target.Column <= 11 And Target.Row = 8 Then
 
        ' ---&--- Verifica que el nuevo nombre de hoja no exista
 
        Existe = False
        For A = 1 To Sheets.Count
            If UCase(Sheets(A).Name) = UCase(Target.Text) Then Existe = True
        Next
 
        ' ---&--- El Ya existe una celda con este nombre
 
        If Existe Then
            MsgBox Target.Text & vbCrLf & vbCrLf & _
                   "Este nombre de hoja ha existe.", _
                   vbCritical, "NOMBRE DE HOJA"
 
            Application.EnableEvents = False
            Range(Target.Address) = Texto
            Application.EnableEvents = True
            Exit Sub
        End If
 
        ' ---&--- Cambia el nombre de la hoja
 
        For A = 1 To Sheets.Count
            If UCase(Sheets(A).Name) = UCase(Texto) Then
                Sheets(A).Name = Target.Text
            End If
        Next
        Exit Sub   ' --- Sale por que yo no tiene nada que hacer para este rango
    End If
End Sub

Pruebas realizadas en la celda C8:

- poner Vivienda 0
- poner Vivienda 1
- poner Vivienda 9
- poner Datos

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 177
Bronce
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

error 91

Publicado por Albert (204 intervenciones) el 14/06/2020 17:51:01
Gracias por tu respuesta, en

Private Sub Worksheet_Change(ByVal Target As Range de la columna C a la K No da error, siempre cambia el nombre y si ya existe salta un error 1004, con lo que voy a usar parte de tu código para que salga como el tuyo, donde da error es al intentar abrir el formulario en el modulo2, una vez generada la nueva hoja con el nombre de la celda del textbox1 del form, lo suyo seria que escribiera

Set KeyCells = Range("?8")
If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then
Hoja??.Name = [?8]
en la hoja 1 donde están el resto de hojas, pero no encuentro la manera de nombrar la cabecera de la hoja.

Gracias
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
sin imagen de perfil
Val: 177
Bronce
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

error 91

Publicado por Albert (204 intervenciones) el 15/06/2020 20:07:14
Buenas tardes foreros Ya he resuelto lo del error 91 os adjunto el codigo por si alguien lo necesita, ahora ya solo me falta encontrar la manera de añadir los datos en la hoja principal

1
2
3
4
5
6
7
8
9
10
11
Sub HojaNueva()
Dim Sitio As Range
 
Set Sitio = Sheets("Datos").Range(UserForm1.TextBox1)
 
With Sitio
Worksheets("Vivienda 1").Copy After:=Sheets(Sheets.Count)
Sheets("Vivienda 1 (2)").Select
Sheets("Vivienda 1 (2)").Name = Sitio
End With
End Sub

Saludos
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