Excel VBA - 如何在If Then中添加多个语句 - If(条件1)然后(关闭窗口)和(End Sub)

时间:2016-03-06 19:52:26

标签: excel vba excel-vba macros

我创建了一个宏,它复制某些单元格并将其粘贴到新窗口(Excel)中。我试图在宏中添加一个If Then语句,在粘贴数据后,如果一个特定的单元格为空(假设为A2),我希望宏关闭该窗口并结束宏。我尝试了以下编码,但它给了我 编译错误:如果没有结束IF阻止

Windows("Data.xlsx").Activate
Rows("13:18").Select
Selection.Copy
Windows("Data Paste.xlsx").Activate

Range("A1").Select
ActiveSheet.Paste


If ActiveSheet.Range("A2").Value = "" Then
ActiveWindow.Close
End Sub
End If

Range("A2:A6").SpecialCells(xlCellTypeBlanks).EntireRow.Delete

End Sub

为了更清楚,我需要的是什么;第一行13:18从“DATA.xlsx”复制并粘贴在“Data Paste.xlsx”中,然后检查单元格A2是否为空,如果是,则关闭窗口“Data Paste.xlsx”并停止宏运行。如果A2单元格不为空,我希望宏继续而不关闭窗口并继续下面的代码:

Range("A2:A6").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
'Rest of the code

请找我解决方案。

3 个答案:

答案 0 :(得分:1)

您必须更正多个语法错误,如下面显示的示例Excel VBA Sub中所示:

Sub CopyClose()
    Windows("Data.xlsx").Activate
    Rows("13:18").Select
    Selection.Copy
    Windows("Data Paste.xlsx").Activate
    Range("A1").Select
    ActiveSheet.Paste
    ' check for the condition, and close the window and exit sub if true
    ' otherwise, execute the next line
    If ActiveSheet.Range("A2").Value = "" Then
        ActiveWindow.Close
    Else
        Range("A2:A6").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    End If
End Sub

希望这可能会有所帮助。

答案 1 :(得分:1)

End Sub应该是Exit Sub。退出提前终止,结束意味着代码的自然结束。

public class BigIntegerSerializer extends JsonSerializer<BigInteger> {

    @Override
    public void serialize(BigInteger value, JsonGenerator jgen,
                      SerializerProvider provider) throws IOException {
        jgen.writeString(value + "");
    }
}

答案 2 :(得分:0)

我找到了答案,而不是End Sub使用Exit Sub工作就完美!!

Range("A1").Select
ActiveSheet.Paste


If ActiveSheet.Range("A2").Value = "" Then
ActiveWindow.Close
Exit Sub
End If

Range("A2:A6").SpecialCells(xlCellTypeBlanks).EntireRow.Delete

End Sub