我希望更新以下代码,并根据“输入”选项卡中的输入来限制模板被复制和重命名的次数。应该只有2个副本,如果有人尝试创建第3个副本,则会弹出一条消息,提示“您只能创建2个标签”。现有代码如下:
我是一个初学者,所以在代码的某些部分上获得了一些帮助,并且不确定如何进一步进行此操作
Sub scorecard()
Dim A, B As String
Dim lgn, col As Integer
A = ActiveSheet.Cells(8, 5).Value & "_" & ActiveSheet.Cells(9, 5).Value
B = ActiveSheet.Name
On Error Resume Next
Application.ScreenUpdating = False
Sheets(A).Select
If ActiveSheet.Name = A Then
Sheets(B).Select
Application.ScreenUpdating = True
MsgBox ("This name already exists")
Else
Sheets("Template").Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = A
答案 0 :(得分:0)
如果要阻止用户创建一定数量的相同名称的工作表,则需要使用Workbook events。
我认为SheetActivate
应该可以解决问题。
最简单的方法是在项目中的ThisWorkbook
下工作,该项目位于Microsoft Excel Objects文件夹中。
从这里,您可以在左侧的下拉菜单中选择Workbook
对象,然后在右侧的下拉列表中选择SheetActivate
事件。
每次发生此事件时,我们都希望调用一个函数来检查名称是否匹配以及在您的情况2下名称是否超过了您的最大限制。
这是事件,我们希望将Sh
引用传递给我们的函数。
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
LimitNumberOfMatchingSheets Sh
End Sub
这是我们创建的用于检查匹配名称和最大值的函数。
如果确实满足这些条件,则只需向用户发送消息并删除新创建(或复制的)工作表即可。
Private Sub LimitNumberOfMatchingSheets(ByRef sheet As Worksheet)
Const sheetName As String = "Sheet1"
Const maxLimit As Long = 2
'If name matches and max is reached then delete new worksheet
If InStr(sheet.Name, sheetName) > 0 _
And MatchingSheetNameCount(sheetName, ThisWorkbook) > maxLimit Then
'I would put a better description here.
MsgBox "This name already exists"
'Disable the users ability to cancel the deletion.
Application.DisplayAlerts = False
sheet.Delete
Application.DisplayAlerts = True
End If
End Sub
最后一个帮助程序功能,用于检查匹配的工作表名称的数量。
Private Function MatchingSheetNameCount(ByVal likeName As String, ByVal book As Workbook) As Long
Dim sheet As Worksheet
For Each sheet In book.Worksheets
If InStr(sheet.Name, likeName) > 0 Then
MatchingSheetNameCount = MatchingSheetNameCount + 1
End If
Next sheet
End Function