2013-06-12 5 views
0

파일을 여러 개 Excel 워크 북을 열고 마스터 파일로 복사하는 롤업 파일이 있습니다. 이 프로그램은 몇 달 동안 잘 실행되었지만 몇일 동안은 파일을 열 때 실패했습니다. 다음과 같은 오류 메시지가 나타납니다.VBA 파일을 열 수 없습니다.

런타임 오류 '1004':

파일 형식 또는 파일 확장자가 유효하지 않기 때문에 엑셀 파일 "filename.xlsm"를 열 수 없습니다. 파일이 손상되지 않았는지, 파일 확장명이 파일 형식과 일치하는지, 파일 확장명이 파일 형식과 일치하는지 확인하십시오.

디버그를 누르고 프로그램을 계속 실행하면 파일이 문제없이 열립니다. 프로그램을 다시 시작하면 파일을 열지 못하지만 그 파일은 절대 열리지 않습니다. 내가 그 (것)들로 들어가고 파일 연장이 정확한 때 실패 할 통합 문서에 어떤 문제든지 찾아 낼 수 없다. 현재 통합 문서에있는 것이 있는지 확인하기 위해 오류 처리 기능이 있으므로 생각할 수 없습니다.

도움이 되시길 바랍니다. 감사합니다.

If Not FileLocked(CStr(FoundFiles(iIndex))) Then 
    On Error GoTo contentErr 
    Workbooks.Open FoundFiles(iIndex) ', UpdateLinks:=xlUpdateLinksNever 
    On Error GoTo 0 
    Application.Run ("'Auto Update Roll-Up.xlsm'!Update") 
    With Workbooks(tempvar(iIndex - 1)) 
     .Close False 
     LogInformation ("Completed " & tempvar(iIndex - 1) & " at " & Now) 
     'Application.EnableEvents = False 
     '.Close True 
     'Application.EnableEvents = True 
    End With 
End If 
Continue: 
Next iIndex 
On Error Resume Next 
DisplayAlerts = False 
Workbooks("Brickman Roll-Up Template.xlsm").Close savechanges:=True 
'Workbooks("Brickman Roll-Up Template Test.xlsm").Close savechanges:=True 
SetAttr rollupPath, vbReadOnly 
Workbooks("Auto Update Roll-Up.xlsm").Close savechanges:=False 
DisplayAlerts = True 
LogInformation ("Program ended at " & Now) 
Application.Quit 

contentErr: 
If Err.Number = 1004 Then 
    LogInformation ("_______There is unreadable content in " & Chr(34) & tempvar(iIndex  - 1) & Chr(34) & "_______") 
    GoTo Continue 
End If 
End Sub 



Function FileLocked(strFileName As String) As Boolean 
On Error Resume Next 
' If the file is already opened by another process, 
' and the specified type of access is not allowed, 
' the Open operation fails and an error occurs. 
Open strFileName For Binary Access Read Write Lock Read Write As #1 
Close #1 
' If an error occurs, the document is currently open. 
If Err.Number <> 0 Then 
    ' Display the error number and description. 
    LogInformation ("Couldn't open " & strFileName & " because it is already checked out.") 
    FileLocked = True 
    Err.Clear 
End If 
End Function 

오류가 Workbooks.Open의 FoundFiles (iIndex가)

+0

추가? 그 기능에 문제가 있습니다 ... –

답변

0

이 문제는 통합 문서를 정의 된 이름을 줄 때 발생 먼저 저장하지 않고 워크 시트를 여러 번 복사 할 수 있습니다 라인에 발생하고 통합 문서를 닫기 다음 샘플 코드에서와 같이 :

