2017-07-14 7 views
1

以下は作成しているマクロで、コード実行時に問題が発生しました。私はそれを実行するとき何らかの理由で、コードの最後に "次のl"を識別するように、 "For For Next For For"というコンパイルエラーが発生しますが、 "For l = 7 To LastRow"一行目。なぜこのコンパイルエラーが発生しているのか誰にも分かりませんか?Excel VBA:ループでForを識別しないマクロ

For l = 7 To LastRow 
    For i = 3 To LastColumn 
     If sht.Cells(l, i).Value = "" Then 
      V = sht.Cells(6, i).Value 
      sTemp = sTemp & "," & V 
     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("Client Database") 
     firstName = .Range("B" & l) 
     lastName = .Range("A" & l) 
     If firstName = Chr(13) & Chr(7) Then 
      titleName = lastName 
     Else 
      titleName = lastName & ", " & firstName 
     End If 
    End With 

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

     wdDoc.Bookmarks.Add "TitlePageName", tRng 

    If Date <= 31/3/2017 Then 
     quartDate = "March 31" & ", " & Year(Date) 
    ElseIf 31/3/2017 <= Date <= 30/6/2017 Then 
     quartDate = "June 30" & ", " & Year(Date) 
    ElseIf 30/6/2017 <= Date <= 30/9/2017 Then 
     quartDate = "September 30" & ", " & Year(Date) 
    Else 
     quartDate = "December 31" & ", " & Year(Date) 

    d = "Information as of" & " " & quartDate 
    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 

    Set mRng = wdApp.ActiveDocument.Bookmarks("MonitoringChecklist").Range 
    mRng.Collapse wdCollapseStart 
    mRng.InsertBreak wdPageBreak 

    myArray = Array("CreditMon", "UncorrelatedMon", "FixedMon") 
    myArray2 = Array("CreditMon2", "UncorrelatedMon2", "FixedMon2") 
    LastTable = wdDoc.Tables.Count 

    t = 3 
    Do Until t = LastTable + 1 
    Set wdTable = wdDoc.Tables(t) 
     For i = LBound(ReturnsToDelete) To UBound(ReturnsToDelete) 
      For j = wdTable.Columns.Count To 2 Step -1 
       If Left(wdTable.cell(1, j).Range.Text, Len(wdTable.cell(1, j).Range.Text) - 2) = ReturnsToDelete(i) Then wdTable.Columns(j).Delete 
      Next j 
     Next i 

     If wdTable.Columns.Count = 1 Then 
      wdTable.Delete 
      t = t 
      LastTable = wdDoc.Tables.Count 
     Else 
      wdTable.Rows.Alignment = wdAlignRowLeft 
      t = t + 1 
     End If 
    Loop 

    For i = 0 To 2 
     If wdDoc.Bookmarks.Exists(myArray2(i)) = False Then 
      wdDoc.Bookmarks(myArray(i)).Range.Delete 
     Else 
      wdDoc.Bookmarks(myArray(i)).Range.Collapse wdCollapseStart 
      wdDoc.Bookmarks(myArray(i)).Range.InsertBreak wdPageBreak 

    wdDoc.TablesOfContents(1).Update 
    wdDoc.Repaginate 

    shName = "PQ Quarterly Reporting for " & firstName & " " & lastName 
    With wdApp.ActiveDocument 
     .SaveAs2 "https://path/" & shName & ".docx" 
     .Close 
    End With 

    wdApp.Visible = False 

    sTemp = "" 
    stTemp = "" 

Next l 
+4

。 – finjo

+1

'quartdate' If節にEnd Ifがありません。他の場所でスミラの問題があるかもしれません。 – SJR

+2

ここにいくつかのエラーがあります。フィンジョとブライアンはどちらも正しいです。インデントの使用が良好で、これがこれらの問題を検出する最善の方法であるため、 "for I = 0 To 2"ループ –

答えて

2

あなたは以下のコードに次の文が欠落している:あなたは `quartDate`を定義した後、`エンドIf`を逃している

For i = 0 To 2 
    If wdDoc.Bookmarks.Exists(myArray2(i)) = False Then 
     wdDoc.Bookmarks(myArray(i)).Range.Delete 
    Else 
     wdDoc.Bookmarks(myArray(i)).Range.Collapse wdCollapseStart 
     wdDoc.Bookmarks(myArray(i)).Range.InsertBreak wdPageBreak