0

私は見当もつかない。

各 If then ブロックの後に End If を入れてみましたが、明らかにうまくいきませんでした。何か案は??

Private Sub putCollectionInWorksheet(ByRef ws As Excel.Worksheet, ByRef cData As Collection)
    Dim i As Long, j As Long
    Dim emp As Employee


    i = 36 ' current row

    For Each emp In cData
        If emp.City = "Dallas" And emp.Title = "Associate" Then
            ws.Cells(i, 3).Value = emp.Name
            ws.Cells(i, 3).Interior.ColorIndex = 31
            ws.Cells(i, 3).Font.Color = vbWhite
            i = i - 1
            Next emp


        Else
            If emp.City = "Denver" And emp.Title = "Associate" Then
                ws.Cells(i, 4).Value = emp.Name
                ws.Cells(i, 4).Interior.ColorIndex = 53
                ws.Cells(i, 4).Font.Color = vbWhite
                i = i - 1
                 Next emp

        Else

            If emp.City = "Houston" And emp.Title = "Associate" Then
                ws.Cells(i, 5).Value = emp.Name
                ws.Cells(i, 5).Interior.ColorIndex = 52
                ws.Cells(i, 5).Font.Color = vbWhite
                i = i - 1
                 Next emp


        Else

            If emp.City = "Kansas City (Missouri)" And emp.Title = "Associate" Then
                ws.Cells(i, 6).Value = emp.Name
                ws.Cells(i, 6).Interior.ColorIndex = 56
                ws.Cells(i, 6).Font.Color = vbWhite
                i = i - 1
                 Next emp


        Else

            If emp.City = "Oklahoma City" And emp.Title = "Associate" Then
                ws.Cells(i, 7).Value = emp.Name
                ws.Cells(i, 7).Interior.ColorIndex = 47
                ws.Cells(i, 7).Font.Color = vbWhite
                i = i - 1
                 Next emp


        Else

            If emp.City = "Tulsa" And emp.Title = "Associate" Then
                ws.Cells(i, 8).Value = emp.Name
                ws.Cells(i, 8).Interior.ColorIndex = 48
                ws.Cells(i, 8).Font.Color = vbWhite
                i = i - 1
                 Next emp


        End If



End Sub

編集

現在、行は次のようになっています

ボブ | スー | エレン | エレン | ジョージ

コレクションがダラスの同僚であるヘンリーに出くわした場合、それは上書きされます.

ヘンリー | ヘンリー | スー | エレン | エレン | ジョージ

次のようにする必要があります。

ヘンリー | ヘンリー |

ボブ | スー | エレン | エレン | ジョージ

申し訳ありませんが、ファイアウォールのためにスクリーンショットを表示できません。

4

1 に答える 1

1

未テスト

これは私のコメントから私が意味することです

Private Sub putCollectionInWorksheet(ByRef ws As Excel.Worksheet, ByRef cData As Collection)
    Dim i As Long, j As Long
    Dim emp As Employee

    i = 36 ' current row

    For Each emp In cData
        If emp.City = "Dallas" And emp.Title = "Associate" Then
            ws.Cells(i, 3).Value = emp.Name
            ws.Cells(i, 3).Interior.ColorIndex = 31
            ws.Cells(i, 3).Font.Color = vbWhite
            i = i - 1
        ElseIf emp.City = "Denver" And emp.Title = "Associate" Then
            ws.Cells(i, 4).Value = emp.Name
            ws.Cells(i, 4).Interior.ColorIndex = 53
            ws.Cells(i, 4).Font.Color = vbWhite
            i = i - 1
        ElseIf emp.City = "Houston" And emp.Title = "Associate" Then
            ws.Cells(i, 5).Value = emp.Name
            ws.Cells(i, 5).Interior.ColorIndex = 52
            ws.Cells(i, 5).Font.Color = vbWhite
            i = i - 1
        ElseIf emp.City = "Kansas City (Missouri)" And emp.Title = "Associate" Then
            ws.Cells(i, 6).Value = emp.Name
            ws.Cells(i, 6).Interior.ColorIndex = 56
            ws.Cells(i, 6).Font.Color = vbWhite
            i = i - 1
        ElseIf emp.City = "Oklahoma City" And emp.Title = "Associate" Then
            ws.Cells(i, 7).Value = emp.Name
            ws.Cells(i, 7).Interior.ColorIndex = 47
            ws.Cells(i, 7).Font.Color = vbWhite
            i = i - 1
        ElseIf emp.City = "Tulsa" And emp.Title = "Associate" Then
            ws.Cells(i, 8).Value = emp.Name
            ws.Cells(i, 8).Interior.ColorIndex = 48
            ws.Cells(i, 8).Font.Color = vbWhite
            i = i - 1
        End If
    Next emp
End Sub
于 2013-04-24T19:32:06.703 に答える