错误处理,复制行

时间:2015-11-17 16:40:06

标签: excel vba excel-vba excel-2010

关注我的帖子:Error handling for if sheets exists when copying rows

我迫切需要帮助。我需要帮助才能使错误处理工作。

  1. 我需要它来显示带有来自全局工作表的lookupVal的msgbox,如果它在ComboBox2列表中找不到它。
  2. 除了这段错误处理之外,您还要求协助它在代码运行完成后显示MsgBox,以显示已复制到每个工作表的行数以及复制的总行数。 / LI>

    类似于下面的东西,如果它将更多行复制到其他工作表,那么它将在2555之后说明,然后告诉我工作表没有被复制到。

    enter image description here

    Private Sub CommandButton2_Click()
    Dim i As Long, j As Long, lastG As Long, strWS As String, rngCPY As Range
    
    With Application
        .ScreenUpdating = False
        .EnableEvents = False
        .CutCopyMode = False
    End With
    
    If Range("L9") = "" Then
        MsgBox "You can't Split the Jobs at this stage. " & vbLf & vbLf & "Please create the form for the Sub-Contractor First." & vbLf & vbLf & "Please press Display Utilities to create form.", vbExclamation, "Invalid Operation" '& vbLf & vbLf & "This operation is invalid."
        Exit Sub
    End If
        On Error GoTo bm_Close_Out
    
        ' find last row
        lastG = sheets("Global").Cells(Rows.Count, "Q").End(xlUp).row
    
        For i = 3 To lastG
            lookupVal = sheets("Global").Cells(i, "Q") ' value to find
            ' loop over values in "details"
            For j = 0 To UserForm2.ComboBox2.ListCount - 1
                currVal = UserForm2.ComboBox2.List(j, 0) ' value to match
                If lookupVal = currVal Then
                    Set rngCPY = sheets("Global").Cells(i, "Q").EntireRow
                    strWS = UserForm2.ComboBox2.List(j, 1)
                    On Error GoTo bm_Need_Worksheet  '<~~ if the worksheet in the next line does not exist, go make one
                    With Worksheets(strWS)
                        rngCPY.Copy
                        .Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Insert shift:=xlDown
                    End With
                    '''' 
                      Code here for msgbox to say, lookupVal ie(ISLDAMAGE) is not in the 
                      list, please create the sheet manually then copy the rows accordingly
                    ''''
                End If
            Next j
        Next i
    
    GoTo bm_Close_Out
    
    bm_Need_Worksheet:
        On Error GoTo 0
        With Worksheet
        Dim wb As Workbook: Set wb = ThisWorkbook
        Dim wsTemplate As Worksheet: Set wsTemplate = wb.sheets("Template")
        Dim wsPayment As Worksheet: Set wsPayment = wb.sheets("Payment Form")
        Dim wsNew As Worksheet
        Dim lastRow2 As Long
        Dim Contract As String: Contract = sheets("Payment Form").Range("C9").value
        Dim SpacePos As Integer: SpacePos = InStr(Contract, "- ")
        Dim Name As String: Name = Left(Contract, SpacePos)
        Dim Name2 As String: Name2 = Right(Contract, Len(Contract) - Len(Name))
    
        Dim NewName As String: NewName = strWS
        Dim CCName As Variant: CCName = UserForm2.ComboBox2.List(j, 2)
    
        Dim lastRow As Long: lastRow = wsPayment.Range("U36:U53").End(xlDown).row
    
    If InStr(1, sheets("Payment Form").Range("A20").value, "THE VAT SHOWN IS YOUR OUTPUT TAX DUE TO CUSTOMS AND EXCISE") > 0 Then
        lastRow2 = wsPayment.Range("A23:A39").End(xlDown).row
    Else
        lastRow2 = wsPayment.Range("A18:A34").End(xlDown).row
    End If
    
        wsTemplate.Visible = True
        wsTemplate.Copy before:=sheets("Details"): Set wsNew = ActiveSheet
        wsTemplate.Visible = False
    
    If InStr(1, sheets("Payment Form").Range("A20").value, "THE VAT SHOWN IS YOUR OUTPUT TAX DUE TO CUSTOMS AND EXCISE") > 0 Then
        With wsPayment
            For Each cell In .Range("A23:A39")
                If Len(cell) = 0 Then
                    If sheets("Payment Form").Range("C9").value = "Network" Then
                        cell.value = NewName & " - " & Name2 & ": " & CCName
                    Else
                        cell.value = NewName & " -" & Name2 & ": " & CCName
                    End If
                    Exit For
                End If
            Next cell
        End With
    Else
        With wsPayment
            For Each cell In .Range("A18:A34")
                If Len(cell) = 0 Then
                    If sheets("Payment Form").Range("C9").value = "Network" Then
                        cell.value = NewName & " - " & Name2 & ": " & CCName
                    Else
                        cell.value = NewName & " -" & Name2 & ": " & CCName
                    End If
                    Exit For
                End If
            Next cell
        End With
    End If
    
    If InStr(1, sheets("Payment Form").Range("A20").value, "THE VAT SHOWN IS YOUR OUTPUT TAX DUE TO CUSTOMS AND EXCISE") > 0 Then
        With wsNew
            .Name = NewName
            .Range("D4").value = wsPayment.Range("A23:A39").End(xlDown).value
            .Range("D6").value = wsPayment.Range("L11").value
            .Range("D8").value = wsPayment.Range("C9").value
            .Range("D10").value = wsPayment.Range("C11").value
        End With
    Else
        With wsNew
            .Name = NewName
            .Range("D4").value = wsPayment.Range("A18:A34").End(xlDown).value
            .Range("D6").value = wsPayment.Range("L11").value
            .Range("D8").value = wsPayment.Range("C9").value
            .Range("D10").value = wsPayment.Range("C11").value
        End With
    End If
    
    wsPayment.Activate
    
        With wsPayment
            .Range("J" & lastRow2 + 1).value = 0
            .Range("L" & lastRow2 + 1).Formula = "=N" & lastRow2 + 1 & "-J" & lastRow2 + 1 & ""
            .Range("N" & lastRow2 + 1).Formula = "='" & NewName & "'!L20"
            .Range("U" & lastRow + 1).value = NewName & ": "
            .Range("V" & lastRow + 1).Formula = "='" & NewName & "'!I21"
            .Range("W" & lastRow + 1).Formula = "='" & NewName & "'!I23"
            .Range("X" & lastRow + 1).Formula = "='" & NewName & "'!K21"
        End With
        End With
    
        On Error GoTo bm_Close_Out
        Resume
    
    bm_Close_Out:
    
    With Application
        .ScreenUpdating = True
        .EnableEvents = True
        .CutCopyMode = True
    End With
    End Sub 
    

    我已经得到了一些帮助,但在最后阶段失败了!感谢所有帮助。

0 个答案:

没有答案