연습: VBA에서 응용 프로그램 수준 추가 기능의 코드 호출
이 연습에서는 VBA(Visual Basic for Applications) 및 COM 추가 기능을 포함하여 다른 Microsoft Office 솔루션에 응용 프로그램 수준 추가 기능의 개체를 노출하는 방법을 보여 줍니다.
적용 대상: 이 항목의 정보는 Microsoft Office 2010 및 2007 Microsoft Office system의 응용 프로그램 수준 프로젝트에 적용됩니다. 자세한 내용은 Office 응용 프로그램 및 프로젝트 형식에 따라 사용 가능한 기능을 참조하십시오.
이 연습에서는 Excel만 사용하지만 연습에서 보여 주는 기본 개념은 Visual Studio에서 제공하는 모든 추가 기능 프로젝트 템플릿에 적용됩니다.
이 연습에서는 다음 작업을 수행합니다.
다른 Office 솔루션에 노출할 수 있는 클래스 정의
다른 Office 솔루션에 클래스 노출
VBA 코드에서 클래스의 메서드 호출
참고
다음 지침처럼 컴퓨터에서 Visual Studio 사용자 인터페이스 요소 일부에 대한 이름이나 위치를 다르게 표시할 수 있습니다. 이러한 요소는 사용하는 Visual Studio 버전 및 설정에 따라 결정됩니다. 자세한 내용은 Visual Studio 설정을 참조하십시오.
사전 요구 사항
이 연습을 완료하려면 다음 구성 요소가 필요합니다.
-
Microsoft Office 개발자 도구를 포함하는 Visual Studio 2010 버전입니다. 자세한 내용은 [Office 솔루션을 개발할 수 있도록 컴퓨터 구성](bb398242\(v=vs.100\).md)을 참조하십시오.
- Excel 2007 또는 Excel 2010
이 항목의 비디오 버전을 보려면 Video How to: Calling Code in an Application-Level Add-in from VBA를 참조하십시오.
추가 기능 프로젝트 만들기
첫 번째 단계에서는 Excel용 추가 기능 프로젝트를 만듭니다.
새 프로젝트를 만들려면
Excel 추가 기능 프로젝트 템플릿을 사용하여 ExcelImportData라는 Excel 추가 기능 프로젝트를 만듭니다. 자세한 내용은 방법: Visual Studio에서 Office 프로젝트 만들기를 참조하십시오.
Visual Studio에서 ThisAddIn.cs 또는 ThisAddIn.vb 코드 파일이 열리고 솔루션 탐색기에 ExcelImportData 프로젝트가 추가됩니다.
다른 Office 솔루션에 노출할 수 있는 클래스 정의
이 연습의 목록은 VBA 코드에서 추가 기능의 AddInUtilities라는 클래스의 iImportData 메서드를 호출하기 위한 것입니다. 이 메서드는 활성 워크시트의 A1 셀에 문자열을 씁니다.
다른 Office 솔루션에 AddInUtilities 클래스를 노출하려면 클래스를 공용으로 설정하고 COM에 표시해야 합니다. 클래스의 IDispatch 인터페이스도 노출해야 합니다. 다음 절차의 코드에서는 요구 사항을 충복하는 한 가지 방법을 보여 줍니다. 자세한 내용은 다른 Office 솔루션에서 응용 프로그램 수준 추가 기능의 코드 호출을 참조하십시오.
다른 Office 솔루션에 노출할 수 있는 클래스를 정의하려면
프로젝트 메뉴에서 클래스 추가를 클릭합니다.
새 항목 추가 대화 상자에서 새 컨트롤의 이름을 AddInUtilities로 바꾸고 추가를 클릭합니다.
AddInUtilities.cs 또는 AddInUtilities.vb 파일이 코드 편집기에서 열립니다.
다음 문을 파일의 맨 위에 추가합니다.
Imports System.Data Imports System.Runtime.InteropServices Imports Excel = Microsoft.Office.Interop.Excel
using System.Data; using System.Runtime.InteropServices; using Excel = Microsoft.Office.Interop.Excel;
AddInUtilities 클래스를 다음 코드로 바꿉니다.
<ComVisible(True)> _ Public Interface IAddInUtilities Sub ImportData() End Interface <ComVisible(True)> _ <ClassInterface(ClassInterfaceType.None)> _ Public Class AddInUtilities Implements IAddInUtilities ' This method tries to write a string to cell A1 in the active worksheet. Public Sub ImportData() Implements IAddInUtilities.ImportData Dim activeWorksheet As Excel.Worksheet = Globals.ThisAddIn.Application.ActiveSheet If activeWorksheet IsNot Nothing Then Dim range1 As Excel.Range = activeWorksheet.Range("A1") range1.Value2 = "This is my data" End If End Sub End Class
[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 솔루션에 클래스 노출
다른 Office 솔루션에 AddInUtilities 클래스를 노출하려면 ThisAddIn 클래스의 RequestComAddInAutomationService 메서드를 재정의합니다. 재정의에서 AddInUtilities 클래스의 인스턴스를 반환합니다.
다른 Office 솔루션에 AddInUtilities 클래스를 노출하려면
솔루션 탐색기에서 Excel을 확장합니다.
ThisAddIn.cs 또는 ThisAddIn.vb를 마우스 오른쪽 단추로 클릭하고 코드 보기를 클릭합니다.
ThisAddIn 클래스에 다음 코드를 추가합니다.
Private utilities As AddInUtilities Protected Overrides Function RequestComAddInAutomationService() As Object If utilities Is Nothing Then utilities = New AddInUtilities() End If Return utilities End Function
private AddInUtilities utilities; protected override object RequestComAddInAutomationService() { if (utilities == null) utilities = new AddInUtilities(); return utilities; }
빌드 메뉴에서 솔루션 빌드를 클릭합니다.
솔루션이 오류 없이 빌드되는지 확인합니다.
추가 기능 테스트
다른 여러 형식의 Office 솔루션에서 AddInUtilities 클래스를 호출할 수 있습니다. 이 연습에서는 Excel 통합 문서의 VBA 코드를 사용합니다. 사용할 수 있는 다른 형식의 Office 솔루션에 대한 자세한 내용은 다른 Office 솔루션에서 응용 프로그램 수준 추가 기능의 코드 호출을 참조하십시오.
추가 기능을 테스트하려면
F5 키를 눌러 프로젝트를 실행합니다.
Excel에서 활성 통합 문서를 Excel 매크로 사용 통합 문서 (*.xlsm)로 저장합니다. 문서를 데스크톱 등의 편리한 위치에 저장합니다.
리본 메뉴에서 개발 도구 탭을 클릭합니다.
참고
개발 도구 탭이 표시되지 않으면 먼저 이 탭을 표시해야 합니다. 자세한 내용은 방법: 리본 메뉴에 개발 도구 탭 표시를 참조하십시오.
코드 그룹에서 Visual Basic을 클릭합니다.
Visual Basic 편집기가 열립니다.
프로젝트 창에서 ThisWorkbook을 두 번 클릭합니다.
ThisWorkbook 개체의 코드 파일이 열립니다.
코드 파일에 다음 VBA 코드를 추가합니다. 이 코드는 먼저 ExcelImportData 추가 기능을 나타내는 COMAddIn 개체를 가져옵니다. 그런 다음 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
F5 키를 누릅니다.
새 Imported Data 시트가 통합 문서에 추가되었는지 확인합니다. 또한 A1 셀에 This is my data라는 문자열이 들어 있는지 확인합니다.
Excel을 종료합니다.
다음 단계
다음 항목에서는 프로그래밍 추가 기능에 대해 자세히 배웁니다.
ThisAddIn 클래스를 사용하여 호스트 응용 프로그램을 자동화하고 추가 기능 프로젝트의 다른 작업을 수행합니다. 자세한 내용은 응용 프로그램 수준 추가 기능 프로그래밍을 참조하십시오.
추가 기능에 사용자 지정 작업 창을 만듭니다. 자세한 내용은 사용자 지정 작업 창 개요 및 방법: 응용 프로그램에 사용자 지정 작업 창 추가를 참조하십시오.
추가 기능의 리본 메뉴를 사용자 지정합니다. 자세한 내용은 리본 개요 및 방법: 리본 메뉴 사용자 지정 시작을 참조하십시오.
참고 항목
작업
방법: Visual Studio에서 Office 프로젝트 만들기
개념
다른 Office 솔루션에서 응용 프로그램 수준 추가 기능의 코드 호출