Error "uso de la propiedad no es válido" usando codename

Estoy haciendo una aplicación que crea una hoja y la llama como pongas en el combobox, pero si la hoja ya existe entonces solo debería guardar los datos que están en el formulario

El código de crear la hoja funciona bien

nombre = Usf_PROVEEDOR.ComboBox1.Value
For x = 1 To Sheets.Count
If Sheets(x).Name = nombre Then nombre = ""
Next x
If nombre <> "" Then
Sheets("0").Select 'Hoja madre
Sheets("0").Copy after:=Sheets(1)
Selection.Copy
Sheets("0 (2)").Select
Sheets("0 (2)").Name = nombre
Sheets(nombre).Cells(4, Col).Value = Usf_PROVEEDOR.TextBox1

después de esto tengo puesto un else con el siguiente código

Else
nombre2 = Usf_PROVEEDOR.TextBox2.Value
For x = 1 To Sheets.Count
If Sheets(x).Name = nombre2 Then I = Sheets(x).CodeName
Hoja = I 
Hoja.Cells(4, Col) = Usf_PROVEEDOR.TextBox1

Si lo pongo así me da el error en "Hoja" uso de la propiedad no es válido,

Si lo pongo

Hoja = I.CodeName

da el error "calificador no valido"

Dim I As String

Dim Hoja As Sheets

Así los tengo calificados, ¿alguien me puede decir que es lo que hago mal?

1 Respuesta

Respuesta
1

Intenta con:

Else
nombre2 = Usf_PROVEEDOR.TextBox2.Value
For x = 1 To Sheets.Count
If Sheets(x).Name = nombre2 Then
  Set Hoja = Sheets(x)
  Exit For
End If
Hoja.Cells(4, Col) = Usf_PROVEEDOR.TextBox1

Gracias por tu respuesta ahora me da error de "variable de objeto o bloque with no establecido" en esta línea

With Hoja.Cells(4, Col) = Usf_PROVEEDOR.TextBox1

Gracias por tu ayuda

tenia "hoja" como Workbook     lo he vuelto a poner como Sheets y me da el error marcándome   .Cells  "no se encontró el método o el dato miembro"  he probado de poner range y me da el mismo error, he probado de poner .cells(4,5) y tampoco funciona siempre da el mismo error

Gracias y perdona la insistencia

Puedes poner todo el código de nuevo para ver como está ahora

Dim I As String
Dim nombre As String
Dim nombre2 As String
'Dim Hoja As Worksheet

Dim hoja As String


Dim Col&
Col = Cells(4, Columns.Count).End(xlToLeft).Column + 1
'----------------------------------------------------------------

nombre = Usf_PROVEEDOR.ComboBox1.Value
For x = 1 To Sheets.Count
If Sheets(x).Name = nombre Then nombre = ""
Next x
If nombre <> "" Then
Sheets("0").Select 'Hoja madre
Sheets("0").Copy after:=Sheets(1)
Selection.Copy
Sheets("0 (2)").Select
Sheets("0 (2)").Name = nombre
Sheets(nombre).Cells(4, Col).Value = Usf_PROVEEDOR.TextBox1
Else

nombre2 = Usf_PROVEEDOR.TextBox2.Value
For x = 1 To Sheets.Count
If Sheets(x).Name = nombre2 Then hoja = Sheets(x).CodeName
With I = (Sheets(nombre2).CodeName)
End With
Hoja3.Cells(4, 3).Value = hoja
Hoja3.Cells(4, 5).Value = I

He estado probando cosas y no hay manera de que funcione todoestas dos ultimas líneas son para comprobar si funciona y solo funciona la que pone "hoja" la otra no esta dando error pero no pone el codename en la celda

Gracias

Dim I As String
Dim nombre As String
Dim nombre2 As String
'Dim Hoja As Worksheet

Dim hoja As String


Dim Col&
Col = Cells(4, Columns.Count).End(xlToLeft).Column + 1
'----------------------------------------------------------------

nombre = Usf_PROVEEDOR.ComboBox1.Value
For x = 1 To Sheets.Count
If Sheets(x).Name = nombre Then nombre = ""
Next x
If nombre <> "" Then
Sheets("0").Select 'Hoja madre
Sheets("0").Copy after:=Sheets(1)
Selection.Copy
Sheets("0 (2)").Select
Sheets("0 (2)").Name = nombre
Sheets(nombre).Cells(4, Col).Value = Usf_PROVEEDOR.TextBox1
Else

nombre2 = Usf_PROVEEDOR.TextBox2.Value
For x = 1 To Sheets.Count
If Sheets(x).Name = nombre2 Then hoja = Sheets(x).CodeName
With   I = (Sheets(nombre2).CodeName)
End With
Hoja3.Cells(4, 3).Value = hoja
Hoja3.Cells(4, 5).Value = I

Estas dos últimas líneas son para comprobar que funciona el saber el codename de estas dos líneas solo funciona la que pone "hoja" la otra no da error pero no funciona puesto que deja la celda vacía.

Si te preguntas por que necesito el codename es por que el el tipo de fórmula siguiente

Hoja6.Cells(4, Col).Value = CDbl(Usf_proveedor.textbox1) 

