내보내기(0) 인쇄
모두 확장
확장 최소화

Office 2010에서 VBA 사용 시작

Office 2010

요약: 프로그래머가 아닌 사용자도 VBA(Visual Basic for Applications) 프로그래밍을 사용하여 Microsoft Office 2010을 확장할 수 있는 몇 가지 기본적인 방법을 소개합니다. VBA 언어의 대략적인 개요, 여러 Office 2010 응용 프로그램에서 VBA에 액세스하는 방법에 대한 몇 가지 주요 정보, 간단한 프로그래밍 예제 및 일부 예제 응용 프로그램이 포함되어 있습니다(인쇄 페이지 13쪽).

Office 응용 프로그램에서 작업을 하다 보면 Word 2010에서 표 50개를 반복해서 정리해야 하는 경우도 있고, 특정 문서를 열 때 사용자에게 입력 메시지를 표시하려는 경우도 있습니다. 또한 Microsoft Outlook 2010에서 Microsoft Excel 2010 스프레드시트로 연락처를 효율적으로 가져오는 방법을 잘 모르는 경우도 있습니다.

Office 2010 응용 프로그램을 확장하는 데 사용할 수 있는 간단하지만 유용한 프로그래밍 언어인 Office 2010용 VBA를 사용하면 이러한 작업을 비롯하여 다양한 작업을 훨씬 쉽게 수행할 수 있습니다.

이 문서는 VBA에 대해 자세히 알아보고 프로그래밍을 통해 Office 2010을 사용자 지정하는 방법을 확인하려는 숙련된 Office 사용자를 위해 작성되었습니다.

Office 2010 응용 프로그램 제품군에는 다양한 기능이 포함되어 있으며, 여러 가지 방법으로 문서, 전자 메일, 데이터베이스, 양식, 스프레드시트 및 프레젠테이션을 작성하고 서식을 지정하고 조작할 수 있습니다. Office 2010에서는 매우 효율적인 VBA 프로그래밍 기능이 제공되므로 마우스, 키보드 또는 대화 상자를 통해 수행할 수 있는 거의 모든 작업을 VBA를 통해서도 수행할 수 있습니다. 또한 VBA로 한 번 수행한 작업은 매우 쉽게 여러 번 반복할 수 있습니다. 실제로 Office에서 VBA는 반복 작업을 자동화하는 데 가장 흔히 사용됩니다.

VBA 스크립트를 작성하여 일상적인 작업을 빠르게 수행하는 것 외에도, VBA를 사용하여 Office 2010 응용 프로그램에 새 기능을 추가하거나 비즈니스 요구에 맞는 방식으로 문서 사용자에게 메시지를 표시하고 사용자와 상호 작용할 수도 있습니다. 예를 들어 사용자가 문서를 처음 저장할 때 특정 네트워크 드라이브에 문서를 저장하라는 팝업 알림 메시지를 표시하는 VBA 코드를 작성할 수 있습니다.

이 문서에서는 VBA 프로그래밍 기능을 활용해야 하는 몇 가지 기본적인 이유에 대해 설명하고, 솔루션 작업 시 사용할 수 있는 VBA 언어 및 기본 제공 도구에 대해 살펴봅니다. 그리고 마지막으로 프로그래밍 과정에서 흔히 혼동할 수 있는 사항과 잘못 수행할 수 있는 단계를 방지하기 위한 몇 가지 팁과 방법을 소개합니다.

Office 2010에서 VBA 프로그래밍을 고려해야 하는 주요 이유는 다음의 세 가지입니다.

자동화 및 반복

VBA는 서식 지정 또는 문제 해결을 위한 반복 솔루션에서 사용하는 경우 매우 효율적입니다. Word에서 각 페이지 맨 위의 단락 스타일을 변경하는 경우, Excel에서 Word 문서 또는 Outlook 전자 메일로 붙여 넣은 여러 표의 서식을 다시 지정하는 경우, 여러 Outlook 연락처에서 같은 항목을 변경하는 경우 등을 예로 들 수 있습니다.

같은 변경 작업을 수십 번 반복해야 하는 경우 VBA를 통해 해당 작업을 자동화할 수 있으며, 수백 번 반복하는 변경 작업의 경우에는 반드시 VBA를 통해 자동화해야 합니다. 수동으로 수행할 수 있는 거의 모든 서식 지정 또는 편집 변경은 VBA로도 수행할 수 있습니다.

사용자 상호 작용 확장

사용자가 표준 응용 프로그램의 일부분이 아닌 특정 방식으로 Office 2010 응용 프로그램 또는 문서와 상호 작용하도록 유도해야 하는 경우가 있습니다. 사용자가 문서를 열거나 저장하거나 인쇄할 때 특정 작업을 수행하라는 메시지를 표시하는 경우를 예로 들 수 있습니다.

Office 2010 응용 프로그램 간의 상호 작용

모든 연락처를 Outlook 2010에서 Word 2010으로 복사한 다음 특정 방식으로 서식을 지정해야 하거나, Excel 2010의 데이터를 PowerPoint 2010 슬라이드 집합으로 이동해야 하는 등의 경우 단순한 복사하여 붙여넣기를 통해서는 원하는 대로 해당 작업을 수행할 수 없거나 작업 속도가 너무 느릴 수 있습니다. 이러한 경우에는 VBA 프로그래밍을 통해 둘 이상의 Office 2010 응용 프로그램 정보와 동시에 상호 작용한 다음 한 응용 프로그램의 콘텐츠를 기반으로 다른 응용 프로그램의 콘텐츠를 수정할 수 있습니다.

