2010-11-04 21 views
0

J'ai la macro suivante définie qui insère des lignes dans une feuille. Une fois les lignes insérées à des adresses de début spécifiées, les différentes plages sont ensuite converties en tables. Mes premières pensées sont que le problème réside dans l'utilisation de xlDown - puisque c'est l'endroit dans le code où les lignes sont insérées.Ligne supplémentaire insérée à l'aide de xlDown dans Excel

Actuellement, j'ai 7 telles plages, mais le problème est que les trois premiers ont toujours une ligne supplémentaire insérée - cela fonctionnait auparavant sans problèmes, donc le fait que son mauvais comportement est un casse-tête pour moi.

Les plages restantes sont correctes. Le tableStartAdress se réfère à des plages nommées dont les valeurs correspondent à la première cellule sous le titre vert, à savoir A4, A12, etc. rowsToInsert pour cet exemple est toujours 38.

Sub InsertTableRows(tableStartAdress As String, rowsToInsert As Integer) 
    Dim i As Integer 
    Dim rowToCopy As String 

    Application.ScreenUpdating = False 
    Application.DisplayAlerts = False 

    Application.DisplayAlerts = False 
    Range(tableStartAdress).Offset(1, 0).Rows.Copy 

    rowToCopy = Range(tableStartAdress).Offset(1, 0).row & ":" & _   
        Range(tableStartAdress).Offset(1, 0).row 

    Rows(rowToCopy).Select 
    Selection.Copy 

    Range(tableStartAdress).Offset(1, 0).Select 
    ActiveCell.Resize(rowsToInsert, 1).Select 

    Selection.Insert Shift:=xlDown 
    Application.CutCopyMode = False 

    Application.ScreenUpdating = True 
    Application.DisplayAlerts = True 

End Sub 

Les images suivantes illustrent ce que je veux dire.

Avant:

How the wkSheet looks before date population.

Une fois les données est renseigné les trois première gamme/tables ont une ligne supplémentaire

Extra Rows, Extra Row,

Alors que le reste sont corrects

Correct blank stuff

+0

@Ahmad: Lorsque vous sélectionnez la ligne à copier, a-t-elle une ligne vide après? –

+0

@ardman - la ligne qui est copiée est en fait la ligne vide que vous voyez dans l'image avant. Donc, pour répondre à la question non, puisque la ligne suivante est en fait un espace réservé pour les sous-totaux qui seront générés une fois rempli de données – Ahmad

+0

@Ahmad: Le problème peut se situer dans votre code de sous-totalisation plutôt que dans le code que vous avez collé. –

Répondre

1

Je suggère simplifier votre code pour commencer. (Cela peut vous aider à traquer étaient les choses vont mal.) Puisque vous ne avez pas besoin de sélectionner une plage avant de faire quelque chose avec elle ....

rowToCopy = Range(tableStartAdress).Offset(1, 0).Row & _ 
    ":" & Range(tableStartAdress).Offset(1, 0).Row 
Rows(rowToCopy).Select 
Selection.Copy 

Range(tableStartAdress).Offset(1, 0).Select 
ActiveCell.Resize(rowsToInsert, 1).Select 
Selection.Insert Shift:=xlDown 

est le même que ...

Range(tableStartAdress).Offset(1, 0).EntireRow.Copy 
Range(tableStartAdress).Offset(1, 0).Resize(rowsToInsert, 1).Insert Shift:=xlDown 

qui est beaucoup plus facile à regarder. Un couple de pensées: D'abord, êtes-vous sûr que tableStartAddress est vraiment toujours une seule cellule (et la bonne cellule)? Êtes-vous sûr que rowsToInsert est toujours 38? Au-delà de cela, votre code tel qu'il est actuellement écrit copie une ligne entière et l'insère dans une gamme qui est théoriquement de 38 lignes par 1 colonne. Je vous recommande de réécrire cela afin que vous insériez d'abord autant de lignes que vous voulez, puis remplissez la plage de 38 x 1 avec les données qui s'y trouvent.

+0

+1 pour le code du nettoyeur .. – Ahmad