- 공유 링크 만들기
- X
- 이메일
- 기타 앱
이 글의 목적은 Excel에서 자주 발생하는 OLE 동작 오류의 원인과 해결 절차를 체계적으로 정리하여 현장에서 즉시 재현·적용 가능한 진단 흐름과 실무 스크립트를 제공하는 것이다.
1. OLE 동작 오류의 동작원리와 증상 정의
OLE(Object Linking and Embedding)은 한 응용 프로그램이 다른 응용 프로그램에 명령을 전달하고 결과를 임베드하거나 링크하는 메커니즘을 의미한다. 엑셀에서는 외부 프로그램 호출, DDE 통신, OLE 개체 업데이트, 외부 데이터 새로고침, VBA 자동화 등에서 많이 사용된다.
대표 메시지는 다음과 같다.
Microsoft Excel이 다른 응용 프로그램의 OLE 동작을 완료하기를 기다리는 중이다.
주요 증상은 다음과 같다.
- 외부 프로그램(Internet Explorer, Edge, Adobe Reader, PowerPoint, Word, CAD, ERP 클라이언트 등) 호출 후 엑셀이 멈춘 것처럼 보이는 현상이 발생한다.
- 하이퍼링크 또는 OLE 개체(삽입된 파일, 차트, 문서) 더블클릭 시 장시간 대기 또는 무반응 현상이 발생한다.
- VBA에서 CreateObject/GetObject, Shell, FollowHyperlink, QueryTables.Refresh 등을 호출할 때 지연이 발생한다.
- 외부 연결 업데이트, 피벗 캐시 갱신, Power Query 새로고침 중 오류가 반복된다.
2. 원인 분류: 시스템·엑셀·VBA·네트워크 관점
| 분류 | 세부 원인 | 대표 징후 |
|---|---|---|
| 시스템/보안 | 안티바이러스 실시간 검사 지연, UAC 권한 격리, 레지스트리 연관성 깨짐, 오래된 COM 구성요소 | 일부 PC에서만 재현, 특정 프로세스 실행 시만 지연 |
| 엑셀 설정 | DDE 관련 옵션 불일치, COM/Excel 추가 기능 충돌, 보호된 보기, 매크로 차단 | 엑셀 안전 모드에서는 정상, 일반 모드에서만 지연 |
| VBA/자동화 | 동기 호출로 인한 블로킹, 대기 처리 미흡, 레이트 바인딩 문제, 이벤트 루프 정지 | VBA 실행 중 “응답 없음” 표시, 타임아웃 후 재시도 시 성공 |
| 네트워크/외부데이터 | 네트워크 드라이브 지연, 인증 팝업 대기, OLE DB/ODBC 드라이버 충돌 | 사내망 전환, VPN 해제 시 개선 |
3. 진단 흐름도: 10분 내 재현·분리
-
엑셀 안전 모드 시작:
Win + R→excel /safe실행한다. 오류가 사라지면 추가 기능 또는 옵션 문제로 범위를 좁힌다. -
새로운 로컬 경로에서 재현: 파일을
C:\Temp로 복사하여 네트워크 영향과 경로 길이 이슈를 배제한다. - 하이퍼링크·삽입 개체만 단독 시험: 새 빈 통합문서에 동일 동작을 재현하여 파일 손상 가능성을 분리한다.
- VBA 사용 시 한 줄씩 주석 처리하며 원인 호출부를 찾는다.
-
작업 관리자에서 외부 프로세스가 떠 있는지 확인한다(예:
AcroRd32.exe,iexplore.exe,winword.exe등).
4. 즉시 적용 가능한 빠른 해결책
- Excel 옵션 > 고급 > 일반 > “다른 응용 프로그램에서 DDE(동적 데이터 교환)를 사용하는 경우 무시” 옵션을 전환하여 시험한다. 문제 유형에 따라 체크/해제가 각각 유리할 수 있다.
- 파일 > 옵션 > 추가 기능에서 COM 추가 기능과 Excel 추가 기능을 단계적으로 비활성화 후 재현한다.
- 신뢰 센터 > 신뢰할 수 있는 위치에 현재 파일 경로를 추가하고 보호된 보기 관련 옵션을 일시적으로 해제하여 테스트한다.
- Office 빠른 복구 또는 온라인 복구를 수행한다.
- 기본 브라우저 변경 또는 PDF 기본 앱을 시스템 설정에서 변경 후 재시험한다.
5. 설정 단계별 점검 절차
5.1 DDE 및 OLE 관련 Excel 옵션
- 파일 > 옵션 > 고급 > 일반 섹션으로 이동한다.
- “다른 응용 프로그램에서 DDE를 사용하는 경우 무시”를 체크한 상태로 테스트한다.
- 개선이 없으면 체크 해제 후 테스트한다.
- 결과가 나오는 상태를 유지하고 문서화한다.
5.2 추가 기능 충돌 제거
- 파일 > 옵션 > 추가 기능에서 “관리: COM 추가 기능”을 선택하고 이동 버튼을 클릭한다.
- 모든 항목을 해제하고 엑셀을 재시작한다.
- 문제가 해소되면 의심 항목을 하나씩 활성화하여 범인을 식별한다.
- Excel 추가 기능(.xlam)도 동일 방식으로 분리한다.
5.3 신뢰 센터 정책
- 파일 > 옵션 > 보안 센터 > 보안 센터 설정으로 이동한다.
- 보호된 보기 항목에서 모든 체크를 해제하고 테스트한다.
- 개선 확인 후 조직 보안정책에 맞게 최소 허용 범위로 재설정한다.
- 신뢰할 수 있는 위치에 문서 폴더를 추가하여 정책과 성능을 균형 있게 유지한다.
5.4 기본 앱 및 파일 연결
- Windows 설정 > 앱 > 기본 앱에서 기본 브라우저를 Edge ↔ Chrome 등으로 전환하고 하이퍼링크 호출을 재시험한다.
- PDF 기본 앱을 시스템 뷰어 또는 Adobe Reader로 상호 전환하여 재현성을 본다.
- 특정 앱 업데이트 후 개선되면 동일 버전 유지 또는 전사 배포를 검토한다.
6. VBA 자동화 시 권장 패턴
OLE 동작 오류는 대부분 동기 호출이 외부 프로세스 완료를 기다리며 UI 스레드를 블록하는 상황에서 발생한다. 다음 패턴을 적용한다.
6.1 외부 프로세스 완료 대기 구현
' 외부 프로세스 실행 후 완료까지 폴링 대기 Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
Function RunAndWait(cmd As String, Optional args As String = "") As Long
Dim sh As Object, proc As Object, t As Double
Set sh = CreateObject("WScript.Shell")
Dim exec As Object
Set exec = sh.Exec("""" & cmd & """" & IIf(args
> "", " " & args, ""))
t = Timer
Do While exec.Status = 0
DoEvents
Sleep 50
If Timer - t > 60 Then ' 60초 타임아웃
On Error Resume Next
exec.Terminate
RunAndWait = -1
Exit Function
End If
Loop
RunAndWait = exec.ExitCode
End Function
6.2 하이퍼링크 호출 안정화
Sub OpenUrlStable(ByVal url As String) On Error GoTo EH Application.ScreenUpdating = False Application.EnableEvents = False Application.DisplayAlerts = False ThisWorkbook.FollowHyperlink Address:=url, NewWindow:=True DoEvents ' 브라우저 기동 시간을 제공 Finally: Application.DisplayAlerts = True Application.EnableEvents = True Application.ScreenUpdating = True Exit Sub EH: MsgBox "URL 열기 실패: " & Err.Description, vbExclamation Resume Finally End Sub
6.3 레이트 바인딩과 예외 처리
' Word/PowerPoint 등 OLE 자동화 시 레이트 바인딩으로 참조 문제 최소화 Sub ExportToWordLateBinding() On Error GoTo EH Dim wdApp As Object, wdDoc As Object Set wdApp = CreateObject("Word.Application") Set wdDoc = wdApp.Documents.Add wdApp.Visible = False wdDoc.Content.Text = "테스트" wdDoc.SaveAs2 Environ$("TEMP") & "\test.docx" Finally: If Not wdDoc Is Nothing Then wdDoc.Close False If Not wdApp Is Nothing Then wdApp.Quit Exit Sub EH: MsgBox "Word 자동화 실패: " & Err.Description, vbCritical Resume Finally End Sub
6.4 UI 블로킹 최소화
Sub WithLessBlocking() Application.Calculation = xlCalculationManual Application.ScreenUpdating = False Application.EnableEvents = False On Error GoTo EH
' 외부 데이터 새로고침
ThisWorkbook.RefreshAll
' 단계별 DoEvents로 메시지 펌프 유지
Dim i As Long
For i = 1 To 50
DoEvents
Next i
Finally:
Application.EnableEvents = True
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Exit Sub
EH:
MsgBox Err.Number & " - " & Err.Description, vbExclamation
Resume Finally
End Sub
7. 외부 데이터 새로고침과 드라이버 점검
- Power Query/QueryTables 사용 시 해당 OLE DB/ODBC 드라이버 버전을 통일한다.
- 네트워크 경로가 포함된 연결은 오프라인에서도 재현되도록 로컬 캐시를 사용한다.
- 인증 팝업이 백그라운드에 숨지 않았는지 확인한다. 숨은 팝업은 대기를 유발한다.
8. 레지스트리 및 COM 구성 요소 재등록(고급)
8.1 엑셀 재등록
Win + R → cmd "C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE" /regserver
위 명령은 엑셀의 COM 등록 정보를 초기화하여 연결 문제를 해소한다. Office 버전에 따라 경로의
Office16
은 다를 수 있다.
8.2 OLE 관련 DLL 재등록(필요 시)
regsvr32 oleaut32.dll regsvr32 ole32.dll
관리자 권한 명령 프롬프트에서 실행한다. 효과가 없으면 원복한다.
9. 보안 소프트웨어와 권한
- 안티바이러스 실시간 검사를 일시 중지하여 재현해 본다. 차단 로그가 있으면 예외 경로를 등록한다.
- 엑셀과 외부 앱을 동일 권한 수준(둘 다 관리자 권한 또는 둘 다 일반 권한)으로 실행하여 UAC 격리를 피한다.
10. 정리 체크리스트
| 항목 | 체크 방법 | 기대 효과 |
|---|---|---|
| 안전 모드 재현 |
excel /safe
로 실행
|
추가 기능 원인 분리 |
| DDE 옵션 전환 | 고급 > 일반 > DDE 무시 체크/해제 | OLE 대기 해소 |
| COM/Excel 추가 기능 | 모두 비활성화 후 하나씩 복구 | 충돌 원인 특정 |
| 신뢰 센터 | 보호된 보기·위치 설정 점검 | 정책 대기로 인한 지연 제거 |
| 기본 앱 | 브라우저·PDF 기본 앱 전환 | 핸들러 충돌 해소 |
| VBA 패턴 | 대기 루프·타임아웃 구현 | 블로킹 최소화 |
| Office 재등록 |
EXCEL.EXE /regserver
|
COM 연결 복구 |
11. 현장 트러블 사례별 솔루션
사례 A: 하이퍼링크 클릭 시 브라우저 무반응
- 기본 브라우저를 변경해 본다.
-
FollowHyperlink 호출 전후로
DoEvents를 삽입한다. - URL에 공백·한글이 있으면 인코딩하여 호출한다.
사례 B: Adobe Reader 호출 후 엑셀 대기
- Adobe Reader 자동 업데이트 적용 또는 PDF 기본 앱을 시스템 뷰어로 전환하여 재시험한다.
- VBA Shell 대기 루틴을 적용하여 프로세스 종료를 확인한다.
사례 C: Power Query 새로고침 중 멈춤
- 회사 프록시 인증 팝업이 백그라운드에 있는지 확인한다.
- 자격 증명 캐시를 삭제 후 재설정한다.
- 동일 드라이버 버전으로 표준화한다.
12. 예방 전략
- 추가 기능 사전 검증 프로세스를 운영한다.
- VBA 표준 모듈에 공통 대기/로깅 유틸 함수를 탑재하여 재사용한다.
- 문서 내 OLE 개체는 링크보다 내장 임베드를 우선 검토한다.
- 네트워크 경로 사용 시 오프라인 캐시 정책을 마련한다.
13. 고급 진단: 로깅과 타임아웃
' 간단한 로깅 유틸리티 Sub LogWrite(msg As String) Dim f As Integer: f = FreeFile Open Environ$("TEMP") & "\excel_ole_log.txt" For Append As #f Print #f, Format(Now, "yyyy-mm-dd hh:nn:ss") & " | " & msg Close #f End Sub
' 타임아웃 헬퍼
Function WaitFor(ByVal seconds As Double) As Boolean
Dim t As Double: t = Timer
Do While Timer - t
< seconds
DoEvents
Loop
WaitFor = True
End Function
14. 복구 후 검증 스크립트
Sub OLE_SmokeTest() On Error GoTo EH '
1) 하이퍼링크 ThisWorkbook.FollowHyperlink "https://www.example.com", NewWindow:=True DoEvents: Call LogWrite("Hyperlink OK")
'
2) 외부 프로세스
Dim rc As Long: rc = RunAndWait("notepad.exe")
If rc = 0 Then LogWrite("Shell Exec OK") Else LogWrite("Shell Exec Timeout")
'
3) 외부 데이터 새로고침
ThisWorkbook.RefreshAll
WaitFor 2: LogWrite("RefreshAll triggered")
MsgBox "기본 점검 완료", vbInformation
Exit Sub
EH:
MsgBox "오류: " & Err.Number & " - " & Err.Description, vbCritical
End Sub
15. 운영 환경 권장 설정 요약
| 영역 | 권장 설정 | 비고 |
|---|---|---|
| Excel 옵션 | DDE 무시 옵션은 환경에 맞게 표준화 | 배포 문서화 필요 |
| 보안 센터 | 신뢰할 수 있는 위치 지정, 보호된 보기 최소화 | 정책 준수 |
| 추가 기능 | 승인된 목록만 사용 | 정기 점검 |
| 드라이버 | ODBC/OLE DB 버전 동기화 | 배포 자동화 |
| VBA 공통 | 대기·타임아웃 유틸 기본 탑재 | 코드 품질 유지 |
FAQ
“DDE 무시” 옵션은 켜야 하나 꺼야 하나?
환경마다 다르다. 외부 앱이 엑셀을 호출해야 하는 경우에는 해제하는 편이 안정적이다. 반대로 엑셀이 외부 앱을 주로 호출하고 역호출이 필요 없으면 체크하는 편이 지연을 줄이는 데 도움이 된다.
VBA에서 OLE 대기를 줄이는 최우선 방법은 무엇인가?
외부 프로세스 완료를 명시적으로 감시하는 대기 루틴과 타임아웃을 구현하는 것이다. 그다음으로 화면 업데이트·자동 계산·이벤트를 일시적으로 꺼서 블로킹을 줄인다.
Office 복구와 /regserver의 차이는?
Office 복구는 파일과 구성요소를 재배치하고 손상된 모듈을 복원한다.
/regserver
는 COM 등록 정보를 재설정하여 연결 경로를 복구한다. 둘을 순차적으로 적용하면 효과가 높다.
네트워크 드라이브에서만 문제가 발생한다. 어떻게 하나?
로컬로 복사하여 재현되는지 확인한다. 네트워크 인증 팝업, 경로 길이, 오프라인 캐시, 보안 정책이 관여할 수 있다. 자격 증명 재설정과 경로 단축을 검토한다.
DLL 재등록은 반드시 필요한가?
대부분의 경우 필요하지 않다. 레지스트리 손상 또는 비정상적인 COM 등록 문제로 추정될 때 고급 단계에서 제한적으로 사용한다.