我有一个按钮,用于提示输入并创建新选项卡。第一次运行效果很好,但后续运行会抛出此错误:
以下是代码:
Sub btnAddProject()
Dim template As Worksheet
Dim newSheet As Worksheet
Dim newName As String
newName = Application.InputBox("Enter Project Name") 'get name
Worksheets("Template").Visible = True 'Unhide template
Set template = ActiveWorkbook.Sheets("Template") 'identify template
template.Copy After:=Sheets(Sheets.Count) 'create copy
Set newSheet = ActiveSheet 'identify new sheet
newSheet.Name = newName 'rename sheet
'deleteNames (newSheet.Name) 'delete copied named ranges with worksheet scope
newSheet.Range("D2").Value = newName 'Change header on new sheet
Worksheets("Template").Visible = False 'Hide template
Worksheets("Consolidated Grid").Activate 'switch back to dashboard
updateProjectIndex (newName)
End Sub
错误被抛出newSheet.Name = newName
,它给我留下了一个名为“模板(2)”的工作表
是什么原因造成的?
如果相关的话,这里是子程序updateProjectIndex
,它基本上只是在项目列表中添加了一个新行(在两处):
Sub updateProjectIndex(newName)
Application.ScreenUpdating = False
Sheets("Dashboard").Select
ActiveSheet.Rows(12).Select
Selection.Copy
Selection.Insert Shift:=xlDown
ActiveSheet.Range("B13").Value = newName
Sheets("Consolidated Grid").Select
ActiveSheet.Columns("F:F").Select
Selection.Copy
Selection.Insert Shift:=xlRight
ActiveSheet.Range("G1").Value = newName
Sheets("Dashboard").Select
ActiveSheet.Range("B13").Select
Application.ScreenUpdating = True
End Sub
答案1
您的代码对我来说很好用,尽管我必须删除额外的子调用(所以我删除了updateProjectIndex(newName)
ANDWorksheets("Consolidated Grid").Activate
要进行调试,请在电脑上的新 Excel 中尝试此代码,以查看问题是否与该工作簿或 Excel 相关
问题出在事件代码中
尝试注释掉这两行代码,看看问题是否仍然存在。如果没有问题,请逐个取消注释,直到看到错误为止,然后通过这种方式消除错误。
我建议您使用文件副本来执行此操作,以便您可以随意破坏它!
答案2
我想我明白了,尽管我不确定为什么。我的Workbook_Open
子目录中有以下代码:
Worksheets("Dashboard").Activate
If InStr(Application.ActiveWorkbook.Path, "sharepoint.com") Then
Range("1:1").Select
Selection.EntireRow.Hidden = True
Else
Range("1:1").Select
Selection.EntireRow.Hidden = False
End If
目的是确保人们知道他们正在打开离线版本。我猜想冲突出在Worksheets.Activate
这里?也许有人可以解释一下。
不管怎样,删除它似乎已经 100% 解决了问题。
更新:替换了所有代码,但.Activate
它仍然有效。我猜从其自己的 Workbook_Open 例程激活工作簿会导致某种循环?