Foros del Web » Soporte técnico » Ofimática »

Problema Excel

Estas en el tema de Problema Excel en el foro de Ofimática en Foros del Web. Hola, tengo una dudilla, ¿por qué este código me genera un error 400? For row2 = 4 To numRegistros If Cells(row2, 2).Value = "1" Then ...
  #1 (permalink)  
Antiguo 16/03/2009, 10:24
 
Fecha de Ingreso: marzo-2009
Mensajes: 7
Antigüedad: 15 años, 1 mes
Puntos: 0
Problema Excel

Hola, tengo una dudilla, ¿por qué este código me genera un error 400?


For row2 = 4 To numRegistros
If Cells(row2, 2).Value = "1" Then

Range(Cells(row2, 3), Cells(row2, 6)).Select
Selection.Copy
Sheets("Sheet2").Select
ActiveSheet.Range(Cells(row2, 3), Cells(row2, 6)).Select
ActiveSheet.Paste
Sheets("Sheet1").Select

End If

Next row2


Si las celdas destino las pongo estáticas (la fila en negrita la sustituyo por ActiveSheet.Range("A1:D1").Select, sí que me funciona, pero claro, me machaca la copia en cada iteración del bucle :(


Alguno veis el error? muchas gracias a todos
  #2 (permalink)  
Antiguo 16/03/2009, 12:09
 
Fecha de Ingreso: marzo-2009
Mensajes: 7
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Problema Excel

alguna idea por sencilla que sea?

mil gracias otra vez
  #3 (permalink)  
Antiguo 17/03/2009, 01:57
 
Fecha de Ingreso: marzo-2009
Mensajes: 7
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Problema Excel

si sirve de algo el error que me sale es el 400
  #4 (permalink)  
Antiguo 17/03/2009, 03:17
Avatar de 3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 20 años, 4 meses
Puntos: 144
Respuesta: Problema Excel

A mí esto me funciona perfectamente:
Código:
Sub prueba()
numRegistros = 10
For row2 = 4 To numRegistros
If Cells(row2, 2).Value = "1" Then
    Range(Cells(row2, 3), Cells(row2, 6)).Select
    Selection.Copy
    Sheets("Hoja2").Select
    ActiveSheet.Range(Cells(row2, 3), Cells(row2, 6)).Select
    ActiveSheet.Paste
    Sheets("Hoja1").Select
End If
Next
End Sub
Es raro eso que te ocurre. Comprueba que la variable "numRegistros" esté informada, y que no tengas otra parte del código que entre en conflicto con algo.

Si eliges la otra opción que no te da error, prueba cambiando el código así:
Código:
Sub prueba2()
numRegistros = 10
For row2 = 4 To numRegistros
If Cells(row2, 2).Value = "1" Then
    fila = Cells(row2, 2).Row
    columna = Cells(row2, 2).Column
    Range(Cells(row2, 3), Cells(row2, 6)).Select
    Selection.Copy
    Sheets("Hoja2").Select
    ActiveSheet.Range(Cells(fila, columna + 1), Cells(fila, 6)).Select
    ActiveSheet.Paste
    Sheets("Hoja1").Select
End If
Next
End Sub
Ojo, yo he asignado numRegistros = 10, para hacer pruebas.
  #5 (permalink)  
Antiguo 17/03/2009, 03:29
Avatar de ceSharp  
Fecha de Ingreso: octubre-2008
Ubicación: Madrid
Mensajes: 495
Antigüedad: 15 años, 5 meses
Puntos: 66
Respuesta: Problema Excel

Hola adelsaz,

he intentado interpretar tu código pero me estoy volviendo loco! :)
mas o menos, ¿que es lo que quieres hacer?
mas que nada para hacerme una idea de la interpretación de tu código y si hubiera otra alternativa mas sencilla...

salu2
  #6 (permalink)  
Antiguo 20/03/2009, 01:37
 
Fecha de Ingreso: marzo-2009
Mensajes: 7
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Problema Excel

hola de nuevo, gracias a los dos, al final conseguí solucionarlo, el problema creo que venía por utilizar la misma variable (row2) para seleccionar el rango de origen y a la vez de destino (aunque en cualquier otro lenguaje de programación se podría haber hecho así), con lo que declarando una variable "filaDestino" de ámbito global funcionó, os pego el código por si a alguien le pasa lo mismo:

Public filaDestino

Sub Funcion()

....

'importante dar un valor a esta variable antes de entrar en el bucle
filaDestino = 4


For row2 = rowInicial To ambito
If Cells(row2, 34).Value = "1" Then

'Copia de datos
Range(Cells(row2, 31), Cells(row2, 43)).Select
Selection.Copy
Sheets("Colaboraciones").Select
ActiveSheet.Range("B" & filaDestino).Select
ActiveSheet.Paste
filaDestino = filaDestino + 1

'Borrado de datos
Sheets("Proyectos").Select
ActiveSheet.Range(Cells(row2, 31), Cells(row2, 43)).Select
Selection.Delete

'Si borramos la fila, hay que decrementarla para que no se salte una
row2 = row2 - 1

ultFilaDatos = ultFilaDatos + 1

End If

Next row2





End Sub









saludos a todos y gracias one more time ;)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:20.