Lo tengo que poner por que da error si lo pongo como arriba (Sheets(nombre)

Gracias

Si lo pongo así me da da error "calificador no válido

I.Cells(4, Col).Value = Usf_PROVEEDOR.TextBox1

también he probado lo siguiente:

Dim Hoja As Worksheet 

Dim Hoja as Sheets o la una o la otra

nombre2 = Usf_PROVEEDOR.TextBox2.Value
For x = 1 To Sheets.Count
If Sheets(x).Name = nombre2 Then I = Sheets(x).CodeName
With Hoja = I    En esta linea
End With
Hoja.Cells(4, Col).Value = Usf_PROVEEDOR.TextBox1

y me da el error 91 como el with lo tiene tiene que ser la variable o el objeto pero no se como solucionarlo

Gracias por tu tiempo
 

Lo que seguro está mal es el With, ya que no se usa de esa manera.

Consulta, la hoja 'nombre2' existe seguro en el archivo, porque en la segunda parte veo que no verificar que ocurre en caso que no encuentre ninguna hoja que coincida con nombre2.

Por otro lado, también veo que tenés un ciclo For, pero no veo donde tenés el Next a esa instrucción

perdón esta al final 

Unload Usf_PROVEEDOR

Next

End If
End Sub

El textbox2 lo lleno con los datos del combobox1

Private Sub ComboBox1_Change()
TextBox2 = ComboBox1
End Sub

y este funciona

saludos

Por lo que decís, nombre y nombre2 tienen el mismo valor (ya que indirectamente ambos reciben la información de ComboBox1.

La verdad me confunde un poco tu codificación, fijate si te sirve lo que pongo donde habría que completar justamente la parte que no está funcionando, pero en ese momento ya tenés la hoja (de hecho es la que queda seleccionada)

Sub xx()
Dim I As String, nombre As String, nombre2 As String, hoja As String
Dim Col&
Col = Cells(4, Columns.Count).End(xlToLeft).Column + 1
'----------------------------------------------------------------
nombre = Usf_PROVEEDOR.ComboBox1.Value
On Error GoTo HojaNoExiste
  Sheets(nombre).Select
'Si llegó a esta línea es porque 'encontró' la hoja (y la seleccionó)
'Que debería hacer acá el procedimiento?
'...
'...
Exit Sub
HojaNoExiste:
'Esta es la parte que te funcionaba...
  Sheets("0").Select 'Hoja madre
  Sheets("0").Copy after:=Sheets(1)
  Selection.Copy    'Para que esto?
  Sheets("0 (2)").Select
  Sheets("0 (2)").Name = nombre
  Sheets(nombre).Cells(4, Col).Value = Usf_PROVEEDOR.TextBox1
End Sub

lastima que no puedo colgarte la aplicación para que veas lo que sucede, la primera parte  (hasta el Else) comprueba que el nombre de la hoja que esta en el combobox1 (y textbox2) no existe, por que si al elegir hoja no esta el proveedor por que es nuevo , se escribe el nombre en el combobox1  y se genera una hoja nueva copiando la hoja base (hoja0) el problema lo tengo después del Else por que la hoja ya existe y lo que tengo que hacer es poner los datos del formulario en la hoja que tiene el nombre del textbox2 pero no puedo poner el nombre de la pestaña sino que he de poner el codename en la formula por eso he probado lo de  "hoja= i " y me da esos errores , no se como poner" Dim hoja as (aqui he probado Sheets y Workshet y Workbook) " y me da error 91, no se que hacer

Gracias por tu interes

Se me esta ocurriendo que podría hacerlo con la hoja activa, lo he probado con las siguientes fórmulas

Primera manera "error se requiere un objeto"

If Sheets(x).Name = nombre2 Then            (aqui el error)Sheets(x).CodeName.Activate

segunda manera " Error Subindice fuera del intervalo"
' Sheets(I).Active

Para ponerlo así, pero ninguna de las dos me ha funcionado
ActiveSheet.Cells(4, Col).Value = Usf_PROVEEDOR.TextBox1

Pero si es así, entonces creo que el código que yo te pasé debería funcionar, porque ya se está posicionando en la hoja con el nombre de ese proveedor...

Probá con

Sub xx()
Dim I As String, nombre As String, nombre2 As String, hoja As String
Dim Col&
Col = Cells(4, Columns.Count).End(xlToLeft).Column + 1
'----------------------------------------------------------------
nombre = Usf_PROVEEDOR.ComboBox1.Value
On Error GoTo HojaNoExiste
  Sheets(nombre).Select
'Si llegó a esta línea es porque 'encontró' la hoja (y la seleccionó)
  ActiveSheet.Cells(4, Col).Value = Usf_PROVEEDOR.TextBox1
'no sé si falta algo más...
  Exit Sub
HojaNoExiste:
'Esta es la parte que te funcionaba...
  Sheets("0").Select 'Hoja madre
  Sheets("0").Copy after:=Sheets(1)
  Selection.Copy    'Para que esto?
  Sheets("0 (2)").Select
  Sheets("0 (2)").Name = nombre
  Sheets(nombre).Cells(4, Col).Value = Usf_PROVEEDOR.TextBox1
End Sub

No se que he hecho mal antes porque ahora funciona

Mil Gracias

Me alegro, en el código anterior, no había asignado el proveedor a la celda. Faltaba la línea

  ActiveSheet.Cells(4, Col).Value = Usf_PROVEEDOR.TextBox1

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas