요약
Microsoft Visual Basic에서 New 연산자 또는 CreateObject 함수를 사용하여 Microsoft Office 애플리케이션의 인스턴스를 만들 때 다음 오류 메시지가 표시될 수 있습니다.
런타임 오류 '429': ActiveX 구성 요소가 개체를 만들 수 없음
이 오류는 COM(Component Object Model)이 요청된 Automation 개체를 만들 수 없고 Automation 개체가 Visual Basic에서 사용할 수 없는 경우에 발생합니다. 이 오류는 모든 컴퓨터에서 발생하지 않습니다.
이 문서에서는 이 오류를 일으킬 수 있는 일반적인 문제를 진단하고 해결하는 방법을 설명합니다.추가 정보
Visual Basic에는 오류 429의 몇 가지 원인이 있습니다. 다음 조건 중 어느 것이라도 true이면 오류가 발생합니다.
-
애플리케이션에 실수가 있습니다.
-
시스템 구성에 오류가 있습니다.
-
누락된 구성 요소가 있습니다.
-
손상된 구성 요소가 있습니다.
오류의 원인을 찾으려면 문제를 격리합니다. 클라이언트 컴퓨터에서 "429" 오류 메시지가 표시되면 다음 정보를 사용하여 Microsoft Office 애플리케이션에서 오류를 격리하고 해결합니다.
참고 다음 정보 중 일부는 Office COM이 아닌 서버에도 적용될 수 있습니다. 그러나 이 문서에서는 Office 애플리케이션을 자동화하려는 것으로 가정합니다.코드 검사
오류를 해결하기 전에 문제를 일으킬 수 있는 한 줄의 코드를 격리해 보세요.
한 줄의 코드로 인해 문제가 발생할 수 있는 경우 다음 절차를 완료합니다.-
코드에서 명시적 개체 만들기를 사용하는지 확인합니다.
문제는 단일 작업으로 좁혀지는지 식별하기 쉽습니다. 예를 들어 다음 중 하나로 사용되는 암시적 개체 만들기를 찾습니다. 코드 샘플 1Application.Documents.Add 'DON'T USE THIS!!
코드 샘플 2
Dim oWordApp As New Word.Application 'DON'T USE THIS!! '... some other code oWordApp.Documents.Add
이러한 두 코드 샘플은 모두 암시적 개체 만들기를 사용합니다. 변수가 한 번 이상 호출될 때까지 Microsoft Office Word 2003이 시작되지 않습니다. 변수는 프로그램의 다른 부분에서 호출될 수 있으므로 문제를 찾기 어려울 수 있습니다. Application 개체를 만들거나 Document 개체를 만들 때 문제가 발생하는지 확인하기 어려울 수 있습니다.
대신 다음과 같이 명시적 호출을 수행하여 각 개체를 별도로 만들 수 있습니다.Dim oWordApp As Word.Application Dim oDoc As Word.Document Set oWordApp = CreateObject("Word.Application") '... some other code Set oDoc = oWordApp.Documents.Add
각 개체를 별도로 만들기 위해 명시적 호출을 수행할 때 문제를 격리하는 것이 더 쉽습니다. 이렇게 하면 코드를 더 쉽게 읽을 수 있습니다.
-
Office 애플리케이션의 인스턴스를 만들 때 New 연산자 대신 CreateObject 함수를 사용합니다.
CreateObject 함수는 대부분의 Microsoft Visual C++ 클라이언트에서 사용하는 생성 프로세스를 밀접하게 매핑합니다. CreateObject 함수는 버전 간에 서버의 CLSID 변경도 허용합니다. 초기 바인딩된 개체와 늦은 바인딩된 개체에서 CreateObject 함수를 사용할 수 있습니다. -
CreateObject에
전달되는 "ProgID" 문자열이 올바른지 확인하고 "ProgID" 문자열이 버전 독립적인지 확인합니다. 예를 들어 "Excel.Application.8" 문자열을 사용하는 대신 "Excel.Application" 문자열을 사용합니다. 실패한 시스템에는 "ProgID" 문자열에 지정한 버전보다 이전 버전의 Microsoft Office 또는 최신 버전의 Microsoft Office가 있을 수 있습니다. -
Erl 명령을 사용하여 성공하지 못한 코드 줄의 줄 번호를 보고합니다. 이렇게 하면 IDE에서 실행할 수 없는 애플리케이션을 디버그하는 데 도움이 될 수 있습니다. 다음 코드에서는 만들 수 없는 Automation 개체(Microsoft Word 또는 Microsoft Office Excel 2003)를 알려줍니다.
Dim oWord As Word.Application Dim oExcel As Excel.Application On Error Goto err_handler 1: Set oWord = CreateObject("Word.Application") 2: Set oExcel = CreateObject("Excel.Application") ' ... some other code err_handler: MsgBox "The code failed at line " & Erl, vbCritical
MsgBox 함수 및 줄 번호를 사용하여 오류를 추적합니다.
-
다음과 같이 지연 바인딩을 사용합니다.
Dim oWordApp As Object
초기 바인딩된 개체는 프로세스 경계를 넘어 사용자 지정 인터페이스를 마샬링해야 합니다. CreateObject 중에 또는 새로 만들기 중에 사용자 지정 인터페이스를 마샬링할 수 없는 경우 "429" 오류 메시지가 표시됩니다. 늦은 바인딩된 개체는 사용자 지정 프록시를 마샬링할 필요가 없는 IDispatch 시스템 정의 인터페이스를 사용합니다. 늦은 바인딩된 개체를 사용하여 이 프로시저가 올바르게 작동하는지 확인합니다.
개체가 초기 바인딩된 경우에만 문제가 발생하면 서버 애플리케이션에 문제가 있습니다. 일반적으로 이 문서의 "Automation Server 검사" 섹션에 설명된 대로 애플리케이션을 다시 설치하여 문제를 해결할 수 있습니다.
자동화 서버 검사
CreateObject 또는 New를 사용할 때 오류가 발생하는 가장 일반적인 이유는 서버 애플리케이션에 영향을 주는 문제입니다. 일반적으로 애플리케이션의 구성 또는 애플리케이션 설정으로 인해 문제가 발생합니다. 문제를 해결하려면 다음 방법을 사용합니다.
-
자동화하려는 Office 응용 프로그램이 로컬 컴퓨터에 설치되어 있는지 확인합니다. 애플리케이션을 실행할 수 있는지 확인합니다. 이렇게 하려면 시작을 클릭하고실행을 클릭한
다음 애플리케이션을 실행합니다. 애플리케이션을 수동으로 실행할 수 없는 경우 애플리케이션은 자동화를 통해 작동하지 않습니다. -
다음과 같이 애플리케이션을 다시 등록합니다.
-
시작을 클릭한 다음 실행을 클릭합니다.
-
실행 대화 상자에서 서버의 경로를 입력한 다음 줄 끝에 /RegServer를 추가합니다.
-
확인을 클릭합니다.
애플리케이션은 자동으로 실행됩니다. 애플리케이션이 COM 서버로 다시 등록됩니다.
레지스트리 키가 없어서 문제가 발생하는 경우 이러한 단계는 일반적으로 문제를 해결합니다.
-
-
자동화하려는 애플리케이션에 대한 CLSID 아래의 LocalServer32 키를 검사합니다. LocalServer32 키가 애플리케이션의 올바른 위치를 가리키는지 확인합니다. 경로 이름이 짧은 경로(DOS 8.3) 형식인지 확인합니다. 짧은 경로 이름을 사용하여 서버를 등록할 필요가 없습니다. 그러나 포함된 공간을 포함하는 긴 경로 이름은 일부 시스템에서 문제를 일으킬 수 있습니다.
서버에 대해 저장된 경로 키를 검사하려면 다음과 같이 Windows 레지스트리 편집기를 시작합니다.-
시작을 클릭한 다음 실행을 클릭합니다.
-
regedit를 입력한 다음 확인을 클릭합니다.
-
HKEY_CLASSES_ROOT\CLSID 키로 이동합니다.
시스템에 등록된 자동화 서버에 대한 CLSID는 이 키 아래에 있습니다. -
CLSID 키의 다음 값을 사용하여 자동화하려는 Office 애플리케이션을 나타내는 키를 찾습니다. 경로에 대한 CLSID 키의 LocalServer32 키를 검사합니다.
Office 서버
CLSID 키
Access.Application
{73A4C9C1-D68D-11D0-98BF-00A0C90DC8D9}
Excel.Application
{00024500-0000-0000-C000-000000000046}
Outlook.Application
{0006F03A-0000-0000-C000-000000000046}
PowerPoint.Application
{91493441-5A91-11CF-8700-00AA0060263B}
Word.Application
{000209FF-0000-0000-C000-000000000046}
-
경로를 확인하여 파일의 실제 위치와 일치하는지 확인합니다.
참고 짧은 경로 이름이 올바르지 않으면 올바르지 않은 것처럼 보일 수 있습니다. 예를 들어 Office와 Microsoft Internet Explorer(기본 위치에 설치되어 있는 경우)에는 C:\PROGRA~1\MICROS~X\와 비슷한 짧은 경로가 있습니다(여기서
X 는 숫자임). 이 이름은 처음에 짧은 경로 이름으로 표시되지 않을 수 있습니다. 경로가 올바른지 확인하려면 다음 단계를 수행합니다.-
시작을 클릭한 다음 실행을 클릭합니다.
-
레지스트리에서 값을 복사한 다음 실행 대화 상자에 값을 붙여넣습니다.
참고 애플리케이션을 실행하기 전에 /automation 스위치를 제거합니다. -
확인을 클릭합니다.
-
애플리케이션이 올바르게 실행되는지 확인합니다.
확인을 클릭한 후 애플리케이션이 실행되면 서버가 올바르게 등록됩니다. 확인을 클릭한 후 애플리케이션이 실행되지 않으면 LocalServer32 키의 값을 올바른 경로로 바꿉니다. 가능하면 짧은 경로 이름을 사용합니다.
-
-
Normal.dot 템플릿 또는 Excel.xlb 리소스 파일의 손상 가능성을 테스트합니다. Word의 Normal.dot 템플릿 또는 Excel의 Excel.xlb 리소스 파일이 손상된 경우 Microsoft Word 또는 Microsoft Excel을 자동화할 때 문제가 발생할 수 있습니다. 이러한 파일을 테스트하려면 Normal.dot 또는 Excel.xlb의 모든 인스턴스에 대한 로컬 하드 디스크를 검색합니다.
참고 이러한 파일의 여러 복사본을 찾을 수 있습니다. 시스템에 설치된 각 사용자 프로필에 대해 이러한 각 파일의 복사본이 하나씩 있습니다. Normal.dot 파일 또는 Excel.xlb 파일의 이름을 일시적으로 바꾼 다음 자동화 테스트를 다시 실행합니다. Word와 Excel은 모두 이러한 파일을 찾을 수 없는 경우 만듭니다. 코드가 작동하는지 확인합니다. 새 Normal.dot 파일을 만들 때 코드가 작동하는 경우 이름을 바꾼 파일을 삭제합니다. 이러한 파일이 손상되었습니다. 코드가 작동하지 않는 경우 이러한 파일에 저장된 사용자 지정 설정을 저장하려면 이러한 파일을 원래 파일 이름으로 되돌려야 합니다. -
관리자 계정으로 애플리케이션을 실행합니다. Office 서버에는 레지스트리 및 디스크 드라이브에 대한 읽기/쓰기 액세스 권한이 필요합니다. 현재 보안 설정에서 읽기/쓰기 액세스를 거부하는 경우 Office 서버가 올바르게 로드되지 않을 수 있습니다.
시스템 검사
시스템 구성으로 인해 Out-of-process COM 서버를 만드는 데 문제가 발생할 수도 있습니다. 문제를 해결하려면 오류가 발생하는 시스템에서 다음 메서드를 사용합니다.
-
Out-of-process 서버에서 문제가 발생하는지 여부를 확인합니다. 특정 COM 서버(예: Word)를 사용하는 애플리케이션이 있는 경우 다른 Out-of-process 서버를 테스트하여 COM 계층 자체에서 문제가 발생하지 않는지 확인합니다. 컴퓨터에서 Out-of-process COM 서버를 만들 수 없는 경우 이 문서의 "Microsoft Office 다시 설치" 섹션에 설명된 대로 OLE 시스템 파일을 다시 설치하거나 운영 체제를 다시 설치하여 문제를 해결합니다.
-
자동화를 관리하는 OLE 시스템 파일의 버전 번호를 검사합니다. 이러한 파일은 일반적으로 집합으로 설치됩니다. 이러한 파일은 빌드 번호와 일치해야 합니다. 잘못 구성된 설치 유틸리티는 파일을 실수로 별도로 설치할 수 있습니다. 이렇게 하면 파일이 일치하지 않습니다. 자동화 문제를 방지하려면 파일을 검사하여 파일 빌드가 일치하는지 확인합니다.
자동화 파일은 Windows\System32 디렉터리에 있습니다. 다음 파일을 검사합니다.File name
버전
수정된 날짜
Asycfilt.dll
10.0.16299.15
2017년 9월 29일
Ole32.dll
10.0.16299.371
2018년 3월 29일
Oleaut32.dll
10.0.16299.431
2018년 5월 3일
Olepro32.dll
10.0.16299.15
2017년 9월 29일
Stdole2.tlb
3.0.5014
2017년 9월 29일
-
시스템 구성 유틸리티(Msconfig.exe)를 사용하여 Office 애플리케이션에서 실행 중인 코드를 제한할 수 있는 타사 애플리케이션
에 대한 서비스 및 시스템 시작을 검사합니다. 네트워크에 연결되지 않은 테스트 시스템에서만 바이러스 백신 프로그램을 일시적으로 사용하지 않도록 설정합니다. 또는 Outlook의 다음 단계에 따라 타사 추가 기능을 사용하지 않도록 설정합니다. 이 메서드가 문제를 해결하는 경우 바이러스 백신 프로그램 업데이트에 대한 자세한 내용은 타사 바이러스 백신 공급업체에 문의하세요.-
파일 메뉴에서 옵션을 클릭한 다음 추가 기능을 클릭합니다.
-
COM 추가 기능 관리를 클릭한 다음 이동을 클릭합니다.
참고 COM 추가 기능 대화 상자가 열립니다. -
타사 추가 기능에 대한 확인란의 선택을 취소한 다음 확인을 클릭합니다.
-
Outlook을 다시 시작합니다.
-
Office 다시 설치
이전 절차 중 어느 것도 문제를 해결하지 못하면 Office를 제거한 다음 다시 설치합니다.
자세한 내용은 다음 Office 문서를 참조하세요.
참고 자료
Office 자동화 및 코드 샘플에 대한 자세한 내용은 다음 Microsoft 웹 사이트를 참조하세요.