循环不做,从VBA的Excel中提取年份

所以我有这个excel电子表格,从另一个工作表中带来的列。 对于前四列,这只是一个直接的转换。 原始表中的第五个数据是来自于dd-mon-yy格式(例如13-Jul-14)的date,我需要将其转换为一年(例如2014年)。 我觉得这是我得到的错误的责任。

当我运行代码时,出现以下错误,并在代码中标出:没有执行循环,如果没有执行循环,如果没有执行循环,没有执行循环,没有执行下一个。

我对VBA并不是很有经验,特别是在Excel中,所以任何build议都将不胜感激。

Sub PinkProgram_List() Dim SiteNoTransfer As String Dim SiteNo As String Dim TransferCol(5) As Integer Dim Row As Integer Dim RowTransfer As Integer Dim StartColumn As Integer TransferCol(0) = 0 'Nothing (placeholder) TransferCol(1) = 10 'Structure No. TransferCol(2) = 1 'GWP TransferCol(3) = 3 'WP TransferCol(4) = 11 'Work Type TransferCol(5) = 15 'Completion Year StartColumn = 45 'Column just left of SiteNo on Master Result sheet Row = 7 'First row on Master Results sheet Do SiteNo = Worksheets("MASTER RESULTS").Cells(Row, StartColumn - 11) If SiteNo = "" Then Exit Do ElseIf Not SiteNo = "" Then RowTransfer = 4 Do SiteNoTransfer = Worksheets("Program").Cells(RowTransfer, TransferCol(1)) If SiteNoTransfer = "END" Then Exit Do ElseIf SiteNoTransfer = SiteNo Then Worksheets("MASTER RESULTS").Cells(Row, StartColumn + 1).Interior.Color = RGB(0, 255, 255) Worksheets("Program").Cells(RowTransfer, TransferCol(1)).Interior.Color = RGB(0, 100, 255) For i = 2 To 4 If Not TransferCol(i) = 0 Then Worksheets("MASTER RESULTS").Cells(Row, StartColumn + i) = Worksheets("Program").Cells(RowTransfer, TransferCol(i)) End If Next For i = 5 To 5 If Not TransferCol(5) = 0 Then Worksheets("MASTER RESULTS").Cells(Row, StartColumn + i) = Worksheets("Program").Cells(RowTransfer, Year(TransferCol(5))) 'Get the year in yyyy from dd-mon-yy Exit Do End If RowTransfer = RowTransfer + 1 Loop 'Loop without do End If 'End if without block if Row = Row + 1 Loop 'Loop without do End Sub 'For without next 

继续尝试给这个重新工作的版本。 我已经修复了所有的语法问题,并清除了缩进(所以你可以更容易地看到什么与什么),虽然我不知道它的工作正如你所期望的100%。

 Sub PinkProgram_List() Dim SiteNoTransfer As String Dim SiteNo As String Dim TransferCol(5) As Integer Dim Row As Integer Dim RowTransfer As Integer Dim StartColumn As Integer TransferCol(0) = 0 'Nothing (placeholder) TransferCol(1) = 10 'Structure No. TransferCol(2) = 1 'GWP TransferCol(3) = 3 'WP TransferCol(4) = 11 'Work Type TransferCol(5) = 15 'Completion Year StartColumn = 45 'Column just left of SiteNo on Master Result sheet Row = 7 'First row on Master Results sheet Do While True SiteNo = Worksheets("MASTER RESULTS").Cells(Row, StartColumn - 11) If SiteNo = "" Then Exit Do ElseIf Not SiteNo = "" Then RowTransfer = 4 Do While True SiteNoTransfer = Worksheets("Program").Cells(RowTransfer, TransferCol(1)) If SiteNoTransfer = "END" Then Exit Do ElseIf SiteNoTransfer = SiteNo Then Worksheets("MASTER RESULTS").Cells(Row, StartColumn + 1).Interior.Color = RGB(0, 255, 255) Worksheets("Program").Cells(RowTransfer, TransferCol(1)).Interior.Color = RGB(0, 100, 255) For i = 2 To 4 If Not TransferCol(i) = 0 Then Worksheets("MASTER RESULTS").Cells(Row, StartColumn + i) = Worksheets("Program").Cells(RowTransfer, TransferCol(i)) End If Next For i = 5 To 5 If Not TransferCol(5) = 0 Then Worksheets("MASTER RESULTS").Cells(Row, StartColumn + i) = Worksheets("Program").Cells(RowTransfer, Year(TransferCol(5))) 'Get the year in yyyy from dd-mon-yy Exit Do End If Next End If RowTransfer = RowTransfer + 1 Loop End If Row = Row + 1 Loop End Sub 

你错过了一些结局:

  1. If SiteNoTransfer = "END"没有相应的End If

  2. For i = 5 To 5没有相应的Next

一旦你解决这些问题,代码将会很好。