다음을 통해 공유


연습: VBA에서 VSTO 추가 기능의 코드 호출

이 연습에서는 VSTO 추가 기능의 개체를 VBA(Visual Basic for Applications) 및 COM VSTO 추가 기능을 비롯한 다른 Microsoft Office 솔루션에 노출하는 방법을 보여 줍니다.

적용 대상: 이 항목의 정보는 VSTO 추가 기능 프로젝트에 적용됩니다. 자세한 내용은 Office 애플리케이션 및 프로젝트 형식에 따라 사용 가능한 기능을 참조하세요.

이 연습에서 Excel을 특정하게 사용하지는 않지만 여기에서 보여 주는 개념은 Visual Studio에서 제공하는 모든 VSTO 추가 기능 프로젝트 템플릿에 적용 가능합니다.

이 연습에서는 다음 작업을 수행합니다.

  • 다른 Office 솔루션에 노출할 수 있는 클래스 정의

  • 다른 Office 솔루션에 클래스 노출

  • VBA 코드에서 클래스의 메서드 호출

    참고 항목

    일부 Visual Studio 사용자 인터페이스 요소의 경우 다음 지침에 설명된 것과 다른 이름 또는 위치가 시스템에 표시될 수 있습니다. 이러한 요소는 사용하는 Visual Studio 버전 및 설정에 따라 결정됩니다. 자세한 내용은 IDE 개인 설정을 참조하세요.

필수 조건

이 연습을 완료하려면 다음과 같은 구성 요소가 필요합니다.

VSTO 추가 기능 프로젝트 만들기

첫 번째 단계는 Excel용 VSTO 추가 기능 프로젝트를 만드는 것입니다.

새 프로젝트를 만들려면

  1. Excel VSTO 추가 기능 프로젝트 템플릿을 사용하여 이름이 ExcelImportData인 Excel VSTO 추가 기능 프로젝트를 만듭니다. 자세한 내용은 How to: Create Office Projects in Visual Studio을 참조하세요.

    Visual Studio는 ThisAddIn.cs 또는 ThisAddIn.vb 코드 파일을 열고 ExcelImportData 프로젝트를 솔루션 탐색기에 추가합니다.

다른 Office 솔루션에 표시할 수 있는 클래스 정의

이 연습의 목적은 VBA 코드에서 VSTO 추가 기능에 있는 ImportData 클래스의 AddInUtilities 메서드를 호출하는 것입니다. 이 메서드는 현재 워크시트의 A1 셀에 문자열을 씁니다.

AddInUtilities 클래스를 다른 Office 솔루션에 노출하려면 공용이고 COM에 표시되도록 클래스를 설정해야 합니다. 클래스에서 IDispatch 인터페이스도 노출해야 합니다. 다음 절차의 코드에서는 이러한 요구 사항을 충족하는 한 가지 방법을 보여 줍니다. 자세한 내용은 Calling Code in VSTO Add-ins from Other Office Solutions을 참조하세요.

다른 Office 솔루션에 노출할 수 있는 클래스를 정의하려면

  1. 프로젝트 메뉴에서 클래스 추가를 클릭합니다.

  2. 새 항목 추가 대화 상자에서 새 클래스의 이름을 AddInUtilities로 변경하고 추가를 클릭합니다.

    AddInUtilities.cs 또는 AddInUtilities.vb 파일이 코드 편집기에서 열립니다.

  3. 다음 지시문을 파일 맨 위에 추가합니다.

    using System.Data;
    using System.Runtime.InteropServices;
    using Excel = Microsoft.Office.Interop.Excel;
    
  4. AddInUtilities 클래스를 다음 코드로 바꿉니다.

    [ComVisible(true)]
    public interface IAddInUtilities
    {
        void ImportData();
    }
    
    [ComVisible(true)]
    [ClassInterface(ClassInterfaceType.None)]
    public class AddInUtilities : IAddInUtilities
    {
        // This method tries to write a string to cell A1 in the active worksheet.
        public void ImportData()
        {
            Excel.Worksheet activeWorksheet = Globals.ThisAddIn.Application.ActiveSheet as Excel.Worksheet;
    
            if (activeWorksheet != null)
            {
                Excel.Range range1 = activeWorksheet.get_Range("A1", System.Type.Missing);
                range1.Value2 = "This is my data";
            }
        }
    }
    

    이 코드에서는 AddInUtilities 클래스를 COM에 표시되도록 설정하고 ImportData 메서드를 클래스에 추가합니다. IDispatch 인터페이스를 노출하기 위해 AddInUtilities 클래스는 ClassInterfaceAttribute 특성도 갖고 있으며 COM에 표시되는 인터페이스를 구현합니다.

