2011-02-17 8 views
1

VBA를 사용하여 Excel 통합 문서에서 파일 액세스 모드를 변경하는 데 문제가 있습니다. Office 2010을 사용하고 있습니다.Excel VBA Workbook.ChangeFileAccess

적절한 경우 읽기 전용 모드와 읽기 쓰기 모드를 교대로 사용하고 싶습니다. 그러나 통합 문서를 읽기/쓰기에서 읽기 전용으로 변경 한 다음 다시 아래 코드 에서처럼 통합 문서 개체의 모든 구성원에 액세스하려고하면 자동화 오류가 발생합니다.

Public Sub example() 

Dim w As Workbook 

    'open workbook with write access 
    Set w = Workbooks.Open("example.xlsx", ReadOnly:=False) 
    Debug.Print w.Name 'sucessfully accesses members of w 

    'change file access to read only 
    w.ChangeFileAccess XlFileAccess.xlReadOnly 
    Debug.Print w.Name 'successfully accesses members of w 

    'change file access back to read/write 
    w.ChangeFileAccess XlFileAccess.xlReadWrite 
    Debug.Print w.Name 'fails to access members of w with automation error 

End Sub 

왜 이런지 이해가되지 않습니다. 통합 문서를 읽기 전용으로 열고 쓰기 쓰기로 변경 한 다음 해당 개체를 계속 사용하는 것이 분명 완벽하게 가능합니다. 왜이 상황이 다른가요? MSDN에서이 동작에 대한 언급을 찾을 수 없습니다.
http://msdn.microsoft.com/en-us/library/ff193344.aspx

내가하려는 것처럼 파일 액세스 모드를 변경할 수 있습니까?

답변

1

Excel이 읽기/쓰기 상태를 변경하는 방식으로 흥미로운 것을 발견했다고 생각합니다. 통합 문서를 읽기 전용에서 읽기/쓰기로 전환하기 위해 Excel은 해당 통합 문서를 닫고 다시 엽니 다. 이 과정에서 개체 참조가 이상하게 깨졌습니다. 당신은 줄을 추가하는 경우 : ChangeFileAccess 그것을 다시 특권 다음 xlReadWrite하는 후

Set w = Workbooks("example.xlsx") 

을하지만, 정확히 적합하지 않습니다.

크리스 확실히 작동

+0

하지만 당신은 이상적인 거리가 멀다 맞아 - 내 실제 코드에서 나는 상태를 변경 지점에서 쉽게 접근 할 수없는 흩어져 참조를 가지고있다. 또한 Workbooks.Open을 사용하여 통합 문서를 읽기 전용으로 연 다음 파일 액세스를 읽기 쓰기로 변경하면 참조가 유효합니다. –

+0

예, 읽기 - 쓰기 방향 만 다시 열립니다. :( –

+0

이 예제는 그 방향으로 가고 있지만 작동합니다 - –