2017-06-27 7 views
0

Ich fragte mich, ob jemand mir helfen könnte, diesen Code zu debuggen. Ich kann nicht herausfinden, warum, wenn sich die Schleife in die zweite Zeile bewegt, sie die Elemente innerhalb des Arrays ändert.Loop Impacting Code Ausgabe mit Excel VBA

Zum Beispiel: Wenn das Array "BookMarksToDelete" "Dog, Cat, Bird" enthält, scheint die zweite Schleife es "og, Cat, Bird" in der nächsten Zeile zu machen.

Gibt es einen besseren Ansatz für die Schleife?

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 

Antwort

2

Zum Beispiel: wenn das Array „BookMarksToDelete“ Dog, Cat, Bird in ihm hat, scheint die zweite Schleife og, Cat, Bird es in der nächsten Reihe machen zu wollen.

Wenn die Schleife zum ersten Mal ausgeführt wird, wird der Wert von sTemp"" so sTemp = sTemp & "," & myArray(i) ein , am Anfang hinzufügt und dann sTemp = Mid(sTemp, 2) Borte aus dem , von Anfang an.

Wenn der Code zum 2. Mal Schleifen, ist der Wert von sTemp NICHT "" aber Ihr Code in der nächsten Zeile sTemp = Mid(sTemp, 2) Koteletts des ersten Brief.

OPTION 1: Zurücksetzen des sTemp

Am Ende des Codes fügen Sie die Zeile sTemp = ""

OPTION 2: Wenn Sie die sTemp nicht zurücksetzen wollen, um dann zu prüfen, ob das erste Zeichen ist ein , oder nicht

sTemp = Mid(sTemp, 2) Ersetzen mit If Left(sTemp, 1) = "," Then sTemp = Mid(sTemp, 2)

+0

Benötigen Sie Ihre Hilfe hier https://stackoverflow.com/questions/44787615/dictionary-doesnt-display-items-for-certain-key-numeric-value –

+0

Entschuldigung. War mein Abendessen. Scheint wie es gelöst ist? –

+0

Ja, es ist jetzt gelöst, danke noch einmal! –