gpt4 book ai didi

vba - 防止用户删除特定工作表

转载 作者:行者123 更新时间:2023-12-02 00:35:00 25 4
gpt4 key购买 nike

保护工作簿结构将阻止用户删除工作表。但是我如何(使用 VBA)阻止用户删除我指定的特定工作表?我见过一些示例,其中事件工作表被阻止删除

Set mymenubar = CommandBars.ActiveMenuBar
mymenubar.Controls("Edit").Controls("Delete sheet").Visible = False

在其 Worksheet_Activate 事件中,但当然只有在激活工作表时才有效。
有没有办法防止工作表被删除,无论是否处于事件状态?
为了清楚起见:我同意用户删除一些工作表,但不删除几个特定的​​工作表。
因此保护工作簿结构不起作用。

最佳答案

据我所知,不可能将单个工作表本身标记为不可删除;并且没有可用于检测工作表何时将被删除的事件,以便可以预防性地保护工作簿。

但是,这是一种可能的解决方法:

  1. 保护工作簿结构:正如您所指出的,这将防止删除所有工作表。
  2. 创建一个“控件”工作表。在此工作表上,维护所有工作表名称的列表(您不希望删除的工作表名称除外)。
  3. 如果用户想要删除某个工作表,他们必须在“控件”工作表(例如在数据验证下拉菜单中)选择其名称,然后按“删除”按钮。此按钮将调用一个宏,暂时取消对工作簿的保护,删除选定的工作表,然后重新保护工作簿。

当然,用户必须习惯这种删除工作表的方式(而不是右键单击工作表选项卡上的“删除”)。不过,这并不复杂。

至于如何实现#2,即维护工作表名称列表,我想您可以使用像这样的 UDF(必须称为数组公式):

Function DeletableSheetNames() As String()
Application.Volatile
Dim i As Long
Dim sn() As String
With ThisWorkbook
ReDim sn(1 To .Sheets.Count)
For i = 1 To .Sheets.Count
With .Sheets(i)
If .Name = "DataEntry1" Or .Name = "DataEntry2" Then
'Don't include it in the list.
Else
sn(i) = .Name
End If
End With
Next i
End With
DeletableSheetNames = sn
End Function

关于vba - 防止用户删除特定工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23645870/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com