2009-12-15 4 views
2

VBA에서 IFileOpenDialog 및 IFileSaveDialog를 어떻게 호출합니까?VBA의 IFileOpenDialog 및 IFileSaveDialog

Microsoft에 따르면 Windows 7 이상용으로 작성된 응용 프로그램은 GetOpenFileName/GetSaveFileName (Using the Common File Dialog 참조) 대신 IFileOpenDialog/IFileSaveDialog API 호출을 사용해야합니다. 이는 전체 라이브러리 지원에 특히 중요합니다.

답변

4

간단한 답변 : 노력하지 않아도 될 것 같습니다.

길게 대답 : CFD 인터페이스는 IDispatch를 확장하지 않으므로 VBA에서 지연 바인딩을 통해 호출 할 수 없습니다. 그렇다고 VBA에서 호출 할 수 없다는 의미는 아니지만 IUnknown 기반 CFD 인터페이스의 "모양"을 설명하는 typelib이 필요하다는 의미입니다. 불행히도 Microsoft는 typelib에 CFD 인터페이스 정의를 제공하지 않습니다. 헤더 파일을 리버스 엔지니어링하여 (또는 SDK에서 원래 IDL을 찾으려고) 사용자 정의 typelib을 굴릴 수 있지만 사용하려는 모든 컴퓨터에 해당 typelib을 등록해야합니다. COM 물건에 대한 regsvr32와 달리, 기계에 선적되지 않습니다. 모든 것을했다고 가정하면 VBA에서 typelib을 참조하고 Vista 또는 상위 OS에서 조건부로 호출 할 수 있습니다. 또한 System.Windows.Forms.FileDialog 파생 형식을 만들고 결과를 VBA로 마샬링하는 작은 .NET 어셈블리를 통해 심 볼 수도 있습니다. 훨씬 더 쉬울 지 모르지만 여전히 등록해야합니다. 모든 컴퓨터의 어셈블리 (또는 관리되는 DLL 함수를 내보내는 데 C++/CLI 또는 기타 해킹 사용)가 필요하며 .NET 종속성이 필요합니다.

그들은 확실히 쉽게하지 못했습니다 ... :) 행운을 빌어 요!