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
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
Hola, gracias por contestar y su ayuda. Ahora me sale otro mensaje "Error en el metodo Range de _Objeto global
Saludos
¿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
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
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
Un saludo
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.
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