【问题标题】:Copying cell with VBA using If statement使用 If 语句使用 VBA 复制单元格
【发布时间】:2013-07-25 04:01:58
【问题描述】:

我是 VBA 的初学者,我想知道如何在我的代码中添加 IF ELSE 语句: 我只想在填充单元格时启用复制单元格,如果未填充单元格,则必须弹出 msgbox

代码:

Private Sub CommandButton3_Click()

 Application.ScreenUpdating = False

    Dim NextRow As Range

    Sheet1.Range("F7,F10,F13,F16,F19,F22,F25,F28").Copy

    Sheets("Overzicht").Select
    Set NextRow = ActiveSheet.Cells(Cells.Rows.Count, 1).End(xlUp).Offset(1, 0)
    NextRow.Select
    Selection.PasteSpecial (xlValues), Transpose:=True

    MsgBox "Invoer is opgeslagen"

    Application.CutCopyMode = False
    Application.ScreenUpdating = True

End Sub

【问题讨论】:

    标签: vba excel if-statement for-loop boolean


    【解决方案1】:

    欢迎来到stackoverflow.com

    您必须用 for loopIF-ELSE 语句和 Boolean 包裹您的 copy code block 类型变量。

    首先,您要遍历指定范围的单元格并确保它们都被填充

     Dim allFilled As Boolean
        Dim i As Long
        For i = 7 To 28 Step 3
            If Not IsEmpty(Sheet1.Range("F" & i)) Then
                allFilled = True
            Else
                allFilled = False
            End If
        Next i
    

    如果是,您可以继续复制粘贴,如果是不是,程序将显示一个消息框:Not all the cells are filled! Cant copy

    你的完整代码:

    Sub CommandButton3_Click()
     Application.ScreenUpdating = False
    
        Dim allFilled As Boolean
        Dim i As Long
        For i = 7 To 28 Step 3
            If Not IsEmpty(Sheet1.Range("F" & i)) Then
                allFilled = True
            Else
                allFilled = False
            End If
        Next i
    
        If allFilled Then ' = if (allFilled = true) then
            Dim NextRow As Range
            Sheet1.Range("F7,F10,F13,F16,F19,F22,F25,F28").Copy
    
            Sheets("Overzicht").Select
            Set NextRow = ActiveSheet.Cells(Cells.Rows.Count, 1).End(xlUp). _ 
                          Offset(1, 0)
            NextRow.Select
            Selection.PasteSpecial (xlValues), Transpose:=True
    
            MsgBox "Invoer is opgeslagen"
    
            Application.CutCopyMode = False
            Application.ScreenUpdating = True
        Else
            MsgBox "Not all the cells are filled! Cant copy"
        End If
    End Sub
    

    Update来自 cmets

    是的,也可以单独执行不同的检查,例如:

    Dim allFilled As Boolean
    If Not IsEmpty(Range("F7, F10, F13, F16")) And IsEmpty(Range("F8")) Then
        ' F7, F10, F13, F16 are not empty and F8 is empty
        allFilled = True
    ElseIf IsEmpty(Range("F28")) Then
        ' F28 empty cannot execute copy-paste
        allFilled = False
    Else
        allFilled = False
    End If
    

    【讨论】:

    • 谢谢我,这很有帮助。是否也可以使单元格 F16、F19、F22、F25 之一成为有条件的。那么,F7、F10、F13、F28 和 F16 或 F19 或 F22 或 F25?复制前不是空的吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-11
    • 1970-01-01
    • 2015-09-30
    • 2016-10-15
    • 2018-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多