这可能是一个真正的新手'问题,但说实话,我是宏的新手,需要一些帮助。
如果单元格AB10
显示" 已批准",我会编写一个宏来自动向单元格AA10
添加日期/时间戳。如果AB10 & AC10
空白,此宏还会自动删除AA10
的内容。
我现在还需要在单元格AA10
显示已批准并且已在AB10
中自动填充日期/时间并且一旦有值(来自预定的下拉列表)时整个行锁定在单元格AC10
中。
这是我现有的宏:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
With Target
If .Count > 1 Then Exit Sub
If Not Intersect(Range("AA10:AA10000"), .Cells) Is Nothing Then
Application.EnableEvents = False
If IsEmpty(.Value) Then
.Offset(0, 1).ClearContents
.Offset(0, 2).ClearContents
Else
With .Offset(0, 1)
.NumberFormat = "dd mmm yyyy hh:mm"
.Value = Now
End With
End If
Application.EnableEvents = True
End If
End With
End Sub
有人可以告诉我如何根据上面的要求添加必要的代码来锁定行吗?我尝试添加的所有内容都会禁用上面的宏。
真诚地感谢您提供的任何帮助!
答案 0 :(得分:0)
只需对您的代码进行少量修改即可。将以下内容粘贴到工作表的代码模块中:
Option Explicit
Private Const strPassword As String = "password"
Private Sub Worksheet_Activate()
Me.Protect Password:=strPassword, userinterfaceonly:=True
End Sub
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
With Target
If .Count > 1 Then Exit Sub
If Not Intersect(Range("AA10:AA10000"), .Cells) Is Nothing Then
Application.EnableEvents = False
If IsEmpty(.Value) Then
.Offset(0, 1).ClearContents
.Offset(0, 2).ClearContents
'.EntireRow.Locked = False
Else
With .Offset(0, 1)
.NumberFormat = "dd mmm yyyy hh:mm"
.Value = Now
End With
.EntireRow.Locked = True
'.Locked = False
End If
Application.EnableEvents = True
End If
End With
End Sub
以上假设所有需要编辑的单元格都以解锁状态启动(注意:Excel的默认设置已被锁定)。根据您的初始代码,将输入时间戳,无论在AA列中输入什么内容,行都将被锁定。如果您希望用户能够随后清除AA列的内容以删除时间戳并解锁该行以进行编辑,则恢复代码中的两个已清除行。
希望这有帮助。