다른 방식으로 작업 수행

VBA 프로그래밍은 효율적인 솔루션이기는 하지만 항상 최적의 방식인 것은 아니며, 원하는 작업을 수행하려면 다른 방법을 사용하는 것이 더 적절할 수도 있습니다.

작업 방식을 선택할 때 가장 중요한 고려 사항은 더 쉬운 방법이 있는지 여부입니다. 즉, VBA 프로젝트를 시작하기 전에 기본 제공 도구 및 표준 기능 사용을 고려해야 합니다. 예를 들어 시간이 많이 걸리는 편집 또는 레이아웃 작업을 수행해야 하는 경우에는 스타일 또는 바로 가기 키를 사용할 수 있습니다. 또한 작업을 한 번 수행한 다음 Ctrl+Y(다시 실행)를 눌러 작업을 반복할 수 있는지와 올바른 형식 또는 서식 파일로 새 문서를 만든 다음 콘텐츠를 해당 새 문서에 복사할 수 있는지도 확인해야 합니다.

Office 2010 응용 프로그램은 유용한 기능을 다수 제공하므로 원하는 솔루션이 이미 포함되어 있을 수도 있습니다. 따라서 프로그래밍을 시작하기 전에 Office 2010에 대해 자세히 알아보는 것이 좋습니다.

VBA 프로젝트를 시작하기 전에 VBA 작업 시간이 충분한지 확인하십시오. 프로그래밍에는 집중적인 작업이 필요하며 예상하지 못한 상황이 발생할 수 있습니다. 특히 초보자의 경우에는 신중하게 작업을 할 수 있는 시간이 없으면 프로그래밍을 시작하지 마십시오. 작업 기한이 임박하여 문제가 발생할 가능성이 있으면 "빠른 스크립트"를 작성해 문제를 해결해 보십시오. 시간이 촉박한 경우에는 번거롭더라도 기존의 방법을 사용해야 할 수 있습니다.

응용 프로그램에서 작업을 자동으로 수행하도록 하는 코드 작성

코드 작성 작업은 까다롭고 어렵다고 생각하는 사용자가 많지만, 기본적인 코드 작성 원칙은 일반적인 논리를 사용하며 쉽게 파악할 수 있습니다. Office 2010 응용 프로그램은 명령을 수신할 수 있는 개체라는 항목을 표시하는 방식으로 작성되는데, 이는 전화기가 누를 수 있는 단추를 포함하여 설계되는 방식과 비슷합니다. 단추를 누르면 전화기에서 명령을 인식하며 사용자가 누르는 시퀀스에 해당하는 번호를 포함합니다. 프로그래밍에서는 응용 프로그램의 여러 개체로 명령을 보내는 방식으로 응용 프로그램과 상호 작용하게 됩니다. 이러한 개체는 확장이 가능하지만 여기에는 제한이 있습니다. 즉, 각 개체는 원래 지정된 작업만 수행할 수 있으며 사용자가 명령하는 작업만 수행합니다.

사용자가 Word 2010에서 문서를 열어 몇 가지 항목을 변경하고 문서를 저장한 후에 닫는 경우를 예로 들어 보겠습니다. VBA 프로그래밍 환경에서는 Word 2010으로 Document 개체가 표시됩니다. VBA 코드를 사용하여 이 Document 개체가 열기, 저장, 닫기 등의 작업을 수행하도록 명령할 수 있습니다.

다음 섹션에서는 개체를 구성 및 설명하는 방법에 대해 살펴보겠습니다.

개체 모델

개발자는 프로그래밍 개체를 계층 구조로 구성하는데, 이 계층 구조를 응용 프로그램의 개체 모델이라고 합니다. 예를 들어 Word의 경우 Document 개체가 포함된 최상위 Application 개체가 있습니다. Document 개체는 Paragraph 개체 등을 포함합니다. 개체 모델은 사용자 인터페이스에 표시되는 항목과 대략적으로 일치합니다. 즉, 응용 프로그램 자체와 해당 기능의 개념적 '지도'라고 할 수 있습니다.

개체의 정의를 클래스라고 하며, '개체'와 '클래스'는 동일한 의미로 사용할 수 있습니다. 기술적으로 클래스는 개체를 만드는(인스턴스화하는) 데 사용되는 서식 파일 또는 설명입니다.

개체가 있으면 해당 속성을 설정하고 메서드를 호출하여 개체를 조작할 수 있습니다. 개체를 명사라고 한다면 속성은 해당 명사를 설명하는 형용사, 메서드는 명사의 동작을 나타내는 동사의 개념으로 생각할 수 있습니다. 속성을 변경하면 개체의 일부 표시 또는 동작 품질이 변경됩니다. 개체 메서드 중 하나를 호출하면 개체가 특정 작업을 수행합니다.

