Modificar datos desde un formulario

8 envíos / 0 nuevos
Último envío
vicktor001
Imagen de vicktor001
Offline
última acción: Hace 6 años 3 meses
alta: 16/10/2017 - 20:01
Puntos: 80
Modificar datos desde un formulario

Hola, tengo un formulario de captura de datos con 4 textbox, y un listbox1 donde almaceno los registros existentes. Al dar clic en listbox1 puedo editar los registros y desde ahi podira modificar uno o varios datos. Tengo un boton modificar con el siguiente codigo:

    Range("A" & Cells.Rows.Count).End(xlUp).Offset(1).Select
    For Each Row In Hoja1.Rows
        If (Intersect(Row, (Hoja1(NOMBRE))).Value = ComboBox2.Text) Then
            Intersect(Row, (Hoja1(NOMBRE))).Value = TextBox2.Text
        End If
    Next

En la linea en negritas me da el siguiente error:  El objeto no admite esta propiedad o metodo.

Agradecere si alguien puede ayudarme a solucionar mi problema o a utilizar un codigo diferente que me permita hace la modificacion.

Saludos y muchas gracias de antemano.

Victor

Etiquetas: 

Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 2 días
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
Entiendo que NOMBRE es el

Entiendo que NOMBRE es el nombre de un rango que has cambiado utilizando el Administrador de nombres.

Si es así, prueba a sustituir Hoja1(NOMBRE) por Range("NOMBRE")

Un saludo

vicktor001
Imagen de vicktor001
Offline
última acción: Hace 6 años 3 meses
alta: 16/10/2017 - 20:01
Puntos: 80
Modificar datos desde un formulario

Hola, gracias por contestar y su ayuda. Ahora me sale otro mensaje "Error en el metodo Range de _Objeto global

 

Saludos

AdjuntoTamaño
Image icon error.jpg61.94 KB
Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 2 días
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
¿En qué línea te aparece el

¿En qué línea te aparece el error?

¿Has definido row de alguna manera?

¿Has definido Hoja1 de alguna manera?

Yo escribo bucle for each similar (añadiendo la línea "Dim row" al principio para definir row como variant) y no me da ningún problema, a menos que el error esté en otra línea.

Un saludo

vicktor001
Imagen de vicktor001
Offline
última acción: Hace 6 años 3 meses
alta: 16/10/2017 - 20:01
Puntos: 80
Hola, el error me aparece en

Hola, el error me aparece en la linea:  For Each Row In Hoja1.Rows

subo mi archivo por si tiene oportunidad de abrirlo, tengo dos opciones de modificar (voluntarios y agendar) en las dos me da el mismo mensaje de error.

Gracias, saludos

AdjuntoTamaño
File control.xlsm46.58 KB
Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 2 días
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
Creo que hay un pequeño lío

Creo que hay un pequeño lío en tu macro.

Primero: no me funcionaba la función Mid debido a una referencia que tú tienes y yo no, por lo que se volvía loco Excel buscándola. Una vez la desmarqué ya no hubo más problemas con eso. Imagino que a ti esto no te dará ningún problema.

Segundo: Excel no sabe qué es Hoja1. He sustituido Hoja1 por Sheets("AGENDAR") y esa parte ya funciona. También habría valido algo así como Set hoja1 = sheets("AGENDAR") algunas líneas antes. Lo mismo para la otra función en la otra hoja. Aunque me temo (por la orden anterior, que lo que quieres es hacer algo como hoja1 = selection.

Tercero: Excel no sabe qué es NOMBRE. No es un nombre definido. Si lo que quieres es hacer referencia a la columna de la tabla que se titula nombre, podrías hacer lo siguiente:

hoja1 = selection

For Each Row In hoja1.Rows

  If (Intersect(Row, (ActiveSheet.ListObjects("Tabla5").ListColumns("NOMBRE").DataBodyRange)).Value = ComboBox2.Text) Then

    Intersect(Row, (ActiveSheet.ListObjects("Tabla5").ListColumns("NOMBRE").DataBodyRange)).Value = TextBox2.Text

  End If

Next

Pero queda mucho más sencillo y más limpio aprovechando que es una tabla (listobject) así:

Private Sub cmdmodificar_Click()

Dim Celda As Range

Sheets("VOLUNTARIOS").Activate

    For Each Celda In ActiveSheet.ListObjects(1).ListColumns("NOMBRE").DataBodyRange

        If Celda.Value = ComboBox2.Text Then

            Celda.Value = TextBox2.Text

        End If

    Next

End Sub

 
La modificación de la hoja AGENDAR es un poco más compleja, pero se arregla con cosas como offset:
If celda.value = ComboBox2.Text then
  Celda.offset(0,1).value = textbox8.text
  Celda.offset(0,2).value = textbox9.text
 
 
etc....
 

Un saludo

vicktor001
Imagen de vicktor001
Offline
última acción: Hace 6 años 3 meses
alta: 16/10/2017 - 20:01
Puntos: 80
Hola, le agradezco muchisimo

Hola, le agradezco muchisimo su ayuda. El primer caso de modificar ya funciona bien. El segundo caso de la hoja AGENDAR aun me presenta inconsistencias, quiza no entendi bien y no deje correctamente el codigo ya que en algunas situaciones si lo hace correctamente pero en otras no, envio algunas pantallas de lo que he detectado asi como el archivo con el nuevo codigo que tan amablemente me compartio. Agradezco de antemano su ayuda asi como tambien le pido mil disculpas por abusar de su tiempo. Saludos cordiales.

Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 2 días
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
Claro, es que lo que estás

Claro, es que lo que estás haciendo es modificar todos los registros en los que el nombre en la columna VOLUNTARIO coincide. Debes añadir más criterios a la sentencia IF para que también cumpla mes y semana. Algo así como:

For Each celda In ActiveSheet.ListObjects(1).ListColumns("VOLUNTARIO").DataBodyRange

    If (celda.Value = ComboBox1.Text) and (celda.offset(0,-1).value = semana) and (celda.offset(0,-2).value = mes) Then

 
 
Un saludo