다른 Office 솔루션에 클래스 표시

AddInUtilities 클래스를 다른 Office 솔루션에 노출하려면 RequestComAddInAutomationService 클래스에서 ThisAddIn 메서드를 재정의합니다. 재정의에서 AddInUtilities 클래스의 인스턴스를 반환합니다.

AddInUtilities 클래스를 다른 Office 솔루션에 노출하려면

  1. 솔루션 탐색기에서 Excel을 확장합니다.

  2. ThisAddIn.cs 또는 ThisAddIn.vb를 마우스 오른쪽 단추로 클릭한 다음 코드 보기를 클릭합니다.

  3. ThisAddIn 클래스에 다음 코드를 추가합니다.

    private AddInUtilities utilities;
    
    protected override object RequestComAddInAutomationService()
    {
        if (utilities == null)
            utilities = new AddInUtilities();
    
        return utilities;
    }
    
  4. 빌드 메뉴에서 솔루션 빌드를 클릭합니다.

    솔루션이 오류 없이 빌드되는지 확인합니다.

VSTO 추가 기능 테스트

몇 가지 유형의 Office 솔루션에서 AddInUtilities 클래스를 호출할 수 있습니다. 이 연습에서는 Excel 통합 문서에서 VBA 코드를 사용합니다. 사용할 수 있는 다른 유형의 Office 솔루션에 대한 자세한 내용은 다른 Office 솔루션의 VSTO 추가 기능에서 코드 호출을 참조하세요.

VSTO 추가 기능을 테스트하려면

  1. F5 키를 눌러 프로젝트를 실행합니다.

  2. Excel에서 현재 통합 문서를 Excel 매크로 사용 통합 문서(*.xlsm)로 저장합니다. 통합 문서를 바탕 화면과 같은 편리한 위치에 저장합니다.

  3. 리본에서 개발자 탭을 클릭합니다.

    참고 항목

    개발자 탭이 표시되지 않는 경우 먼저 개발자 탭을 표시해야 합니다. 자세한 내용은 방법: 리본에 개발 도구 탭 표시를 참조하세요.

  4. 코드 그룹에서 Visual Basic을 클릭합니다.

    Visual Basic Editor가 열립니다.

  5. 프로젝트 창에서 ThisWorkbook을 두 번 클릭합니다.

    ThisWorkbook 개체의 코드 파일이 열립니다.

  6. 다음 VBA 코드를 코드 파일에 추가합니다. 이 코드는 먼저 ExcelImportData VSTO 추가 기능을 나타내는 개체를 가져옵니다. 그런 다음, 코드는 COMAddIn 개체의 Object 속성을 사용하여 ImportData 메서드를 호출합니다.

    Sub CallVSTOMethod()
        Dim addIn As COMAddIn
        Dim automationObject As Object
        Set addIn = Application.COMAddIns("ExcelImportData")
        Set automationObject = addIn.Object
        automationObject.ImportData
    End Sub
    
  7. F5키를 누릅니다.

  8. 새로운 Imported Data 시트가 통합 문서에 추가되었는지 확인합니다. 또한 A1 셀에 This is my data문자열이 포함되어 있는지 확인합니다.

  9. Excel을 종료합니다.

다음 단계

다음 항목에서 VSTO 추가 기능 프로그래밍에 대해 자세히 알아볼 수 있습니다.