Excel 2013 VBA 工作表.添加不返回新工作表?



所以我的代码工作得很好,直到IT将我升级到Excel 2013和SDI接口。现在它看起来像床单。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 2013是否发生了这种情况,并且我在这里没有遗漏什么。

感谢

注:我使用类似的例程来创建模板工作簿/第一个工作表,没有任何问题。

编辑:代码正在从外接程序调用。以下是我调用Function的方式,或多或少(我简化了例程,因为否则它会太长)

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

我注意到,如果我在创建工作簿和添加第二张工作表之间添加2x 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)

最新更新