这可能是一个真正的“新手”问题,但老实说,我是宏新手,需要一些帮助。
我编写了一个宏,如果单元格 AA10
显示“已批准”,则自动向单元格 AB10
添加日期/时间戳。如果 AA10
为空白,此宏还会自动删除 AB10 和 AC10
的内容。
一旦单元格 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
有人可以告诉我如何添加必要的代码来按上述要求锁定行吗?我尝试添加的所有内容都会禁用上面的宏。
衷心感谢您提供的任何帮助!
最佳答案
只需要对您的代码进行少量修改。将以下内容粘贴到工作表的代码模块中:
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 列的内容,以删除时间戳并解锁该行以进行编辑,请恢复代码中重新删除的两行。
希望这有帮助。
关于excel - 一张纸中的 2 个宏针对相同的单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27172940/