증상

Automation을 사용하여 Microsoft Excel을 제어하는 코드를 실행하는 동안 다음 오류 중 하나가 발생할 수 있습니다. Microsoft Excel 97 이상 버전의 Excel에서는 다음 오류 메시지 중 하나가 표시됩니다.

오류 메시지 1

런타임 오류 '1004': '_Global' 개체의 '메서드>'의 메서드 '<이름'이 실패했습니다.

오류 메시지 2

응용 프로그램 정의 또는 개체 정의 오류

Microsoft Excel 95에서는 다음 오류 메시지 중 하나가 표시됩니다.

오류 메시지 1

런타임 오류 '-2147023174' OLE 자동화 오류

오류 메시지 2

런타임 오류 '462': 원격 서버 컴퓨터가 없거나 사용할 수 없습니다.

원인

Visual Basic은 Excel 개체 변수로 요소를 한정하지 않고 Excel 개체, 메서드 또는 속성을 호출하는 코드 줄 때문에 Excel에 대한 참조를 설정했습니다. Visual Basic은 프로그램을 종료할 때까지 이 참조를 릴리스하지 않습니다. 이 잘못된 참조는 코드가 두 번 이상 실행되면 자동화 코드를 방해합니다.

해결 방법

이 문제를 resolve Excel 개체, 메서드 또는 속성에 대한 각 호출이 적절한 개체 변수로 정규화되도록 코드를 수정합니다.

상태

이것은 의도적으로 설계된 동작입니다.

추가 정보

Microsoft Excel을 자동화하려면 일반적으로 Excel Application 개체 또는 Excel 통합 문서 개체를 참조하는 개체 변수를 설정합니다. 그런 다음 Microsoft Excel 개체 모델의 워크시트, Range 또는 기타 개체를 참조하도록 다른 개체 변수를 설정할 수 있습니다. Excel 개체, 메서드 또는 속성을 사용하는 코드를 작성할 때는 항상 적절한 개체 변수를 사용하여 호출 앞에 와야 합니다. 그렇지 않은 경우 Visual Basic은 Excel에 대한 자체 참조를 설정합니다. 이 참조는 자동화 코드를 여러 번 실행하려고 할 때 문제가 발생할 수 있습니다. 코드 줄이 개체 변수로 시작하더라도 개체 변수 앞에 없는 코드 줄의 중간에 있는 Excel 개체, 메서드 또는 속성에 대한 호출이 발생할 수 있습니다.다음 단계에서는 이 문제를 재현하는 방법과 문제를 해결하는 방법을 보여 줍니다.

동작을 재현하는 단계

  1. Visual Basic에서 새 표준 EXE 프로젝트를 시작합니다. Form1은 기본적으로 만들어집니다.

  2. 프로젝트 메뉴에서 참조를 클릭한 다음 자동화하려는 Excel 버전에 대한 개체 라이브러리를 검사.

  3. Form1에 CommandButton 컨트롤을 배치합니다.

  4. 다음 코드 예제를 Form1의 코드 창에 복사합니다.

          Option Explicit
    
          Private Sub Command1_Click()
             Dim xlApp As Excel.Application
             Dim xlBook As Excel.Workbook
             Dim xlSheet As Excel.Worksheet
             Set xlApp = CreateObject("Excel.Application")
             Set xlBook = xlApp.Workbooks.Add
             Set xlSheet = xlBook.Worksheets("Sheet1")
             xlSheet.Range(Cells(1, 1), Cells(10, 2)).Value = "Hello"
             xlBook.Saved = True
             Set xlSheet = Nothing
             Set xlBook = Nothing
             xlApp.Quit
             Set xlApp = Nothing
          End Sub
    
  5. 실행 메뉴에서 시작을 클릭하거나 F5 키를 눌러 프로그램을 시작합니다.

  6. CommandButton 컨트롤을 클릭합니다. 오류가 발생하지 않습니다. 그러나 Excel에 대한 참조가 만들어졌으며 릴리스되지 않았습니다.

  7. CommandButton 컨트롤을 다시 클릭합니다. "증상" 섹션에서 설명하는 오류 메시지 중 하나가 표시됩니다.참고 코드가 를 사용하여 호출하기 전에 셀의 메서드를 참조하기 때문에 오류 메시지가 발생합니다. xlSheet 개체 변수입니다.

  8. 프로젝트를 중지하고 다음 코드 줄을 변경합니다.

    xlSheet.Range(Cells(1,1),Cells(10,2)).Value = "Hello"
    

    코드 줄을 다음 코드 줄과 유사하게 변경합니다.

    xlSheet.Range(xlSheet.Cells(1,1),xlSheet.Cells(10,2)).Value = "Hello"
    
  9. 프로그램을 다시 실행합니다. 오류 메시지를 받지 않고 코드를 여러 번 실행할 수 있습니다.

참고 자료

189618 Automation을 사용하여 Word 제어하는 Visual Basic 코드를 실행할 때 "런타임 오류 '-2147023174'(800706ba)" 오류 메시지 또는 "런타임 오류 '462'가 나타날 수 있습니다Word  

도움이 더 필요하세요?

더 많은 옵션을 원하세요?

구독 혜택을 살펴보고, 교육 과정을 찾아보고, 디바이스를 보호하는 방법 등을 알아봅니다.