Visual Basic에서 Microsoft Excel을 자동화하는 방법

요약

이 문서에서는 Visual Basic에서 Automation을 사용하여 Excel을 만들고 조작하는 방법을 보여 줍니다.

추가 정보

자동화 서버를 제어하는 방법에는 두 가지가 있습니다. 즉, 늦은 바인딩 또는 초기 바인딩을 사용합니다. 런타임 및 Automation 서버가 Object로 선언될 때까지 메서드가 바인딩되지 않습니다. 초기 바인딩을 사용하면 애플리케이션은 디자인 타임에 통신할 개체의 정확한 형식을 알고 있으며 해당 개체를 특정 형식으로 선언할 수 있습니다. 이 샘플에서는 더 큰 성능과 더 나은 형식 안전성을 제공하므로 대부분의 경우 더 나은 것으로 간주되는 초기 바인딩을 사용합니다.

Automation 서버에 조기에 바인딩하려면 해당 서버의 형식 라이브러리에 대한 참조를 설정해야 합니다. Visual Basic에서 이 작업은 프로젝트 | 아래에 있는 참조 대화 상자를 통해 수행됩니다. 참조 메뉴입니다. 이 샘플에서는 코드를 실행하기 전에 Excel용 형식 라이브러리에 대한 참조를 추가해야 합니다. 참조를 추가하는 방법은 아래 단계를 참조하세요.

