Excel 2013 VBA Sheets.Add不会返回新工作表?

所以我的代码工作正常,直到IT升级到Excel 2013和SDI接口。 现在看起来像Sheets.Add函数不会返回正确的工作表。 该模板被添加到正确的工作簿(Template1),但是当我使用返回的工作表时,它将在运行所有VBA代码之前引用活动工作簿中的工作表。

Public Function Worksheet_AddTemplate(TargetBook As Excel.Workbook, _ TemplateFile as String) As Excel.Worksheet Dim ws As Excel.Worksheet Debug.Print TargetBook.Name 'Output-->Template1 Set ws = TargetBook.Sheets.Add( _ After:=TargetBook.Sheets(TargetBook.Sheets.Count), _ Type:=TemplateFile) Debug.Print ws.Parent.Name 'Output-->Book1 Set Worksheet_AddTemplate = ws Set ws = Nothing End Function 

其他人可以使用Excel 2013validation这是否发生在您身上,而且这里没有我错过的东西。

谢谢

PS我使用类似的例程创build模板工作簿/第一张没有问题。

编辑:该代码正在从加载项调用。 下面是我如何调用函数,或多或less(我已经简化了例程,因为否则它会太长)

 Private Sub ImportDataFile() Dim wb As Excel.Workbook Dim ws As Excel.Worksheet Dim sUnit As String, sTemplateFile As String Dim u As Integer, nUnits As Integer Application.ScreenUpdating = False Application.EnableEvents = False ' ...Some setup stuff that I wont bother you with sTemplateFile = Environ("Temp") & "\Template1.xlt" For u = 0 To nUnits - 1 If wb Is Nothing Then Set wb = Workbook_NewTemplate(sTemplateFile) Set ws = wb.Worksheets(1) Else Set ws = Worksheet_AddTemplate(wb, sTemplateFile) End If ws.range("H6") = sUnit ' More Loops & writing to cells For i = 0 To g_Data(f).ItemCount - 1 ' Blah, blah, blah Next Next Application.ScreenUpdating = True Application.EnableEvents = True End Sub 

我注意到,如果在创build工作簿和添加第二个工作表之间的任何地方添加2个DoEvents ,它将像以前一样工作。

此外,如果我在Worksheet_AddTemplate函数中使用此代码似乎工作…

 Set wb = Application.Workbooks.Add(Template:=TemplateFile) Set ws = wb.Worksheets(1) ws.Copy After:=TargetBook.Sheets(TargetBook.Sheets.Count) Set ws = TargetBook.Sheets(TargetBook.Sheets.Count)