我有一本工作簿,里面有很多封面,然后是后面的一堆包含一些图表的表格。图形页面是通过一遍又一遍地复制粘贴一张表(“MasterFormat”)创建的,每次都更改一些关键值。
该宏最初用于相当快地出现Copy Method of Worksheet Class failed
错误。我最终从http://support.microsoft.com/kb/210684找到了解决方法。
问题是,我的更新版本遇到了无穷无尽的问题。主要是它继续愉快地运行,但一段时间后实际上并没有复制任何东西。之所以高兴的部分原因是更新后的逻辑包含几个Set x = y, if x is nothing then
s,(据我所知)仅适用于抑制错误,所以这就是我所做的。但另一方面,它在有 50 张纸后停止复制,并且没有给出任何解释(尽管这可能是 的位置错误on error goto 0
)。
有谁知道我应该修复什么才能让它真正复制所有的工作表,而不仅仅是感到无聊并停下来?
代码如下:
Sub GenerateSheets()
Application.ScreenUpdating = False
Dim oBook As Workbook
On Error Resume Next
Set oBook = Workbooks("SSReport.xls")
If oBook Is Nothing Then
Set oBook = Application.Workbooks.Open("SSReport.xls")
End If
On Error GoTo 0
Dim i, j As Integer
Dim SheetName As String
Dim ws As Worksheet
Const PairingCount = 63
Dim Pairings(1 To PairingCount, 1 To 2) As String
For i = 1 To PairingCount
Pairings(i, 1) = oBook.Sheets("SSPairings").Rows(i + 1).Cells(1)
Pairings(i, 2) = oBook.Sheets("SSPairings").Rows(i + 1).Cells(2)
Next i
For i = 1 To PairingCount
If i Mod 5 = 0 Then
oBook.Close SaveChanges:=True
Set oBook = Nothing
Set oBook = Application.Workbooks.Open("SSReport.xls")
End If
Application.ScreenUpdating = False
j = oBook.Worksheets.Count
SheetName = "P" & Pairings(i, 1) & Pairings(i, 2)
On Error Resume Next
Set ws = oBook.Sheets(SheetName)
If ws Is Nothing Then
On Error GoTo 0
oBook.Sheets("MasterFormat").Copy After:=Sheets(j)
oBook.Sheets("MasterFormat (2)").Name = SheetName
End If
oBook.Sheets(SheetName).Cells(1, 2) = Pairings(i, 1)
oBook.Sheets(SheetName).Cells(1, 5) = Pairings(i, 2)
oBook.Sheets(SheetName).Cells(1, 8) = "P"
Next i
Application.ScreenUpdating = True
End Sub
它是从元工作簿运行的,这是我上面链接到的知识库文章的建议。有趣的是,尽管Open workbook
没有打开主工作簿,但它似乎并没有真正起作用。