이 문서의 VBA 코드는 조작 대상인 개체의 대부분이 이미 시작되어 실행 중인 열려 있는 Office 2010 응용 프로그램에 대해 실행됩니다(예: 응용 프로그램 자체, Excel 2010의 워크시트, Word 2010의 문서, PowerPoint 2010의 프레젠테이션, Outlook 2010의 탐색기 및 폴더 개체 등). 응용 프로그램의 현재 상태에 액세스할 수 있도록 하는 응용 프로그램의 몇 가지 주요 속성과 개체 모델의 기본 레이아웃을 파악하고 나면 Office에서 VBA를 사용하여 해당 Office 2010 응용 프로그램을 확장 및 조작할 수 있습니다.

메서드

Word의 경우를 예로 살펴보자면, Application 개체의 ActiveDocument 속성을 사용하여 현재 Word 문서의 속성을 변경하고 메서드를 호출할 수 있습니다. 이 ActiveDocument 속성은 현재 Word 응용 프로그램에서 활성 상태인 Document 개체에 대한 참조를 반환합니다. 참조를 반환한다는 것은 액세스할 수 있도록 한다는 의미입니다.

아래 코드는 해당 텍스트에서 확인할 수 있듯이 응용 프로그램의 활성 문서를 저장합니다.

Application.ActiveDocument.Save

이 코드를 왼쪽에서 오른쪽으로 읽어 보면 "이 응용 프로그램에서 ActiveDocument가 참조하는 문서에 대해 Save 메서드를 호출한다"는 의미입니다. Save는 가장 간단한 메서드 형태이며 자세한 명령이 필요하지 않습니다. 즉, Document 개체에 Save만 명령하면 추가 입력은 필요하지 않습니다.

메서드에 추가 정보가 필요한 경우 해당 세부 정보를 매개 변수라고 합니다. 아래 코드는 SaveAs 메서드를 실행하는데 여기에는 파일의 새 이름이 필요합니다.

Application.ActiveDocument.SaveAs ("New Document Name.docx")

메서드 이름 뒤의 괄호 안에 있는 값이 매개 변수입니다. 즉, 여기서는 파일의 새 이름이 SaveAs 메서드의 매개 변수입니다.

속성

속성을 읽을 때 사용하는 것과 같은 구문을 사용하여 속성을 설정합니다. 아래 코드는 Excel 2010의 A1 셀을 선택한 다음 해당 셀에 내용을 입력하도록 속성을 설정하는 메서드를 실행합니다.

    Application.ActiveSheet.Range("A1").Select
    Application.Selection.Value = "Hello World"

대부분의 사용자가 VBA 프로그래밍에서 까다롭다고 느끼는 첫 번째 사항은 각 Office 2010 응용 프로그램의 개체 모델을 파악하고 개체, 메서드 및 속성 구문을 읽는 것입니다. 개체 모델은 모든 Office 2010 응용 프로그램에서 비슷하지만 각 모델이 조작하는 문서와 개체의 종류는 서로 다릅니다.

첫 번째 코드 조각 줄에는 Application 개체(Excel 2010)가 있고, 그 뒤에는 활성 워크시트에 대한 액세스를 제공하는 ActiveSheet가 있습니다. 그 다음에는 Range라는 용어가 있는데, 이 용어에 대해 잘 모르시는 분을 위해 설명을 드리자면 "이 방식으로 셀 범위를 정의한다"는 의미입니다. 위의 코드는 정의된 셀 집합으로 A1만 사용하여 범위를 작성하도록 Range에 명령합니다. 즉, 첫 번째 코드 줄은 Range 개체를 정의하고 해당 개체에 대해 메서드를 실행하여 Range를 선택합니다. 그 결과는 Application의 다른 속성인 Selection에 자동으로 저장됩니다.

두 번째 코드 줄은 SelectionValue 속성을 "Hello World"라는 텍스트로 설정합니다. 그러면 해당 값이 A1 셀에 나타납니다.

보통 사용자가 작성할 수 있는 가장 간단한 VBA 코드는 현재 작업 중인 Office 응용 프로그램의 개체에 대한 액세스 권한을 얻고 속성을 설정하는 단순한 코드입니다. 예를 들어 VBA 스크립트를 통해 Word의 표에 있는 행에 대한 액세스 권한을 얻고 행 서식을 변경할 수 있습니다. 이러한 코드는 단순해 보이지만 매우 유용할 수 있습니다. 이러한 코드를 작성할 수 있다면 모든 프로그래밍 기능을 활용하여 여러 표나 문서에서 같은 변경 작업을 수행하거나 특정 논리 또는 조건에 따라 변경을 수행할 수 있습니다. 컴퓨터 측면에서는 변경을 1천 회 수행하는 것과 10회 수행하는 것에 차이가 없으므로, 문서가 크고 문제가 많이 발생하는 경우 VBA를 사용하면 효율성을 높이고 시간을 절약할 수 있습니다.

매크로 및 Visual Basic Editor

지금까지 Office 2010 응용 프로그램에서 개체 모델을 표시하는 방식에 대해 대략적으로 살펴보았습니다. 이러한 정보를 바탕으로 하여 실제로 개체 메서드를 호출하고 개체 속성을 설정하고 개체 이벤트에 응답하려면 Office에서 이해할 수 있는 방식으로 적절한 위치에서 코드를 작성해야 합니다(일반적으로 Visual Basic Editor 사용). Visual Basic Editor는 기본적으로 설치되지만, 리본 메뉴에서 사용하도록 설정하기 전까지는 Visual Basic Editor가 제공된다는 사실조차 모르는 사용자도 많습니다.

