Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 与'有关的问题;下一个';如果出现错误';关于错误';结束VBA_Excel_Vba - Fatal编程技术网

Excel 与'有关的问题;下一个';如果出现错误';关于错误';结束VBA

Excel 与'有关的问题;下一个';如果出现错误';关于错误';结束VBA,excel,vba,Excel,Vba,我有一个代码来过滤数据并复制到新的工作表。我有一个问题,如果正在创建的工作表已经存在,那么它将跳转到错误处理并停止,而不是继续使用剩余的“下一步”。如果我在错误处理之后移动“下一步”,它将仅在存在和错误时循环。有什么办法我可以两者兼得吗 Sub SortDataAll() ' Sort Data All If (Workbooks("Fakturagrunnlag All_1.xlsm").Sheets("All Focal Point Data").AutoFilterMod

我有一个代码来过滤数据并复制到新的工作表。我有一个问题,如果正在创建的工作表已经存在,那么它将跳转到错误处理并停止,而不是继续使用剩余的“下一步”。如果我在错误处理之后移动“下一步”,它将仅在存在和错误时循环。有什么办法我可以两者兼得吗

Sub SortDataAll()
    ' Sort Data All

    If (Workbooks("Fakturagrunnlag All_1.xlsm").Sheets("All Focal Point Data").AutoFilterMode And Workbooks("Fakturagrunnlag All_1.xlsm").Sheets("All Focal Point Data").FilterMode) _
      Or Workbooks("Fakturagrunnlag All_1.xlsm").Sheets("All Focal Point Data").FilterMode Then
        Workbooks("Fakturagrunnlag All_1.xlsm").Sheets("All Focal Point Data").ShowAllData
    End If

    '~~> Set filter of main data
    Dim rRange As Range
    Dim rCell As Range
    Set rRange = Worksheets("Front Page").Range("A7:A21")

    For Each rCell In rRange
        MsgBox "Setting filter for " & rCell

        Dim rList As String
        rList = rCell & "List"

        MsgBox "The list for filter is" & rList

        ' can remove after
        Worksheets("All Focal Point Data").Activate

        Dim v As Variant
        v = Application.WorksheetFunction.Transpose(Range(rList).Value)

        Range("A:BC").AutoFilter Field:=54, Criteria1:=v, Operator:=xlFilterValues
        Selection.AutoFilter Field:=54, Criteria1:=v, Operator:=xlFilterValues

        MsgBox "Check data is filtered"

        '~~> Create new sheet and paste data
        On Error Resume Next

        With ThisWorkbook
            .Sheets.Add(After:=.Sheets(.Sheets.Count)).Name = rCell
        End With

        If Err Then GoTo ErrorJump

        Err.clear

        Worksheets("All Focal Point Data").Range("A1:BC5000").Copy Worksheets(rCell).Range("A1").Paste
        Columns("BB:BB").Delete Shift:=xlToLeft

    Next rCell

    Exit Sub

ErrorJump:
    MsgBox "Sheet already exists":
    Application.DisplayAlerts = False
    ActiveWindow.SelectedSheets.Delete
    Application.DisplayAlerts = True
    'Worksheets("Front Page").Activate
    'Range("A1").Select

    Next rCell
End Sub

我使用了一种方法,您只需尝试使用工作表,并在抛出错误时让错误控制创建工作表

在这种情况下,如果存在abc工作表,则使用它。如果它不存在,则创建并使用它

sub testws()

    dim wsn as string

    wsn = "abc"

    on error goto make_ws
    with worksheets(wsn)
        on error goto 0
        ...
    end with

    exit sub

make_ws:
    with worksheets.add
        .name = wsn
    end with
    resume

end sub

我将修改您的方法,将工作表名称作为参数并返回bool(如果工作表已经存在,则为true,如果不存在,则为false)。通过这样做,您的方法更加通用,如果您以后需要在添加工作表和使用现有工作表的情况下做任何不同的事情,那么您就有了一个bool。