所以我试图制作一个删除单元格的代码,只要它们在从“O”列删除单元格后(水平地)属于同一列。列N是链接到列FF的所有勾选框。如果在删除发生时将它们设置为true,则应该变为false。列O是删除应该发生的位置(目标是只需按下单元格并单击键盘上的删除或后退空格,而不是按钮。)列P是签名日期,也应删除。
Private Sub Worksheet_Change(ByVal Target As Range)
'Update 20140722
Dim WorkRng As Range
Dim Rng As Range
Dim xOffsetColumn As Integer
Set WorkRng = Intersect(Application.ActiveSheet.Range("O:O"), Target)
xOffsetColumn = 1
If Not WorkRng Is Nothing Then
Application.EnableEvents = False
For Each Rng In WorkRng
If Not VBA.IsEmpty(Rng.Value) Then
Rng.Offset(0, xOffsetColumn).Value = Now
Rng.Offset(0, xOffsetColumn).NumberFormat = "dd-mm-yyyy"
Else
Rng.Offset(0, xOffsetColumn).ClearContents
End If
Next
Application.EnableEvents = True
End If
无法将框设置为false。我也不能选择多个单元格,它一次只删除一个单元格。
这是一切开始正常工作的最终结果。
Private Sub Worksheet_Change(ByVal Target As Range) '<----- Start of worksheet script
Dim WorkRng As Range '<----- selection
Dim Rng As Range '<----- selected cell(s)
Dim xOffsetColumn As Integer '<----- idk lol
Set WorkRng = Intersect(Application.ActiveSheet.Range("O:O"), Target) '<----- block selection for anything other than column O
xOffsetColumn = 1 '<----- Useless , but it means the cell one range forward will be changed.
If Not WorkRng Is Nothing Then '<----- if statement
Application.EnableEvents = False '<----- idk what this is for but ok.
For Each Rng In WorkRng '<----- Start of cell loop
If Not VBA.IsEmpty(Rng.Value) Then '<----- Second start of if statement
Rng.Offset(0, xOffsetColumn).Value = Now '<----- Date and time
Rng.Offset(0, xOffsetColumn).NumberFormat = "dd-mm-yyyy" '<----- Date and time format
Else '<----- if's else statement.
Rng.Offset(0, xOffsetColumn).ClearContents '<----- Command for deletion.
Rng.Offset(, 147).Value = False '<----- Tick Box sets to false.
End If '<----- Second end of if statement
Next Rng '<----- end of loop
Application.EnableEvents = True '<----- I also don't know what this is for but ok.
End If '<----- First end of if statement.
End Sub