개발 도구 탭 열기

모든 Office 2010 응용 프로그램에서는 리본 메뉴가 사용됩니다. 리본 메뉴에는 개발 도구라는 탭이 있는데, 이 탭에서 Visual Basic Editor 및 기타 개발자 도구에 액세스할 수 있습니다. Office 2010에서 개발 도구 탭은 기본적으로 표시되지 않으므로, 다음 절차를 통해 사용하도록 설정해야 합니다.

개발 도구 탭을 사용하도록 설정하려면

  1. 파일 탭에서 옵션을 선택하여 옵션 대화 상자를 엽니다.

  2. 대화 상자 왼쪽에서 리본 사용자 지정을 클릭합니다.

  3. 대화 상자 왼쪽의 다음에서 명령 선택에서 많이 사용하는 명령을 선택합니다.

  4. 대화 상자 오른쪽의 리본 메뉴 사용자 지정에서 드롭다운 목록 상자의 기본 탭을 선택하고 개발 도구 확인란을 선택합니다.

  5. 확인을 클릭합니다.

참고 사항 참고

Office 2007에서는 Office 단추와 옵션을 차례로 클릭한 다음 옵션 대화 상자의 가장 많이 사용하는 옵션 범주에서 리본 메뉴에 개발 도구 탭 표시 확인란을 선택하여 개발 도구 탭을 표시합니다.

개발 도구 탭을 사용하도록 설정하고 나면 Visual Basic매크로 단추를 쉽게 찾을 수 있습니다.

그림 1. 개발 도구 탭의 단추

개발 도구 탭의 단추

보안 문제

바이러스와 위험한 매크로 코드로부터 Office 2010 사용자를 보호하기 위해, 표준 파일 확장명을 사용하는 표준 Office 2010 문서에서는 매크로 코드를 저장할 수 없습니다. 대신 이러한 코드는 특수한 확장명이 지정된 파일에 저장해야 합니다. 예를 들어 확장명이 .docx인 표준 Word 2010 문서에는 매크로를 저장할 수 없으며, 대신 확장명이 .docm인 특수한 Word 2010 매크로 사용 문서를 사용해야 합니다.

.docm 파일을 열어도 Office 2010 보안으로 인해 문서의 매크로가 기본적으로 실행되지 않거나 실행되지 않는다는 메시지가 표시될 수 있습니다. 모든 Office 2010 응용 프로그램의 보안 센터에서 설정과 옵션을 확인하십시오. 기본 설정을 사용하는 경우 매크로를 실행할 수 없으며, 매크로가 사용하지 않도록 설정되었다는 경고가 표시되고 해당 문서에 대해 매크로를 다시 설정할 수 있는 옵션이 제공됩니다.

신뢰할 수 있는 위치, 신뢰할 수 있는 문서 또는 신뢰할 수 있는 게시자를 만들어 매크로를 실행할 수 있는 특정 폴더를 지정할 수 있습니다. 가장 효율적인 옵션은 신뢰할 수 있는 게시자를 사용하는 것인데, 이 옵션은 디지털로 서명하여 배포하는 문서에서도 작동합니다. 특정 Office 2010 응용 프로그램의 보안 설정에 대한 자세한 정보를 확인하려면 옵션 대화 상자를 열고 보안 센터를 클릭한 후에 보안 센터 설정을 클릭합니다.

참고 사항 참고

Outlook 2010과 같은 일부 Office 2010 응용 프로그램은 로컬 컴퓨터의 마스터 서식 파일에 매크로를 기본적으로 저장합니다. 이 전략의 경우 사용자가 매크로를 실행할 때 사용자 컴퓨터의 로컬 보안 문제는 감소하지만, 매크로를 배포하려는 경우에는 배포 전략을 마련해야 합니다.

매크로 기록

개발 도구 탭에서 매크로 단추를 클릭하면 매크로 대화 상자가 열립니다. 이 대화 상자를 통해 특정 문서나 응용 프로그램에서 액세스할 수 있는 VBA 서브루틴이나 매크로에 액세스할 수 있습니다. Visual Basic 단추를 클릭하면 VBA 코드를 작성하고 편집할 수 있는 Visual Basic Editor가 열립니다.

Word 2010 및 Excel 2010의 개발 도구 탭에는 매크로 기록이라는 단추도 있습니다. 이 단추를 클릭하면 사용자가 응용 프로그램에서 수행하는 작업을 재현할 수 있는 VBA 코드가 자동 생성됩니다. 매크로 기록은 VBA에 대해 자세히 알아보는 데 사용할 수 있는 유용한 도구입니다. 생성된 코드의 내용을 확인하면 VBA에 대해 파악할 수 있으며 일반 사용자로서의 Office 2010에 대한 지식과 프로그래머로서의 지식을 적절하게 연관시킬 수 있습니다. 다만, 매크로 편집기는 사용자의 의도를 어느 정도 '가정'하는데 이 가정이 항상 정확한 것은 아니기 때문에 생성된 코드가 다소 혼란을 초래할 수 있다는 점은 염두에 두어야 합니다.

