Excel 一张工作表中的2个宏指向相同的单元格

Excel 一张工作表中的2个宏指向相同的单元格,excel,vba,Excel,Vba,这可能是一个真正的“新手”问题,但老实说,我对宏还不熟悉,需要一些帮助 我编写了一个宏,如果单元格AA10显示“Approved”,则会自动向单元格AB10添加日期/时间戳。如果AA10为空白,此宏还会自动删除AB10&AC10的内容 现在,我还需要在单元格AA10显示Approved并在AB10中自动填充日期/时间,以及单元格AC10中有值(来自预定下拉列表)时锁定整行 这是我现有的宏: Private Sub Worksheet_Change(ByVal Target As Excel.Ra

这可能是一个真正的“新手”问题,但老实说,我对宏还不熟悉,需要一些帮助

我编写了一个宏,如果单元格
AA10
显示“Approved”,则会自动向单元格
AB10
添加日期/时间戳。如果
AA10
空白,此宏还会自动删除
AB10&AC10
的内容

现在,我还需要在单元格
AA10
显示Approved并在
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的内容,以便删除时间戳并解锁行以进行编辑,则恢复代码中的两行


希望这有帮助。

您知道范围('A1')的相关信息吗。locked=true?另外,要锁定行,您可以使用
Target.EntireRow.Locked=True
,然后保护工作表。@chester4207看起来您根本不需要2个宏。你试过其他评论中的建议吗?@Siddharth的建议是准确的,但是,如果你不保护床单,你就不会注意到被锁单元格的影响。我的建议是手动解锁工作表中的所有单元格,然后保护工作表并运行代码。这将使您的其他行仍然可以编辑。要获得一个受保护的工作表,其中您希望动态更改锁定的单元格,您首先需要使用参数
UserInterfaceOnly:=True
(例如
Me.protect Password:=“mypass”,UserInterfaceOnly:=True
)来保护工作表。这需要作为
工作表_Activate
工作簿_Open
事件的一部分来完成,因为
UserInterfaceOnly
设置不会与工作簿一起保存。唯一的另一种选择是在每次希望添加更多锁定单元格时取消保护并重新保护工作表。