Sub CopySheetTest() 
    Dim iTemp As Integer 
    Dim oBook As Workbook 
    Dim iCounter As Integer 

    ' Create a new blank workbook: 
    iTemp = Application.SheetsInNewWorkbook 
    Application.SheetsInNewWorkbook = 1 
    Set oBook = Application.Workbooks.Add 
    Application.SheetsInNewWorkbook = iTemp 

    ' Add a defined name to the workbook 
    ' that RefersTo a range: 
    oBook.Names.Add Name:="tempRange", _ 
     RefersTo:="=Sheet1!$A$1" 

    ' Save the workbook: 
    oBook.SaveAs "c:\test2.xls" 

    ' Copy the sheet in a loop. Eventually, 
    ' you get error 1004: Copy Method of 
    ' Worksheet class failed. 
    For iCounter = 1 To 275 
     oBook.Worksheets(1).Copy After:=oBook.Worksheets(1)   
    Next 
End Sub 

이 문제를 해결하려면 저장하고 다음 샘플 코드와 같이 복사 프로세스가 발생하는 주기적 동안 통합 문서를 닫으려면 :

하위 CopySheetTest() 희미한 iTemp 정수 희미한 oBook으로 통합 문서 으로 희미한 iCounter으로 정수

' Create a new blank workbook: 
iTemp = Application.SheetsInNewWorkbook 
Application.SheetsInNewWorkbook = 1 
Set oBook = Application.Workbooks.Add 
Application.SheetsInNewWorkbook = iTemp 

' Add a defined name to the workbook 
' that RefersTo a range: 
oBook.Names.Add Name:="tempRange", _ 
    RefersTo:="=Sheet1!$A$1" 

' Save the workbook: 
oBook.SaveAs "c:\test2.xls" 

' Copy the sheet in a loop. Eventually, 
' you get error 1004: Copy Method of 
' Worksheet class failed. 
For iCounter = 1 To 275 
    oBook.Worksheets(1).Copy After:=oBook.Worksheets(1) 
    'Uncomment this code for the workaround: 
    'Save, close, and reopen after every 100 iterations: 
    If iCounter Mod 100 = 0 Then 
     oBook.Close SaveChanges:=True 
     Set oBook = Nothing 
     Set oBook = Application.Workbooks.Open("c:\test2.xls") 
    End If 
Next End Sub 

소스 - 당신이 명확히 경우 "MSDN"

+0

내 상황에 적용되지 않는 것으로 생각합니다. 통합 문서를 열 때 얻는 오류가 아니라 통합 문서를 복사하는 중입니다. 아파치 내 원래 게시물에 일부 코드를 추가하십시오. – user2478665

0

당신은 더 나은 도움을받을 수 있습니다 및/또는 더 많은 코드를 게시하십시오. 구체적으로 : 1) 메인 루틴의 Workbooks.Open 또는 FileLocked 함수의 Open에서 오류가 발생합니까? 2) FoundFiles() (열기에 사용)과 tempvar() (닫기에 사용) 사이의 관계는 무엇입니까? 이 배열/변수를 어떻게 설정하고 있습니까?

내 정보가 없으면 여기에 내 제안이 있습니다. iIndex 루프에서 Workbook 변수를 사용하십시오.그래서, 루프 전에

Workbooks.Open FoundFiles(iIndex) 

사용하는 대신 다음

Set wbLoop = Workbooks.Open(FoundFiles(iIndex)) 

Dim wbLoop as Workbook 

를 추가하고 대신

With Workbooks(tempvar(iIndex - 1)) 

사용

를의

그리고

With wbLoop 
귀하의 경우에는 블록을 닫기 전에,`FoundFiles` 다음 무엇

Set wbLoop = Nothing 
+0

오류가 발생하는 줄은 Workbooks.Open FoundFiles (iIndex), tempvar = FoundFiles (iIndexs)입니다.이 방법으로이 작업을 수행 한 이유를 알지 못합니다. 코드, 솔기가 완전히 불필요합니다. 그래도 나는 어떤 식 으로든 해결되었습니다. 파일이 호스팅되는 서버의 내 핑이 때로는 시간 초과됩니다. 프로그램이 파일을 열려고 할 때 서버가 응답하지 않을 가능성이 가장 높습니다. – user2478665