매크로를 기록하려면

  1. Excel 2010에서 새 통합 문서를 열고 리본 메뉴에서 개발 도구 탭을 클릭한 다음 매크로 기록을 클릭하고 매크로 기록 대화 상자의 모든 기본 설정(매크로 이름: Macro1, 위치: 이 통합 문서 포함)을 그대로 적용합니다.

  2. 확인을 클릭하여 매크로 기록을 시작합니다. 그러면 단추 텍스트가 기록 중지로 바뀝니다. 기록할 작업이 완료됨과 동시에 단추를 클릭하면 됩니다.

  3. B1 셀을 클릭하고 프로그래머가 일반적으로 사용하는 Hello World 문자열을 입력한 후에 입력을 중지하면, Excel 2010에서 사용자가 셀의 값 입력을 완료하기를 대기하는 중이므로 기록 중지 단추가 회색으로 표시됩니다.

  4. B2 셀을 클릭하여 B1 셀의 작업을 완료하고 기록 중지를 클릭합니다.

  5. 개발 도구 탭에서 매크로를 클릭하고 Macro1을 선택하지 않은 경우 선택한 다음 편집을 클릭하여 Visual Basic Editor에서 Macro1의 코드를 확인합니다.

그림 2. Visual Basic Editor의 매크로 코드

Visual Basic Editor의 매크로 코드

코드 살펴보기

앞서 만든 매크로의 코드는 다음과 같습니다.

Sub Macro1()
'
' Macro1 Macro
'
'
    Range("B1").Select
    ActiveCell.FormulaR1C1 = "Hello World"
    Range("B2").Select
End Sub

위에서 살펴보았던 A1 셀의 텍스트를 선택하는 코드 조각과 이 코드의 공통점 및 차이점을 확인해 보십시오. 이 코드에서는 B1이 선택되며 "Hello World" 문자열이 활성화된 셀에 적용됩니다. 텍스트를 묶고 있는 따옴표는 값이 숫자가 아닌 문자열임을 지정합니다.

앞에서 B2 셀을 클릭하자 기록 중지 단추가 다시 표시되었는데요. 이 작업도 코드 줄로 포함되어 있습니다. 매크로 레코더는 모든 키 입력을 기록합니다.

아포스트로피로 시작하며 편집기에서 녹색으로 지정된 코드 줄은 코드를 설명하거나 코드 작성자 및 다른 프로그래머에게 코드의 용도를 알려 주는 주석입니다. VBA에서는 작은따옴표로 시작하는 모든 줄이나 줄의 일부분을 무시합니다. 코드에서 명확하고도 적절한 주석을 작성하는 것도 중요한 작업이기는 하지만 이 문서에서는 해당 작업에 대해 설명하지 않습니다. 이 문서 뒷부분에 나오는 이 코드에 대한 참조에는 해당 4개 주석 줄이 포함되어 있지 않습니다.

매크로 레코더는 코드를 생성할 때 복잡한 알고리즘을 사용하여 작성자가 의도한 메서드 및 속성을 결정합니다. 특정 속성에 대해 잘 모르는 경우에는 다양한 자료를 참조할 수 있습니다. 기록된 매크로에서 매크로 레코더가 ForumulaR1C1 속성을 참조하는 코드를 생성했는데 이 속성의 의미를 잘 모르는 경우를 예로 들 수 있습니다.

팁

참고: 모든 VBA 매크로에서는 Application 개체가 암시적으로 포함됩니다. 즉, 기록된 코드는 각 줄 시작 부분에서 Application.을 사용합니다.

개발자 도움말 사용

위에서 예로 든 속성 의미 파악 문제를 해결하는 방법을 설명하겠습니다. 기록된 매크로에서 ForumulaR1C1을 선택하고 F1 키를 누릅니다. 그러면 도움말 시스템에서 빠른 검색을 실행하여 해당 주제가 Excel 2010 도움말의 Excel 2010 개발자 섹션에 있는지 확인한 후에 FormulaR1C1 속성 항목을 나열합니다. 링크를 클릭하면 속성에 대한 자세한 정보를 확인할 수 있습니다. 그러나 그 전에 창 아래쪽의 Excel 개체 모델 참조를 먼저 확인하십시오. 이 링크를 클릭하면 Excel 2010이 워크시트 및 해당 구성 요소를 설명하기 위해 개체 모델에서 사용하는 긴 개체 목록이 표시됩니다. 목록의 개체 중 하나를 클릭하면 해당 개체에 적용되는 속성 및 메서드와 여러 관련 옵션에 대한 상호 참조를 확인할 수 있습니다. 대부분의 도움말 항목에는 도움말 내용을 쉽게 이해하는 데 도움이 되는 간단한 코드 예제도 있습니다. 예를 들어 Borders 개체의 링크를 클릭하면 VBA에서 테두리를 설정하는 방법을 확인할 수 있습니다.

Worksheets(1).Range("A1").Borders.LineStyle = xlDouble

코드 편집

Borders 코드는 기록된 매크로와는 다르게 표시됩니다. 개체 모델에서 혼동하기 쉬운 요소 중 하나는, 지정된 개체(이 예에서는 A1 셀)를 표시하는 데 둘 이상의 방법이 있다는 것입니다.

