嵌套If和For Inside如果不工作VBA

时间:2017-05-16 04:04:35

标签: excel vba excel-vba

我得到了错误:"如果没有阻止则结束#34;在最后End If

这是我的代码的一部分:

If valorMagnitud > 10 Then

    For Each Sheet In Worksheets
        If textoCodigo.Value = Sheet.Name Then
            GoTo continue
        Else
            ActiveWorkbook.Unprotect Password:="pAtRiCiA"
            Worksheets("Definición").Unprotect Password:="pAtRiCiA"
            Worksheets("Definición").Copy Before:=Sheets("Seguimiento")
            Worksheets("Definición (2)").Name = textoCodigo.Value
        End If
    Exit For

continue:
    Set ws3 = Worksheets(textoCodigo.Value)

    With ws3
        .ListObjects(1).Name = "infoRiesgo" & textoCodigo.Value
        .ListObjects(2).Name = "planesAccion" & textoCodigo.Value
        .Cells(1, 2) = "Definición Planes de Acción " & textoCodigo.Value
        .Cells(5, 5) = textoCodigo.Value
        .Cells(5, 6) = textoResponsable.Value
        .Cells(5, 7) = textoDescripcion.Value
        .Cells(5, 8) = textoControles.Value
        .Cells(5, 9) = textoFrecuencia.Value
        .Cells(5, 10) = textoImpacto.Value
        Select Case valorMagnitud
            Case Is >= 15
                .Cells(5, 11) = "Extremo"
            Case 8 To 14
                .Cells(5, 11) = "Alto"
            Case 4 To 7
                .Cells(5, 11) = "Medio"
            Case 1 To 3
                .Cells(5, 11) = "Aceptable"
        End Select

        Worksheets(textoCodigo.Value).Protect Password:="pAtRiCiA", DrawingObjects:=True, Contents:=True, Scenarios:=True
        .Visible = xlSheetHidden
        '.Visible = xlSheetVeryHidden
    End With

    Worksheets("Definición").Protect Password:="pAtRiCiA", DrawingObjects:=True, Contents:=True, Scenarios:=True

    With ws4
        .Unprotect Password:="pAtRiCiA"
        .Cells(.Range("Planes").Rows.Count + 2, 1) = textoCodigo.Value
        .Protect Password:="pAtRiCiA", DrawingObjects:=True, Contents:=True, Scenarios:=True
    End With

    ActiveWorkbook.Protect Password:="pAtRiCiA", Structure:=True, Windows:=False

    Worksheets("Valoración").Activate
End If

1 个答案:

答案 0 :(得分:3)

您的错误是由Exit For代替Next引起的。

然而......代码的一部分是

For Each Sheet In Worksheets
    If textoCodigo.Value = Sheet.Name Then
        GoTo continue
    Else
        ActiveWorkbook.Unprotect Password:="pAtRiCiA"
        Worksheets("Definición").Unprotect Password:="pAtRiCiA"
        Worksheets("Definición").Copy Before:=Sheets("Seguimiento")
        Worksheets("Definición (2)").Name = textoCodigo.Value
    End If
Exit For

不会做你认为会做的事情。

除非工作簿中的第一个工作表的名称等于textoCodigo的值,否则您的代码将复制“Definición”表,并尝试使用值{{ 1}} - 即使工作簿中已经存在该工作表(可能是第二个,第三个,第四个,第四个工作表)。

我认为您正在尝试仅在尚未存在的情况下创建工作表。如果是这样,对代码的最小更改可能是:

textoCodigo