我有一个带有小子程序的电子表格,当工作表的选项卡"模板"单击: 1.复制"模板"将它放在原始"模板"之前。片 2.将复制的表格的名称更改为今天的日期(10-13-2016) 3.将单元格B1的内容更改为今天的日期(2016年10月13日,星期四)
下面列出的代码可以解决这些问题。我需要帮助的两件事是: 1.要复制工作表我必须单击另一个工作表,然后单击“#34;模板”#34;片。我希望能够点击"模板"选项卡,并让它创建副本,即使"模板"工作表已经是活动工作表。 2.由于某种原因,VBA代码阻止我删除单击"模板"时创建的选项卡。标签
Private Sub Worksheet_Activate()
Application.EnableEvents = False
If ActiveSheet.Name = "Template" Then
Worksheets("Template").Copy before:=Worksheets("Template")
ActiveSheet.Range("B2").Select
ActiveCell.FormulaR1C1 = Format(Date, "dddd, mmm d, yyyy")
ActiveSheet.Name = Format(Date, "mm-dd-yyyy")
End If
Application.EnableEvents = True
End Sub
我知道这可能很简单,但我无法在任何地方找到任何对此行为的引用。任何和所有的帮助将不胜感激。
答案 0 :(得分:0)
您不会使用Worksheet_Activate()
,因为它会与工作表副本一起复制,因此复制的工作表会生成其他工作表
所以你想使用Workbook_SheetActivate()
事件处理程序
即使这样,你必须要知道,在删除“模板”之前的工作表时,活动工作表变为“模板”(下一个),从而激活克隆程序并使其看起来好像“VBA代码阻止“你”删除标签“
然后在ThisWorkBook代码窗格中输入以下代码:
Option Explicit
Dim nextShtName As String
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim newName As String
If nextShtName = "Template" Then
nextShtName = ""
Else
If Sh.Name = "Template" Then
newName = Format(Date, "mm-dd-yyyy")
If GetSheet(newName) Is Nothing Then
Application.EnableEvents = False
On Error GoTo exitsub
Sh.Copy before:=Worksheets("Template")
With ActiveSheet
.Range("B2").FormulaR1C1 = Format(Date, "dddd, mmm d, yyyy")
.Name = newName
End With
exitsub:
Application.EnableEvents = True
Else
MsgBox "sheet '" & newName & "' already in this workbook", vbInformation
End If
End If
End If
End Sub
Function GetSheet(shtName As String) As Worksheet
On Error Resume Next
Set GetSheet = Worksheets(shtName)
End Function
Private Sub Workbook_SheetBeforeDelete(ByVal Sh As Object)
Dim i As Long
For i = 1 To Worksheets.Count
If Worksheets(i).Name = Sh.Name Then Exit For
Next i
nextShtName = Worksheets(i + 1).Name
End Sub