2012-12-27 4 views
3

Excel 2003 VBA 프로젝트에서 MSCOMCTL.OCX의 컨트롤을 사용하고 있습니다. VBA 프로젝트에는 System32 \ MSCOMCTL.OCX에 대한 참조가 있습니다.64 비트 Windows 7에서 Excel 2003이 자동으로 32 비트 Excel에서 불만을 나타낼 수 있도록 SysWOW64 MSCOMCTL.OCX에 대한 참조를 변경합니다

Excel 2003에서 내 64 비트 Windows 7 시스템에서 해당 프로젝트를 열면 Excel에서 자동으로 SysWOW64 \ MSCOMCTL.OCX (올바른 위치) 참조를 변경합니다.

그러나 32 비트 Windows XP를 사용하는 클라이언트에게 프로젝트를 보내면 SysWOW64 \ MSCOMCTL.OCX가 시스템에 없기 때문에 프로젝트가 열리는 동안 불평을합니다. 여기

는 지금까지 해낸 (불만족) 솔루션입니다 :

  1. 수동으로 자신의 시스템 (SYSTEM32 \ MSCOMCTL.OCX)의 올바른 위치로 다시 참조를 변경할 수있는 클라이언트를 지시한다.

    • 이 정말 다음과 같은 이유로 작동하지 않습니다 Excel에서 32 비트 시트를 열고 2003 년과는 MSCOMCTL에 대한 참조를 찾을 수없는 경우 이 , 그것은 도서관에서 온 모든 컨트롤을 제거
      1. (예 :
      2. 클라이언트 :-(형태에서 TreeCtrl)는 절차 어려움을 겪고 있으며 그를 위해 매우 복잡합니다. 자동
  2. 은 VBA의 VB를 사용하여 참조를 수정 Project.References.AddFromFile/AddFromGuid.
    • 위와 같은 문제 : 통합 문서를 여는 동안 VBA를 컴파일하지 못하면 양식에서 찾을 수없는 모든 컨트롤이 제거됩니다.
  3. 자동으로 참조를 추가하고 (2와 같이) 동적 바인딩을 사용하여 런타임 중에 모든 관련 컨트롤을 추가합니다.
    • 이 실제로 그러나 현재 내가 컨트롤에 이벤트 처리기를 바인딩 고민하고, 일할 수있는 (하지만 별도의 질문 ;-)

1. 접근 2. 정말 안 될 것입니다 무엇이든 해결하고 해결책 3은 많은 작업입니다.

모든 아이디어는 크게 감사하겠습니다.

답변

1

통합 문서를 닫을 때 자동으로 참조가 해제 된 경우 어떻게해야합니까? 그런 식으로 통합 문서를 열면 참조가 '깨지지'않을 것이고 모든 제어는 여전히 양호해야합니다.

즉 :

나는 ADODB DLL을 가진 빠른 테스트를했고, 그것을 작동 듯,하지만 난 당신이 사용하는 방법을 잘 모르겠습니다
Private Sub Workbook_Open() 
'use environ variable for folder locs 
If os = "64bit" Then 
    Me.VBProject.References.AddFromFile ("C:\WINDOWS\SysWOW64\MSCOMCTL.OCX") 
Else 
    Me.VBProject.References.AddFromFile ("C:\WINDOWS\system32\MSCOMCTL.OCX") 
End If 
End Sub 

Private Sub Workbook_BeforeClose(Cancel As Boolean) 
    For Each ref In Me.VBProject.References 
     If ref.Name = "MSComctlLib" Then 
     Me.VBProject.References.Remove ref 
     End If 
     Next ref 
End Sub 

그 DLL 특히; 그게 효과가 있다면 알려줘! 옵션 3보다 훨씬 좋습니다!