Me estoy preguntando cómo insertar 3 filas adicionales por encima de una fila especificada que se ha «tipo de orden» (como se especifica a continuación).

Esta fila se produce varias veces en la hoja. El siguiente código funciona, excepto de insertar las filas por debajo de la fila especificada. Gracias

Sub try()
    Dim c As Range

    For Each c In Range("A1:A100")
        If c.Value Like "*Order Type*" Then
            c.Offset(3, 0).EntireRow.Insert
        End If
    Next c
End Sub
InformationsquelleAutor user2616026 | 2013-07-24

2 Comentarios

  1. 4

    Si su problema es agregar 3 filas adicionales sobre buscado criterios, la solución de su problema debe ser fácil:

    En que la línea de código:

    c.Offset(3, 0).EntireRow.Insert

    Su línea dice que cuando el tipo de la orden se encuentra él debe ir 3 filas más abajo y insertar fila extra.

    Debería ir así:

    c.EntireRow.Resize(3).Insert

    Mi línea, dice, cuando el tipo de orden que se encuentra, agregar 3 filas adicionales por encima de ella.

    Espero que esto es lo que usted busca.

    Editado:

    He buscado en Internet y encontré algo similar a tu problema y se ha cambiado de acuerdo a sus necesidades. Espero que esto funcionará para usted.
    Pequeña explicación de cómo funciona: busca todo el camino a través de Una columna y si «Tipo de Orden» que se encuentra añade 3 filas por encima de ella. Cuando la macro va a la celda en blanco que se detenga. Pruébalo y dime si funciona bien para usted.

    Sub AddRows()
    
    Dim lastValue As String, i As Long, r As Long
    Do
        r = r + 1
        If r > 1 And Cells(r, 1).Value Like "*Order Type*" Then
            If Cells(r, 1).Value = "" Then Exit Do
            For i = 1 To 3
                Rows(r).Insert Shift:=xlUp
            Next
            r = r + 3
    
            Else
                If IsEmpty(Cells(r, 1)) = True Then
                Exit Do
    
                Else
    
                End If
    
        End If
        lastValue = Cells(r, 1).Value
    Loop
    
    End Sub
    • muchas gracias por lo que funciona, pero ¿cómo puedo código de bucle de modo que no se mantenga volver a buscar toda la hoja. Gracias de nuevo!
    • Me alegro de que lo haya encontrado útil – marca como contestó, de modo que ppl puede utilizar esto más adelante 😉 Si hablando de código de bucle que fue proporcionada por Ripster, bucle método tiene límites, se puede leer algo sobre esto aquí: excel-pratique.com/en/vba/loops.php
    • Lo siento de nuevo, he estado tratando de que todos estos diferentes bucles y sigue la búsqueda de la hoja entera y estoy seriamente confundido. Lo siento por todas las pequeñas preguntas que se acaba de darme enorme cantidad de problemas. Gracias!
    • oh… veo el problema, unofortunately no hay tiempo ahora para solucionar este problema. Voy a tratar de pensar en ello.
    • Ok muchas gracias
    • Intente código actualizado. Es muy diferente, pero debería funcionar para usted. Déjame saber si es bueno.

  2. 1

    Esto debe ir hasta tres filas en lugar de tres:

    c.Offset(-3, 0).EntireRow.Insert

    Tenga cuidado con esto porque si no hay tres filas de arriba de la fila actual se producirá un error. La forma más segura de hacer esto es mediante la inserción de la fila actual + 2 más y cambiar todo.

    Rows(c.Row & ":" & c.Row + 2).EntireRow.Insert Shift:=xlDown

    Edición: la razón por La que se ejecuta hasta que excel se congela es debido a la forma en que el bucle se construye. La primera vez que se encuentra una coincidencia se inserta filas y, a continuación, continúa encuentra en el mismo partido de nuevo haciendo que se queda atascado en un bucle infinito.

    Que usted puede probar esto y ver si hace lo que quiere, que trabajó para mí.

    Sub try()
        Dim i As Long
        Dim c As Range
    
        Do While i < ActiveSheet.UsedRange.Rows.Count
            i = i + 1
            Set c = Cells(i, 1)
    
            If c.Value Like "*Order Type*" Then
                Rows(c.Row & ":" & c.Row + 2).EntireRow.Insert Shift:=xlDown
                i = i + 3
            End If
            Debug.Print i
        Loop
    End Sub
    • Gracias, pero cuando entro en la primera de ellas en el código que me da este mensaje
    • que dice que hay un error de objeto, también el segundo, sólo se ejecuta la macro y, a continuación, mi excel dice que no responde, no estoy seguro de que el problema existe, hágamelo saber si usted tiene sugerencias, gracias!
    • Todavía me dio el mismo error, ¿hay algo más que pueda probar? Gracias

Dejar respuesta

Please enter your comment!
Please enter your name here