我有一个我想写的宏。我在工作表事件后面有这个宏,宏应该检查范围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
答案 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操作,您应该可以在任何一千个地方中自己研究。