경우에 따라서는 현재 사용 중인 코드를 약간 변경하여 그 결과를 파악함으로써 프로그래밍 방식을 가장 효율적으로 익힐 수 있습니다. 앞서 만든 Macro1을 Visual Basic Editor에서 열고 코드를 다음과 같이 변경해 보십시오.

Sub Macro1()
    Worksheets(1).Range("A1").Value = "Wow!"
    Worksheets(1).Range("A1").Borders.LineStyle = xlDouble
End Sub
팁

코드 작업을 할 때는 입력 오류를 방지하기 위해 복사하여 붙여넣기를 최대한 활용하십시오.

코드는 저장하지 않아도 적용해 볼 수 있습니다. Excel 2010 문서로 돌아와 개발 도구 탭에서 매크로를 클릭하고 Macro1, 실행을 차례로 클릭합니다. 그러면 A1 셀에 Wow!라는 텍스트가 표시되고 셀 주위에는 이중선 테두리가 표시됩니다.

그림 3. 첫 번째 매크로의 결과

첫 매크로의 결과

 

지금까지 매크로를 기록하고 개체 모델 설명서를 확인하는 방법을 살펴보고 간단한 프로그래밍을 통해 VBA 프로그램이 작업을 수행하도록 해 보았습니다.

작업이 정상적으로 수행되었다면 VBA의 디버깅 제안 사항 내용을 확인해 보십시오.

예제 활용

VBA와 관련하여 대규모 커뮤니티가 활발하게 운영되고 있으며, 웹을 검색해 보면 거의 대부분의 경우 원하는 작업과 비슷한 동작을 하는 VBA 코드의 예를 찾을 수 있습니다. 적절한 예를 찾을 수 없으면 작업을 여러 개의 작은 단위로 나눈 다음 각 단위의 예를 검색하거나 유사하지만 보다 일반적인 문제를 지정해 보십시오. 예제를 활용하면 작업 시간을 줄일 수 있습니다.

그러나 모든 작업에 대해 적절한 무료 코드가 웹에서 제공되는 것은 아닙니다. 실제로 웹에서 제공되는 일부 코드에는 버그나 오류가 있을 수 있습니다. 온라인이나 VBA 설명서에서 제공되는 예는 원하는 작업을 시작하기 위한 '기준'으로만 활용해야 합니다. 프로그래밍 방법을 익히려면 시간과 노력이 필요합니다. 다른 해결 방법을 사용하여 문제를 서둘러 해결해야 하는 경우가 발생하지 않도록 하려면 해당 문제를 해결하는 데 VBA를 사용하는 것이 적절한지를 먼저 고려하십시오.

문제를 보다 단순한 여러 단위로 분리

프로그래밍은 순식간에 복잡해지는 경우가 많습니다. 따라서 특히 초보자의 경우에는 문제를 최대한 작은 논리 단위로 나눈 후에 각 단위에 대한 코드를 별도로 작성하고 테스트도 따로 진행해야 합니다. 코드가 너무 많아져 혼란스러운 경우에는 프로그래밍을 중지하고 해당 문제는 일단 미뤄 둡니다. 나중에 다시 해당 문제에 대한 솔루션을 작성할 때 문제의 일부분을 새 모듈로 복사한 다음 해당 부분에 대한 코드를 작성하여 작동 여부를 확인하고 테스트를 진행합니다. 그런 후에 다음 부분으로 진행하면 됩니다.

버그와 디버깅

프로그래밍 오류에는 기본적으로 두 가지 종류가 있습니다. 그 중 구문 오류는 프로그래밍 언어의 문법적 규칙을 위반하는 것이고, 런타임 오류는 구문상으로는 정확해 보이는데 VBA에서 코드를 실행하면 실행이 실패하는 것입니다.

이러한 오류는 해결하기가 다소 까다로울 수도 있지만, 구문 오류는 쉽게 파악할 수 있습니다. 코드에 구문 오류를 입력하면 Visual Basic Editor에서 경고음이 울리고 화면이 깜박입니다.

예를 들어 VBA에서는 문자열 값을 큰따옴표로 묶어야 합니다. 큰따옴표가 아닌 작은따옴표를 사용했을 때의 결과를 확인하려면 Visual Basic Editor로 돌아가서 코드 예제의 "Wow!" 문자열을 'Wow!'(단어 Wow를 작은따옴표로 묶음)로 바꿔 보십시오. 다음 줄을 클릭하면 Visual Basic Editor가 오류에 반응합니다. "컴파일 오류: 필요한 요소: 식" 오류는 큰 도움이 되지는 않지만, 오류가 생성된 줄이 빨간색으로 바뀌어 해당 줄에 구문 오류가 있으므로 이 프로그램이 실행되지 않음을 나타냅니다.

확인을 클릭하고 텍스트를 다시 "Wow!"로 변경합니다.

런타임 오류의 경우 프로그래밍 구문은 정확해 보이는데 VBA에서 코드를 실행하려고 하면 실행이 실패하므로 파악하기가 더 어렵습니다.

예를 살펴보려면 Visual Basic Editor를 열고 매크로에서 Value 속성 이름을 ValueX로 변경해 보십시오. Range 개체에는 ValueX라는 속성이 없으므로 이는 런타임 오류를 발생시키기 위한 의도적인 변경입니다. 이렇게 변경한 후 Excel 2010 문서로 돌아가서 매크로 대화 상자를 열고 Macro1을 다시 실행하면 런타임 오류를 설명하는 Visual Basic 메시지 상자가 표시되고 "개체가 이 속성이나 메서드를 지원하지 않습니다."라는 텍스트가 표시됩니다. 이 텍스트만으로도 오류를 명확하게 확인할 수 있지만, 자세한 내용을 확인하려는 경우에는 디버그를 클릭하면 됩니다.

