Excel 2013 VBA Sheets.Add没有返回新工作表?

时间:2014-05-28 22:53:58

标签: excel vba excel-vba excel-2013

所以我的代码工作正常,直到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 2013验证您是否发生了这种情况,并且我在这里没有遗漏任何东西。

由于

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

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

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

1 个答案:

答案 0 :(得分:1)

我注意到如果我在创建工作簿和添加第二个工作表之间的任何地方添加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)