2017-06-27 3 views
0

Je me demandais si quelqu'un pouvait m'aider à déboguer mon code. Je n'arrive pas à comprendre pourquoi lorsque la boucle se déplace vers la deuxième ligne, elle change les éléments du tableau. Par exemple: si le tableau "BookMarksToDelete" contient "Dog, Cat, Bird", la deuxième boucle semble vouloir en faire "og, Cat, Bird" dans la rangée suivante.Sortie de code en boucle avec Excel VBA

Y a-t-il une meilleure approche de la boucle?

For Each rw In myRange.Rows 
    For Each cel In rw.Cells 
     For i = LBound(myArray) To UBound(myArray) 
      Set oCell = myRange.Find(What:=myArray(i), LookIn:=xlValues, _ 
         LookAt:=xlWhole, SearchOrder:=xlByRows, 
         SearchDirection:=xlNext, _ 
         MatchCase:=False, SearchFormat:=False) 

      If oCell Is Nothing Then 
       sTemp = sTemp & "," & myArray(i) 
      Else 
       Set oCell = Nothing 
      End If 
     Next i 

     sTemp = Mid(sTemp, 2) 

     If Not Len(Trim(sTemp)) = 0 Then 
      BookMarksToDelete = Split(sTemp, ",") 

      Set wdApp = CreateObject("Word.Application") 
      wdApp.Visible = True 
      Set wdDoc = wdApp.Documents.Open(FlName) 

      For i = LBound(BookMarksToDelete) To UBound(BookMarksToDelete) 
       Set pRng = wdDoc.Bookmarks(BookMarksToDelete(i)).Range 
       pRng.MoveEnd wdParagraph, 2 
       pRng.Delete 
      Next i 
     End If 

     Set wdTable = wdDoc.Tables(1) 
     For i = LBound(BookMarksToDelete) To UBound(BookMarksToDelete) 
      For Each cell In myRangeRef 
       If InStr(1, cell.Value, BookMarksToDelete(i), vbTextCompare) Then 
        aCell = cell.Offset(, -1).Value 
        stTemp = stTemp & "," & aCell 
       End If 
      Next cell 
     Next i 

     stTemp = Mid(stTemp, 2) 
     If Not Len(Trim(stTemp)) = 0 Then 
      ReturnsToDelete = Split(stTemp, ",") 
      For i = LBound(ReturnsToDelete) To UBound(ReturnsToDelete) 
       For j = wdTable.Rows.Count To 2 Step -1 
        If Left(wdTable.cell(j, 1).Range.Text, Len(wdTable.cell(j, 1).Range.Text) - 2) = ReturnsToDelete(i) Then wdTable.Rows(j).Delete 
       Next j 
      Next i 
     End If 

     With ThisWorkbook.Sheets("Investors Database") 
      firstName = .Range("B" & rw) 
      lastName = .Range("A" & rw) 
      titleName = lastName & ", " & firstName 
     End With 

     Set tRng = wdDoc.Bookmarks("TitlePageName").Range 
      tRng.Text = wdDoc.Bookmarks("TitlePageName").Range.Text & titleName 
      wdDoc.Bookmarks.Add "TitlePageName", tRng 

     d = "Information Up-To-Date as of " & Date 
     Set dRng = wdDoc.Bookmarks("TitlePageDate").Range 
      dRng.Text = wdDoc.Bookmarks("TitlePageDate").Range.Text & d 
      wdDoc.Bookmarks.Add "TitlePageDate", dRng 

     Set wRng = wdApp.ActiveDocument.Bookmarks("FundCommentary").Range 
     wRng.Collapse wdCollapseStart 
     wRng.InsertBreak wdPageBreak 

     Set sRng = wdApp.ActiveDocument.Bookmarks("Disclaimer").Range 
     sRng.Collapse wdCollapseStart 
     sRng.InsertBreak wdPageBreak 

     wdDoc.TablesOfContents(1).Update 
     wdDoc.Repaginate 

     With wdApp.ActiveDocument 
      .SaveAs2 "https://websitefolder//document.docx" 
      .Close 
     End With 

     wdApp.Visible = False 

    Next 
Next 

Répondre

2

Par exemple: si le tableau « BookMarksToDelete » a Dog, Cat, Bird en elle, la deuxième boucle semblent vouloir faire og, Cat, Bird dans la ligne suivante.

Lorsque la boucle fonctionne pour la 1ère fois, la valeur de sTemp est "" si sTemp = sTemp & "," & myArray(i) ajoute un , au début, puis sTemp = Mid(sTemp, 2) versions au large de la , dès le début.

Lorsque le code des boucles pour la 2ème fois, la valeur de sTemp est pas "" mais votre code dans la ligne suivante sTemp = Mid(sTemp, 2) côtelettes de la 1ère lettre.

OPTION 1: Remise à zéro du sTemp

A la fin du code ajoutez la ligne sTemp = ""

OPTION 2: Si vous ne voulez pas réinitialiser le sTemp puis vérifier si le 1er caractère est un , ou non

Remplacer sTemp = Mid(sTemp, 2) avec If Left(sTemp, 1) = "," Then sTemp = Mid(sTemp, 2)

+0

Besoin de votre aide ici https://stackoverflow.com/questions/44787615/dictionary-doesnt-display-items-for-certain-key-numeric-value –

+0

Désolé. Je prenais mon dîner. On dirait que c'est résolu? –

+0

Oui c'est résolu maintenant, merci encore! –