私は、いくつかのグラフを含む多数のカバー シートと、背面にある多数のシートを含むワークブックを持っています。グラフ ページは、1 つのシート (「MasterFormat」) を何度もコピーして貼り付け、毎回いくつかのキー値を変更することによって作成されます。
マクロはもともと、かなり迅速にCopy Method of Worksheet Class failed
エラーを発生させていました。最終的にhttp://support.microsoft.com/kb/210684から修正方法を見つけました。
問題は、更新されたバージョンで際限なく問題が発生したことです。ほとんどの場合、問題なく実行され続けますが、しばらくすると実際には何もコピーされません。嬉しい理由の 1 つは、更新されたロジックにいくつか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
これは、上記でリンクした KB 記事の提案であるメタ ワークブックから実行されます。興味深いことに、Open workbook
メインのワークブックが開いていない場合、実際には機能しないようです。