방법: Visual C# 프로젝트에서 VBA로 코드 노출

VBA(Visual Basic for Applications) 코드와 Visual C# 코드가 서로 상호 작용하도록 VBA 코드에 Visual C# 프로젝트의 코드를 노출할 수 있습니다.

Visual C# 프로세스는 Visual Basic 프로세스와 다릅니다. 자세한 내용은 VBA에서 문서 수준 사용자 지정의 코드 호출방법: Visual Basic 프로젝트에서 VBA로 코드 노출을 참조하십시오.

적용 대상: 이 항목의 정보는 Excel 2007 및 Excel 2010, Word 2007 및 Word 2010의 문서 수준 프로젝트에 적용됩니다. 자세한 내용은 Office 응용 프로그램 및 프로젝트 형식에 따라 사용 가능한 기능을 참조하십시오.

Visual C# 프로젝트에서 코드 노출

VBA 코드에서 Visual C# 프로젝트의 코드를 호출할 수 있도록 하려면 해당 코드를 COM에 표시되도록 수정하고 디자이너에서 ReferenceAssemblyFromVbaProject 속성을 True로 설정합니다.

VBA에서 Visual C# 프로젝트의 메서드를 호출하는 방법을 보여 주는 연습은 연습: Visual C# 프로젝트에서 VBA의 코드 호출을 참조하십시오.

Visual C# 프로젝트에서 VBA로 코드를 노출하려면

  1. 매크로를 지원하는 Word 문서, Excel 통합 문서 또는 Excel 서식 파일을 기반으로 하며 VBA 코드가 이미 들어 있는 문서 수준 프로젝트를 열거나 만듭니다.

    매크로를 지원하는 문서 파일 형식에 대한 자세한 내용은 VBA에서 문서 수준 사용자 지정의 코드 호출을 참조하십시오.

    참고

    이 기능은 Word 서식 파일 프로젝트에서 사용할 수 없습니다.

  2. 매크로를 사용할 수 있도록 설정하라는 메시지 없이 문서의 VBA 코드를 실행할 수 있는지 확인합니다. Word 또는 Excel의 보안 센터 설정에서 신뢰할 수 있는 위치 목록에 Office 프로젝트의 위치를 추가하여 VBA 코드를 실행할 수 있는 것으로 신뢰할 수 있습니다.

  3. VBA로 노출하려는 멤버를 프로젝트의 public 클래스에 추가하고 새 멤버를 public으로 선언합니다.

  4. VBA로 노출할 클래스에 다음 ComVisibleAttributeClassInterfaceAttribute 특성을 적용합니다. 이러한 특성을 적용하면 클래스 인터페이스를 생성하지 않고 클래스가 COM에 표시됩니다.

    [System.Runtime.InteropServices.ComVisible(true)]
    [System.Runtime.InteropServices.ClassInterface(
        System.Runtime.InteropServices.ClassInterfaceType.None)]
    
  5. VBA로 노출할 클래스의 인스턴스를 반환하도록 프로젝트에 포함된 호스트 항목 클래스의 GetAutomationObject 메서드를 재정의합니다.

    • 호스트 항목 클래스를 VBA로 노출하려면 이 클래스에 속해 있는 GetAutomationObject 메서드를 재정의하여 클래스의 현재 인스턴스가 반환되도록 합니다.

      protected override object GetAutomationObject()
      {
          return this;
      }
      
    • 호스트 항목이 아닌 클래스를 VBA로 노출하려면 프로젝트에 포함된 호스트 항목의 GetAutomationObject 메서드를 재정의하여 호스트 항목이 아닌 클래스의 인스턴스가 반환되도록 합니다. 예를 들어 다음 코드에서는 DocumentUtilities라는 클래스를 VBA로 노출한다고 가정합니다.

      protected override object GetAutomationObject()
      {
          return new DocumentUtilities();
      }
      

    호스트 항목에 대한 자세한 내용은 호스트 항목 및 호스트 컨트롤 개요를 참조하십시오.

  6. VBA로 노출할 클래스에서 인터페이스를 추출합니다. 인터페이스 추출 대화 상자에서 인터페이스 선언에 포함할 public 멤버를 선택합니다. 자세한 내용은 인터페이스 추출 리팩터링(C#)을 참조하십시오.

  7. 인터페이스 선언에 public 키워드를 추가합니다.

  8. 인터페이스에 다음 ComVisibleAttribute 특성을 추가하여 COM에 인터페이스를 표시합니다.

    [System.Runtime.InteropServices.ComVisible(true)]
    
  9. Visual Studio의 디자이너에서 문서(Word의 경우) 또는 워크시트(Excel의 경우)를 엽니다.

  10. 속성 창에서 ReferenceAssemblyFromVbaProject 속성을 선택하고 값을 True로 변경합니다.

    참고

    통합 문서 또는 문서에 아직 VBA 코드가 없거나 문서의 VBA 코드가 실행할 수 있는 것으로 신뢰되지 않은 경우 ReferenceAssemblyFromVbaProject 속성을 True로 설정하면 오류 메시지가 표시됩니다. 이는 이 경우 Visual Studio에서 문서의 VBA 프로젝트를 수정할 수 없기 때문입니다.

  11. 메시지가 표시되면 확인을 클릭합니다. 이 메시지는 Visual Studio에서 프로젝트를 실행할 때 통합 문서나 문서에 VBA 코드를 추가하면 다음에 프로젝트를 빌드할 때 VBA 코드를 잃게 된다는 것을 알려 줍니다. 빌드 출력 폴더의 문서는 프로젝트를 빌드할 때마다 덮어쓰여지기 때문입니다.

    이 시점에서 Visual Studio는 VBA 프로젝트에서 어셈블리를 호출할 수 있도록 프로젝트를 구성합니다. 또한 VBA 프로젝트에 GetManagedClass라는 메서드를 추가됩니다. VBA 프로젝트의 모든 위치에서 이 메서드를 호출하여 VBA로 노출된 클래스에 액세스할 수 있습니다. 자세한 내용은 VBA에서 문서 수준 사용자 지정의 코드 호출을 참조하십시오.

  12. 프로젝트를 빌드합니다.

참고 항목

작업

방법: Visual Studio에서 Office 프로젝트 만들기

연습: Visual C# 프로젝트에서 VBA의 코드 호출

방법: Visual Basic 프로젝트에서 VBA로 코드 노출

개념

VBA에서 문서 수준 사용자 지정의 코드 호출

기타 리소스

Office 솔루션 디자인 및 만들기

VBA 및 문서 수준 사용자 지정 결합