통합 문서가 50 워크 시트를 때릴 때 워크 시트 복사 매크로가 무엇이든 중지됩니다.

StackOverflow https://stackoverflow.com/questions/823717

문제

나는 많은 커버 시트가있는 통합 문서와 뒷면에 몇 개의 그래프가 포함 된 많은 시트가 있습니다. 그래프 페이지는 하나의 시트 ( "mas

원래 매크로는 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, 메인 통합 문서가 열려 있지 않으면 실제로 작동하지 않는 것 같습니다.

도움이 되었습니까?

해결책

오류는 아마도이 줄로 인해 발생할 수 있습니다.

oBook.Sheets("MasterFormat").Copy After:=Sheets(j)

그만큼 Sheets(j) 코드 모듈이있는 통합 문서를 참조하여 의도 된 통합 문서가 아닐 수도 있습니다.

다음은 저를 위해 작동합니다.

Sub GenerateSheets()
Dim oBook As Workbook
Dim i As Long
Dim j As Long
Dim SheetName As String
Dim ws As Worksheet
Const PairingCount = 63
Dim Pairings(1 To PairingCount, 1 To 2) As String

On Error Resume Next
Set oBook = Workbooks("SSReport.xls")
On Error GoTo 0
If oBook Is Nothing Then
    Set oBook = Application.Workbooks.Open("SSReport.xls")
End If

With oBook
    For i = 1 To PairingCount
        Pairings(i, 1) = .Sheets("SSPairings").Rows(i + 1).Cells(1)
        Pairings(i, 2) = .Sheets("SSPairings").Rows(i + 1).Cells(2)
    Next i

    For i = 1 To PairingCount
        If i Mod 5 = 0 Then
            '//Save in case of corruption/error?'
            .Save
        End If

        j = .Worksheets.Count

        SheetName = "P" & Pairings(i, 1) & Pairings(i, 2)

        On Error Resume Next
        Set ws = .Sheets(SheetName)
        On Error GoTo 0
        If ws Is Nothing Then
            .Sheets("MasterFormat").Copy After:=.Sheets(j)
            .Sheets("MasterFormat (2)").Name = SheetName
        End If

        .Sheets(SheetName).Cells(1, 2) = Pairings(i, 1)
        .Sheets(SheetName).Cells(1, 5) = Pairings(i, 2)
        .Sheets(SheetName).Cells(1, 8) = "P"
    Next i
End With
End Sub

나는 The The Close/Reopen을 간단한 것으로 대체 할 자유를 얻었습니다. Save 이것이 동일한 결과를 달성해야합니까?

다른 팁

변경해보십시오

        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"

~ 안으로

     If ws Is Nothing Then
        On Error GoTo 0
        oBook.Sheets("MasterFormat").Copy After:=Sheets(j)
        oBook.Sheets("MasterFormat (2)").Name = SheetName
    else
       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"
    End If

WS가 아무것도 없다면 다음 3 줄에 붙어 있습니다.

Lunatik의 답변을 바탕으로 나는 변경되었습니다 oBook.Sheets("MasterFormat").Copy After:=Sheets(j) 에게 oBook.Sheets("MasterFormat").Copy After:=oBook.Sheets(j), 문제를 해결하는 것 같았습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top