当前位置: 首页 > 知识库问答 >
问题:

使用不同于工作表的密码输入文本后,将单元格锁定在一个范围内

公孙琛
2023-03-14

我是excel VBA的新手,我到处都找不到我的答案。在我的工作表“后续日志”中,我希望A1:A70范围内没有文本的单元格允许用户编辑(然后在更改后自动锁定),而那些有文本的单元格始终受到密码保护。我也希望范围使用不同的密码与工作表,并为用户输入密码,任何时候,他们希望编辑与范围内的文本单元格。

我使用的当前代码在输入文本后锁定单元格,但它改变了工作表密码,而不仅仅是单元格,而且只输入一次密码。这有道理吗?下面是我使用的代码:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim blnUnlockedAllCells As Boolean
Const RangeToLock As String = "A2:A70" '<<  adjust to suit

If Target.Cells.Count > 1 Then Exit Sub

If Not blnUnlockedAllCells Then
    Me.Cells.Locked = False
    On Error Resume Next
    Me.Range(CStr(RangeToLock)).SpecialCells(2).Locked = True
    On Error GoTo 0
    blnUnlockedAllCells = True
    Me.Protect Password:="pwd", userinterfaceonly:=True
End If

If Not Application.Intersect(Target, Me.Range(CStr(RangeToLock))) Is Nothing Then
    If Len(Target) Then Target.Locked = True
End If

共有1个答案

杨阳飇
2023-03-14

您不需要锁定它们。我只是录制了这个宏,以了解如何在多个范围内进行操作:

With ActiveSheet
    .Protection.AllowEditRanges.Add Title:="Range1", Range:=.Range("G8:J10"), Password:="qq"
    .Protection.AllowEditRanges.Add Title:="Range2", Range:=.Range("K11:L12"), Password:="aa"
End With

但请记住,如果该人知道如何打开代码窗口,他们将很容易看到您的密码。

 类似资料:
  • 我想在工作簿工作表中选择特定范围的单元格。我目前能够将一个变量设置为下面一行的工作簿工作表。 我想更进一步,能够在工作表中选择一个单元格范围,这样我就可以在定义的范围内练习数据帧功能。我的某些范围的行值大于1000。如何为所需excel范围选择可变长度行值?

  • 嗨,我需要移动每行(扫描)中的一个单元格范围,这些单元格包含特定列(在我的情况下可以是任何列,但在我的代码中是coln“e”)中的一个单元格,该值以文本字符串L开始。以下是我所尝试的(我是VBA新手)。在本例中,我希望将移动到,其中是行号。

  • 我来自VB背景,在实现工作表的脚本解决方案时遇到了一些困难,我想这个函数相当基本,但还不确定如何在JS中表达它。目标是循环遍历一个范围内的每个单元格(工作表1,Q3: Q1000),获取该范围内单元格具有值“TRUE”的行号,复制/剪切工作表1上符合该限定条件的每行的全部内容(或者简单地存储这些值并跳过复制/粘贴步骤),将这些值粘贴到单独工作表(Sheet2)上的第一个未使用的行,然后删除Shee

  • 我想为一些地图实现编写一个基准测试,包括一个自定义实现。我想测试它在广泛的输入范围内的平均行为。 因为这是我第一次使用JMH,所以使用@Param看起来是显而易见的选择。但事实证明,JMH不会在一个基准测试中使用所有这些不同的输入,而是会为每一组参数运行单独的基准测试。 是否有一些我缺少的功能,或者只是在我的基准测试中循环输入的范围,这是正确的做法? 更新: 我实现了2个不同的基准,给出了完全相反

  • > sheet1:用户单击运行VBA的按钮。 第2:VBA选择第D列上的第一个非空白单元格 Range(“d”&rows.count).end(xlUp).offsed(1).select 多谢!