Compartir a través de

Error 1004 en macro de excel

Anónimas
2016-01-05T17:00:06+00:00

Estoy intentando hacer funcionar esta instrucción pero siempre se detiene , con error 1004

  Dim D As Integer

  Dim M As Integer

   D = Worksheets("Acta").Range("C89").Value   ' Dorsales

  M = Worksheets("Acta").Range("C88").Value  ' Mangas

For A = 0 To M - 1

        ' Tiempos

        intRow = 3 + (D + 4) * A

        intCol = 7 + A * 3

        Worksheets("rounds").Range("D" & intRow & ":D" & intRow + D).Copy _

        Destination:=Worksheets("Acta").Range(Cells(intCol, 15), Cells(intCol, 15 + D))

          ' Puntos

    Next A

Al parecer el problema reside en la definición de Range ( Cells ) , si cambio esto por un rango concreto funciona , alguien podría ayudarme.

Gracias de antemano

Microsoft 365 y Office | Excel | Para la casa | Windows

Pregunta bloqueada. Esta pregunta se migró desde la Comunidad de Soporte técnico de Microsoft. Puede votar si es útil, pero no puede agregar comentarios o respuestas ni seguir la pregunta.

0 comentarios No hay comentarios

4 respuestas

Ordenar por: Muy útil
  1. Anónimas
    2016-01-10T11:44:04+00:00

    Gracias por tu interés,  mira el valor es 59 . Viendo el la hoja "Rounds" existen datos y tiene sentido.

    En la ayuda , buscando he leído esto:

    Cuando se aplica a un objeto Range, la propiedad está relacionada con ese objeto. Por ejemplo, si la celda C3 está seleccionada, Selection.Range("B1") devuelve la celda D3 porque es el valor relativo al objeto Range devuelto por la propiedad Selection. Por otro lado, el código ActiveSheet.Range("B1") siempre devuelve la celda B1.

    Antes de este movimiento de datos hago una ordenación de los mismos y creo que el problema puede que sea que exista algo seleccionado y en realidad tome otros puntos , relativos a esta selección.

    El codigo de esta ordenación es:

    ' ordenar las mangas por dorsal

       For A = 1 To M + 1

       b = 3 + (A - 1) * (D + 4)

        ActiveWorkbook.Worksheets("Rounds").Sort.SortFields.Clear

        ActiveWorkbook.Worksheets("Rounds").Sort.SortFields.Add Key:=Range(Cells(b, 2), Cells(b + D, 2)), _

            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

        With ActiveWorkbook.Worksheets("Rounds").Sort

            .SetRange Range(Cells(b, 1), Cells(b + D, 8))

            .Header = xlGuess

            .MatchCase = False

            .Orientation = xlTopToBottom

            .SortMethod = xlPinYin

            .Apply

        End With

        Next A

    Según interpreto yo esto es que se queda seleccionado un rango  y el resultado final de nuestro código es en realidad otro?

    No se como resolverlo en realidad pero tiene sentido .¿ Que te parece?

    Miguel.

    ¿Le ha resultado útil esta respuesta?

    0 comentarios No hay comentarios
  2. Anónimas
    2016-01-10T01:39:21+00:00

    Hola Miguel Angel.

    Si se detiene con A=0; quiere decir que  intRow vale 3 y que intCol vale 7.

    ¿Que valor tiene la variable D cuando se detiene  el código?

    ¿Le ha resultado útil esta respuesta?

    0 comentarios No hay comentarios
  3. Anónimas
    2016-01-07T17:43:03+00:00

    Muchas gracias por tu respuesta tan rápida, efectivamente faltaba la parte de definición de las variables.

    Bien, pero a mi me sigue fallando y se me para con el valor de A = 0 , no consigo pasar de la primera parte del bucle "For" . ( el depurador se para en Destination:......y con el valor de A=0)

     Yo pienso si no será algún otro paso en la creación del archivo , yo he creado un botón y le asigno la macro que he colocado en la misma hoja y no tiene nada más .

    No se si puedo incluir aquí el archivo completo .

    Ya lo he comentado con programadores no expertos en macros de excel ( yo tampoco soy , solo un aficionado) y tampoco me han sabido contestar . Por que básicamente es como muy sencillo y totalmente basado en lo que dicen las ayudas.

    Bueno no se que más esplicarte. ¿ que puede hacer más?

    Miguel.

    ¿Le ha resultado útil esta respuesta?

    0 comentarios No hay comentarios
  4. Anónimas
    2016-01-06T20:51:01+00:00

    El error 1004 es un error muy genérico, y es conveniente depurar el código "paso a paso" (F8), a medida que compruebas los valores que van tomando tus variables para que puedas descubrir/estudiar la causa que provoca el error.

    Siempre y cuando en las hojas Acta y rounds existan los correspondientes (y necesarios) valores numéricos , me funciona bien tu codigo, segun se ve a continuación:

    Sub Prueba()

      Dim A As Integer, intRow As Integer, intCol As Integer

      Dim D As Integer, M As Integer

      D = Worksheets("Acta").Range("C89").Value  ' Dorsales

      M = Worksheets("Acta").Range("C88").Value  ' Mangas

      For A = 0 To M - 1

    ' Tiempos

        intRow = 3 + (D + 4) * A

        intCol = 7 + A * 3

        Worksheets("rounds").Range("D" & intRow & ":D" & intRow + D).Copy _

        Destination:=Worksheets("Acta").Range(Cells(intCol, 15), Cells(intCol, 15 + D))

    ' Puntos

    ' . . .

      Next A

    End Sub

    Nota: Yo he declarado previamente las variables del primer Dim que en el código que muestras no aparecen declaradas.

    ¿Le ha resultado útil esta respuesta?

    0 comentarios No hay comentarios