2010-11-18 40 views
1

J'ai écrit une macro pour la suppression de MS Word 2010 pages comme suit-comportements de mise en boucle Incohérence Pour boucle vba

Sub deleteAlternatePages() 
    CurrentPage = Selection.Information(wdActiveEndPageNumber) 
    TotalPages = Selection.Information(wdNumberOfPagesInDocument) 

    maxLoop = TotalPages - 1 

    Dim loopCtr As Integer 
    loopCtr = (maxLoop/2) 

    For i = 1 To loopCtr 
     boolDelete = Selection.Information(wdActiveEndPageNumber) 
     Call deleteOnePage 
     CurPage = Selection.Information(wdActiveEndPageNumber) 
     Selection.GoTo What:=wdGoToPage, Which:=wdGoToNext, Count:=1 
    Next 

End Sub 

La boucle ne fonctionne pas correctement quand je lance la macro de mot. Mais, fonctionne correctement lorsque je débogue le code.

+0

Lorsque vous dites que la boucle ne fonctionne pas correctement, que se passe-t-il exactement? –

+0

La boucle ne se termine pas tant que la valeur maximale du compteur et certaines pages ne sont pas laissées telles quelles. – Mayur

Répondre

6

Ceci est juste une intuition, mais je parie que vous supprimez des pages que vous n'avez pas l'intention de? Au lieu de boucle UP, boucle arrière

For i =loopCtr to 1 step -1 

Dans votre boucle, si vous avez supprimé une page, le reste des pages se déplacer une page et les numéros des pages incorrectes que vous continuez à les vérifier avant. Si vous supprimez d'abord à la fin, les pages à l'avant ne seront pas gâchées avec

+2

+1 Vous devez toujours effectuer une boucle arrière ou utiliser des noms d'objet lors de la suppression d'une collection dans VBA, car la collection est en train de changer lorsque vous la supprimez. – Fionnuala