所以我有这个excel电子表格,它从另一张表中引入了列。对于前四列,它只是一个直接的换位。原始表格中的第五个 - 数据来自的那个 - 是dd-mon-yy格式的日期(例如13-Jul-14),我需要转换为一年(例如2014年)。我觉得这是我所得到的错误的原因。
当我运行代码时,我得到以下错误,在代码中标记:Loop without Do,End If If without Block If,Loop without Do,For for without Next。
我对VBA不是很有经验,特别是在excel方面,所以任何建议都会非常感激。
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
答案 0 :(得分:1)
你错过了一些结局:
If SiteNoTransfer = "END"
没有相应的End If
。
For i = 5 To 5
没有相应的Next
。
修好后,代码就可以了。
答案 1 :(得分:1)
继续试试这个重新制作的版本。我已经修复了所有语法问题并清除了缩进(这样你就可以更容易地看到是什么了),虽然我不确定它是否按预期工作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