Visual Basic Editor로 돌아오면 노란색 강조 표시를 사용하여 실패한 코드 줄을 표시하는 특수한 디버그 모드가 적용되어 있음을 확인할 수 있습니다. 예상대로 ValueX 속성이 포함된 줄이 강조 표시되어 있습니다.

그림 4. 작동 중인 Visual Basic 디버거

작동 중인 Visual Basic 디버거

 

실행 중인 VBA 코드도 변경이 가능하므로 ValueX를 다시 Value로 변경하고 디버그 메뉴 아래의 작은 녹색 재생 단추를 클릭합니다. 그러면 프로그램이 다시 정상적으로 실행됩니다.

더 길고 복잡한 프로그램에 대해 디버거를 보다 적절하게 사용하는 방법을 익혀 두면 유용합니다. 최소한 코드를 확인하려는 지점에서 실행을 중지하기 위한 중단점을 설정하는 방법, 조사식을 추가하여 코드가 실행될 때 여러 변수와 속성의 값을 확인하는 방법, 그리고 코드를 한 줄씩 단계별로 실행하는 방법 정도는 익혀 두는 것이 좋습니다. 이러한 옵션은 모두 디버그 메뉴에서 사용 가능하며, 고급 디버거 사용자는 보통 각 옵션에 해당하는 바로 가기 키를 기억하고 있습니다.

효율적인 참조 자료 활용

Office 2010 도움말에서 기본적으로 제공되는 개발자 참조를 열려면 Office 2010 응용 프로그램의 리본 메뉴에서 물음표를 클릭하거나 F1 키를 눌러 도움말 참조를 엽니다. 그런 다음 검색 단추 오른쪽의 드롭다운 화살표를 클릭하여 콘텐츠를 필터링하고 개발자 참고를 클릭합니다. 왼쪽 창에 목차가 표시되지 않으면 작은 책 모양 아이콘을 클릭하여 목차를 연 다음 목차에서 개체 모델 참조를 확장합니다.

그림 5. 모든 Office 2010 응용 프로그램에 적용되는 개발자 도움말 필터링

개발자 도움말 필터링

 

개체 모델 참조는 시간을 투자하여 확인할 만한 가치가 있습니다. 사용 중인 Office 2010 응용 프로그램의 VBA 구문 및 개체 모델의 기본 사항에 대해 파악하고 나면 추측을 통한 작업이 아닌 체계적인 프로그래밍을 수행할 수 있게 됩니다.

물론 Microsoft Office 개발자 센터에서도 다양한 문서, 팁 및 커뮤니티 정보를 제공합니다.

포럼 및 그룹 검색

어떤 프로그래머라도 검색 가능한 모든 참조 문서의 내용을 확인하고 오랜 시간 동안 여러 가지 방법으로 문제 해결을 시도해도 문제를 해결하지 못하는 경우가 있습니다. 이러한 경우에는 인터넷의 개발자 커뮤니티에서 다른 개발자로부터 프로그래밍 문제 해결에 도움을 받을 수 있습니다.

웹에서 "Office 개발자 포럼"을 검색하면 다양한 토론 그룹을 찾을 수 있습니다. 또한 "Office 개발"이나 문제 설명으로 검색하면 포럼, 블로그 게시물 및 관련 문서도 확인할 수 있습니다.

문제 해결을 위해 가능한 모든 방법을 시도해 본 경우에는 문제와 관련된 문의 사항을 개발자 포럼에 게시해 보십시오. 초보 개발자라도 이러한 포럼에 자유롭게 글을 올릴 수 있으며, 여러 숙련된 개발자가 기꺼이 도움을 제공합니다.

개발자 포럼에 게시를 할 때 준수해야 하는 예의 관련 사항은 다음과 같습니다.

  • 게시하기 전에 사이트에서 회원이 따라야 하는 규칙에 대한 FAQ 또는 지침을 확인합니다. 이러한 지침에 따라 올바른 포럼 섹션에 콘텐츠를 게시해야 합니다.

  • 명확하고 완전한 코드 예제를 포함합니다. 긴 코드 섹션의 일부분인 경우에는 다른 프로그래머들이 쉽게 확인할 수 있도록 코드를 편집할 수 있습니다.

  • 문제를 명확하고 간결하게 설명하고 문제 해결을 위해 수행했던 단계를 요약하여 포함합니다. 또한 시간이 촉박하더라도 게시물을 정성 들여 작성하고, 독자가 문제 설명을 한 번만 읽어도 상황을 파악할 수 있도록 필요한 정보를 모두 포함합니다.

  • 예의를 지키고 감사의 의사를 표현합니다.

이 문서는 그다지 길지 않으며 VBA와 프로그래밍에 대해 대략적으로만 설명하지만 프로그래밍을 시작하는 데 필요한 정보는 충분히 제공됩니다.

이 섹션에서는 몇 가지 주요 항목에 대해 간략하게 설명합니다.

변수

