我有一个工作簿,其中包含一些封面,然后是包含几张图的背面一堆工作表。图形页面通过一遍又一遍地复制粘贴一张表格(“MasterFormat”)来创建,每次更改几个关键值。当工作簿命中50个工作表时,复制工作表宏将停止执行任何操作
该宏最初用于相当快地生成一个Copy Method of Worksheet Class failed
错误。我终于找到了如何解决它,从http://support.microsoft.com/kb/210684。
问题是,我用我的更新版本有无尽的问题;主要是它继续愉快地运行,但实际上不会在一段时间后复制任何东西。部分原因是更新后的逻辑包含了几个Set x = y, if x is nothing then
,它们(据我所知)只能在抑制错误的情况下工作,所以这就是我所做的。但是另一方面,在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
它从元的工作簿,这是KB文章我挂上面的建议运行。有趣的是,尽管Open workbook
,如果主工作簿没有打开,它似乎并不工作。
不良形式的位标记自己的答案接受然后,不是? – Lunatik 2009-05-12 08:44:13