VBA检查细胞是否空 - 到Lastrow

时间:2017-09-02 19:20:22

标签: excel vba excel-vba loops

我有一个我想写的宏。我在工作表事件后面有这个宏,宏应该检查范围A2,B2,C2是否为空,如果没有空,则在单元格D2中应用宏。这应该适用于以下行A3,B3,C3然后将宏应用于D3等。通过双击单元格

来应用宏

问题:代码没有像我上面那样运行。

 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    With Target
        If .Column = 4 Then
        Select Case .Row
                Case 1, 2, 3, 4, 5, 6
 Dim CheckCell As Range

    For Each CheckCell In Sheets("Dates").Range("A1,B2,C2").Cells
        If Len(Trim(CheckCell.Value)) = 0 Then
            CheckCell.Select
            MsgBox "Cell " & CheckCell.Address(0, 0) & " is empty. Click OK and populate it.", , "Missing Information"
            Exit Sub
        End If
    Next CheckCell

      .Value2 = "Prepared By" & "  " & Environ("Username")

    End Select
                  End If
    End With
End Sub

1 个答案:

答案 0 :(得分:2)

忘记Worksheet_BeforeDoubleClick废话;看来你想在D列的每个单元格上运行一个子程序,其中A,B和C列中的单元格不是空白。

这意味着您应该使用Worksheet_Change。无论何时在A,B或C列中更改某些内容,请使用该行在D列上运行子过程。

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Target, Range("A:C"), Target.Parent.UsedRange) Is Nothing Then
        On Error GoTo safe_exit
        Application.EnableEvents = False
        Dim trg As Range, trgD As Range
        For Each trg In Intersect(Target, Range("A:C"), Target.Parent.UsedRange)
            If CBool(Application.CountA(Cells(trg.Row, "A").Resize(1, 3))) Then
                Set trgD = Cells(trg.Row, "D")
                MsgBox trgD.Address(False, False)
                trgD = Now
            End If
        Next trg
    End If

safe_exit:
    Application.EnableEvents = True
End Sub

这是一个简单的MsgBox和Timestamp操作,您应该可以在任何一千个地方中自己研究。