이 문서의 간단한 예제에서는 응용 프로그램으로 이미 만들어진 개체를 조작해 보았습니다. 응용 프로그램에서 임시로 사용하기 위해 다른 개체에 대한 참조나 값을 저장하는 개체를 직접 만들 수도 있는데, 이러한 개체를 변수라고 합니다

VBA에서 변수를 사용하려면 Dim 문을 통해 변수가 나타내는 개체의 유형을 VBA에 알려야 합니다. 그런 후에 변수 값을 설정하고 해당 변수 값을 사용하여 다른 변수나 속성을 설정합니다

    Dim MyStringVariable As String
    MyStringVariable = "Wow!"
    Worksheets(1).Range("A1").Value = MyStringVariable

분기 및 반복

이 문서의 간단한 프로그램에서는 코드 줄을 위에서부터 한 번에 하나씩 실행합니다. 그러나 실제 프로그래밍에서는 하나 이상의 지정한 조건에 따라 실행할 코드 줄을 선택할 수 있습니다. 작업을 여러 번 반복할 때는 이 기능을 더 확장할 수도 있습니다. 예를 들어 다음 코드는 Macro1을 확장합니다.

Sub Macro1()
    If Worksheets(1).Range("A1").Value = "Yes!" Then
        Dim i As Integer
        For i = 2 To 10
            Worksheets(1).Range("A" & i).Value = "OK! " & i
        Next i
    Else
        MsgBox "Put Yes! in cell A1"
    End If
End Sub

위의 코드를 Visual Basic Editor에 입력하거나 붙여 넣은 다음 실행해 보십시오. 메시지 상자가 표시되면 해당 지시에 따라 A1 셀의 텍스트를 Wow!에서 Yes!로 변경합니다. 그런 후에 코드를 다시 실행하면 반복 기능을 확인할 수 있습니다. 이 코드 조각은 변수, 분기 및 반복을 보여 줍니다. 실제로 코드를 실행한 후 코드의 내용을 면밀하게 확인하고 각 줄이 실행될 때 어떤 작업이 수행되는지를 살펴보십시오.

이 섹션에서는 실제로 실행 가능한 스크립트를 제공합니다. 각 스크립트는 실제 Office 2010 문제를 해결합니다.

Outlook 2010에서 전자 메일 작성

Sub MakeMessage()
    Dim OutlookMessage As Outlook.MailItem
    Set OutlookMessage = Application.CreateItem(olMailItem)
    OutlookMessage.Subject = "Hello World!"
    OutlookMessage.Display
    Set OutlookMessage = Nothing
End Sub

Outlook 2010에서 전자 메일을 자동화하려는 경우 이러한 스크립트를 사용할 수 있습니다. 서식 파일을 사용해도 됩니다.

Excel 2010 워크시트에서 빈 행 삭제

Sub DeleteEmptyRows()    SelectedRange = Selection.Rows.Count    ActiveCell.Offset(0, 0).Select    For i = 1 To SelectedRange        If ActiveCell.Value = "" Then    
            Selection.EntireRow.Delete        Else            ActiveCell.Offset(1, 0).Select        End If    Next iEnd Sub

여러 셀이 포함된 열을 선택한 다음 이 매크로를 실행하면 선택한 열에서 빈 셀이 있는 행을 모두 삭제할 수 있습니다.

PowerPoint 2010에서 빈 텍스트 상자 삭제

Sub RemoveEmptyTextBoxes()
    Dim SlideObj As Slide
    Dim ShapeObj As Shape
    Dim ShapeIndex As Integer
    For Each SlideObj In ActivePresentation.Slides
        For ShapeIndex = SlideObj.Shapes.Count To 1 Step -1
            Set ShapeObj = SlideObj.Shapes(ShapeIndex)
            If ShapeObj.Type = msoTextBox Then
                If Trim(ShapeObj.TextFrame.TextRange.Text) = "" Then
                    ShapeObj.Delete
                End If
            End If
        Next ShapeIndex
    Next SlideObj
End Sub

이 코드는 모든 슬라이드에서 반복되어 텍스트가 없는 텍스트 상자를 모두 삭제합니다. 코드가 개체를 삭제할 때마다 컬렉션에서 해당 개체가 제거되어 개체 수가 감소하므로, Count 변수도 증가하는 것이 아니라 감소합니다.

Outlook 2010에서 Word 2010으로 연락처 복사

Sub CopyCurrentContact()
   Dim OutlookObj As Object
   Dim InspectorObj As Object
   Dim ItemObj As Object
   Set OutlookObj = CreateObject("Outlook.Application")
   Set InspectorObj = OutlookObj.ActiveInspector
   Set ItemObj = InspectorObj.CurrentItem
   Application.ActiveDocument.Range.InsertAfter (ItemObj.FullName & " from " & ItemObj.CompanyName)
End Sub

이 코드는 현재 Outlook 2010에서 열려 있는 연락처를 열려 있는 Word 2010 문서로 복사합니다. 현재 Outlook에서 검사를 위해 열려 있는 연락처가 있어야 이 코드가 작동합니다.

이 문서에서는 Office 2010의 VBA(Visual Basic for Applications) 기능과 VBA를 통해 반복 작업을 자동화하는 방법에 대해 설명했습니다.

표시:
© 2014 Microsoft