Automation 샘플 빌드

  1. Visual Basic을 시작하고 새 표준 EXE 프로젝트를 만듭니다. Form1은 기본적으로 만들어집니다.

  2. 프로젝트를 클릭한 다음 참조를 클릭합니다. 참조대화 상자가 나타납니다. Microsoft Excel 개체 라이브러리를 찾을 때까지 목록을 아래로 스크롤한 다음 항목을 선택하여 Excel에 대한 참조를 추가합니다. Excel 버전에 대한 올바른 개체 라이브러리가 목록에 표시되지 않으면 Excel 버전이 제대로 설치되어 있는지 확인합니다.

    참고

    • Microsoft Office Excel 2007을 자동화하는 경우 형식 라이브러리가 참조목록에 Microsoft Excel 12.0 개체 라이브러리로 표시됩니다.
    • Microsoft Office Excel 2003을 자동화하는 경우 형식 라이브러리가 참조목록에 Microsoft Excel 11.0 개체 라이브러리로 표시됩니다.
    • Microsoft Excel 2002를 자동화하는 경우 형식 라이브러리가 참조 목록에 Microsoft Excel 10.0 개체 라이브러리로 표시됩니다.
    • Microsoft Excel 2000을 자동화하는 경우 형식 라이브러리가 참조 목록에 Microsoft Excel 9.0 개체 라이브러리로 표시됩니다.
    • Microsoft Excel 97을 자동화하는 경우 형식 라이브러리가 참조 목록에 Microsoft Excel 8.0 개체 라이브러리로 표시됩니다.
  3. [확인]을 클릭하여 참조 대화 상자를 닫습니다.

  4. Form1에 CommandButton을 추가합니다.

  5. Form1의 코드 창에서 다음 코드를 삽입합니다.

    Option Explicit
    
    Private Sub Command1_Click()
       Dim oXL As Excel.Application
       Dim oWB As Excel.Workbook
       Dim oSheet As Excel.Worksheet
       Dim oRng As Excel.Range
    
    'On Error GoTo Err_Handler
    
    ' Start Excel and get Application object.
       Set oXL = CreateObject("Excel.Application")
       oXL.Visible = True
    
    ' Get a new workbook.
       Set oWB = oXL.Workbooks.Add
       Set oSheet = oWB.ActiveSheet
    
    ' Add table headers going cell by cell.
       oSheet.Cells(1, 1).Value = "First Name"
       oSheet.Cells(1, 2).Value = "Last Name"
       oSheet.Cells(1, 3).Value = "Full Name"
       oSheet.Cells(1, 4).Value = "Salary"
    
    ' Format A1:D1 as bold, vertical alignment = center.
       With oSheet.Range("A1", "D1")
          .Font.Bold = True
          .VerticalAlignment = xlVAlignCenter
       End With
    
    ' Create an array to set multiple values at once.
       Dim saNames(5, 2) As String
       saNames(0, 0) = "John"
       saNames(0, 1) = "Smith"
       saNames(1, 0) = "Tom"
       saNames(1, 1) = "Brown"
       saNames(2, 0) = "Sue"
       saNames(2, 1) = "Thomas"
       saNames(3, 0) = "Jane"
    
    saNames(3, 1) = "Jones"
       saNames(4, 0) = "Adam"
       saNames(4, 1) = "Johnson"
    
    ' Fill A2:B6 with an array of values (First and Last Names).
       oSheet.Range("A2", "B6").Value = saNames
    
    ' Fill C2:C6 with a relative formula (=A2 & " " & B2).
       Set oRng = oSheet.Range("C2", "C6")
       oRng.Formula = "=A2 & "" "" & B2"
    
    ' Fill D2:D6 with a formula(=RAND()*100000) and apply format.
       Set oRng = oSheet.Range("D2", "D6")
       oRng.Formula = "=RAND()*100000"
       oRng.NumberFormat = "$0.00"
    
    ' AutoFit columns A:D.
       Set oRng = oSheet.Range("A1", "D1")
       oRng.EntireColumn.AutoFit
    
    ' Manipulate a variable number of columns for Quarterly Sales Data.
       Call DisplayQuarterlySales(oSheet)
    
    ' Make sure Excel is visible and give the user control
     ' of Microsoft Excel's lifetime.
       oXL.Visible = True
       oXL.UserControl = True
    
    ' Make sure you release object references.
       Set oRng = Nothing
       Set oSheet = Nothing
       Set oWB = Nothing
       Set oXL = Nothing
    
    Exit Sub
    Err_Handler:
       MsgBox Err.Description, vbCritical, "Error: " & Err.Number
    End Sub
    
    Private Sub DisplayQuarterlySales(oWS As Excel.Worksheet)
       Dim oResizeRange As Excel.Range
       Dim oChart As Excel.Chart
       Dim iNumQtrs As Integer
       Dim sMsg As String
       Dim iRet As Integer
    
    ' Determine how many quarters to display data for.
       For iNumQtrs = 4 To 2 Step -1
          sMsg = "Enter sales data for" & Str(iNumQtrs) & " quarter(s)?"
          iRet = MsgBox(sMsg, vbYesNo Or vbQuestion _
             Or vbMsgBoxSetForeground, "Quarterly Sales")
          If iRet = vbYes Then Exit For
       Next iNumQtrs
    
    sMsg = "Displaying data for" & Str(iNumQtrs) & " quarter(s)."
       MsgBox sMsg, vbMsgBoxSetForeground, "Quarterly Sales"
    
    ' Starting at E1, fill headers for the number of columns selected.
       Set oResizeRange = oWS.Range("E1", "E1").Resize(ColumnSize:=iNumQtrs)
    
    oResizeRange.Formula = "=""Q"" & COLUMN()-4 & CHAR(10) & ""Sales"""
    
    ' Change the Orientation and WrapText properties for the headers.
       oResizeRange.Orientation = 38
       oResizeRange.WrapText = True
    
    ' Fill the interior color of the headers.
       oResizeRange.Interior.ColorIndex = 36
    
    ' Fill the columns with a formula and apply a number format.
       Set oResizeRange = oWS.Range("E2", "E6").Resize(ColumnSize:=iNumQtrs)
       oResizeRange.Formula = "=RAND()*100"
       oResizeRange.NumberFormat = "$0.00"
    
    ' Apply borders to the Sales data and headers.
       Set oResizeRange = oWS.Range("E1", "E6").Resize(ColumnSize:=iNumQtrs)
       oResizeRange.Borders.Weight = xlThin
    
    ' Add a Totals formula for the sales data and apply a border.
       Set oResizeRange = oWS.Range("E8", "E8").Resize(ColumnSize:=iNumQtrs)
       oResizeRange.Formula = "=SUM(E2:E6)"
       With oResizeRange.Borders(xlEdgeBottom)
          .LineStyle = xlDouble
          .Weight = xlThick
       End With
    
    ' Add a Chart for the selected data
       Set oResizeRange = oWS.Range("E2:E6").Resize(ColumnSize:=iNumQtrs)
       Set oChart = oWS.Parent.Charts.Add
       With oChart
          .ChartWizard oResizeRange, xl3DColumn, , xlColumns
          .SeriesCollection(1).XValues = oWS.Range("A2", "A6")
             For iRet = 1 To iNumQtrs
                .SeriesCollection(iRet).Name = "=""Q" & Str(iRet) & """"
             Next iRet
          .Location xlLocationAsObject, oWS.Name
       End With
    
    ' Move the chart so as not to cover your data.
       With oWS.Shapes("Chart 1")
          .Top = oWS.Rows(10).Top
          .Left = oWS.Columns(2).Left
    
    End With
    
    ' Free any references.
       Set oChart = Nothing
       Set oResizeRange = Nothing
    
    End Sub
    
    
  6. F5 키를 눌러 프로젝트를 실행합니다.