输出到两个工作表

时间:2018-05-18 18:51:13

标签: vba excel-vba excel

我有以下函数将记录输出到名为CI的工作表或名为Error的工作表。我添加了一个额外的IF语句,如果我的源'col'列包含单词“TITER”,那么我希望它输出到“Error”工作表。这似乎正在工作,并将相应的记录输出到错误选项卡。 然而我注意到它也将这些相同的记录输出到“CI”工作表。我有IF代码嵌套在主要的Else语句中,但我认为它不属于那里。任何帮助表示赞赏!

Public lstrow As Long, strDate As Variant, stredate As Variant
Sub importbuild()
lstrow = Worksheets("Data").Range("G" & Rows.Count).End(xlUp).Row

Function DateOnlyLoad(col As String, col2 As String, colcode As String)
    Dim i As Long, j As Long, k As Long
    j = Worksheets("CI").Range("A" & Rows.Count).End(xlUp).Row + 1
    k = Worksheets("Error").Range("A" & Rows.Count).End(xlUp).Row + 1

    For i = 2 To lstrow
        strDate = spacedate(Worksheets("Data").Range(col & i).Value)
        stredate = spacedate(Worksheets("Data").Range(col2 & i).Value)

        If (Len(strDate) = 0 And (col2 = "NA" Or Len(stredate) = 0)) Or InStr(1, UCase(Worksheets("Data").Range(col & i).Value), "EXP") > 0 Then
            GoTo EmptyRange
        Else
            If InStr(1, UCase(Worksheets("Data").Range(col & i).Value), "TITER") > 0 Then
                Worksheets("Error").Range("A" & k & ":C" & k).Value = Worksheets("Data").Range("F" & i & ":H" & i).Value
                Worksheets("Error").Range("D" & k).Value = "REVIEW MMR1 DATES"
                k = k + 1
            End If
            Worksheets("CI").Range("A" & j & ":C" & j).Value = Worksheets("Data").Range("F" & i & ":H" & i).Value
            Worksheets("CI").Range("D" & j).Value = colcode
            Worksheets("CI").Range("E" & j).Value = datecleanup(strDate)
            Worksheets("CI").Range("L" & j).Value = dateclean(strDate)
            Worksheets("CI").Range("M" & j).Value = strDate
            If col2 <> "NA" Then
                If IsEmpty(stredate) = False Then
                    Worksheets("CI").Range("F" & j).Value = datecleanup(stredate)
                End If
            End If
            j = j + 1
        End If
EmptyRange:
    Next i
End Function

1 个答案:

答案 0 :(得分:2)

请查看并与原始代码进行比较。您可以看到快速更改。缩进有助于发现错误和/或改进代码的机会。

Function DateOnlyLoad(col As String, col2 As String, colcode As String)
    Dim i As Long, j As Long, k As Long
    j = Worksheets("CI").Range("A" & Rows.Count).End(xlUp).Row + 1
    k = Worksheets("Error").Range("A" & Rows.Count).End(xlUp).Row + 1

    For i = 2 To lstrow
        strDate = spacedate(Worksheets("Data").Range(col & i).Value)
        stredate = spacedate(Worksheets("Data").Range(col2 & i).Value)

        If (Len(strDate) = 0 And (col2 = "NA" Or Len(stredate) = 0)) Or InStr(1, UCase(Worksheets("Data").Range(col & i).Value), "EXP") > 0 Then
            GoTo EmptyRange
        Else
            If InStr(1, UCase(Worksheets("Data").Range(col & i).Value), "TITER") > 0 Then
                Worksheets("Error").Range("A" & k & ":C" & k).Value = Worksheets("Data").Range("F" & i & ":H" & i).Value
                Worksheets("Error").Range("D" & k).Value = "REVIEW MMR1 DATES"
                k = k + 1
            Else
                Worksheets("CI").Range("A" & j & ":C" & j).Value = Worksheets("Data").Range("F" & i & ":H" & i).Value
                Worksheets("CI").Range("D" & j).Value = colcode
                Worksheets("CI").Range("E" & j).Value = datecleanup(strDate)
                Worksheets("CI").Range("L" & j).Value = dateclean(strDate)
                Worksheets("CI").Range("M" & j).Value = strDate
                If col2 <> "NA" Then
                    If IsEmpty(stredate) = False Then
                        Worksheets("CI").Range("F" & j).Value = datecleanup(stredate)
                    End If
                End If
                j = j + 1
            End If
        End If
EmptyRange:
    Next i
End Function