본문 바로가기
언어 참조

개체, 메서드, 속성 및 이벤트 이해

2023. 7. 30.

이 글은 도움말을 번역한 내용입니다.

개체 및 컬렉션

개체는 워크시트, 셀, 차트, 양식 또는 보고서와 같은 응용 프로그램의 요소를 나타냅니다. Visual Basic 코드에서 개체의 메서드 중 하나를 적용하거나 해당 속성 중 하나의 값을 변경하려면 먼저 개체를 식별해야 합니다 .

 

개체를 식별한다는 말의 뜻을 알고 싶어서 ChatGPT에게 질문하고 답변받은 내용입니다.

Sub ManipulateWorksheet()
    ' 워크시트 개체를 식별하여 변수에 할당
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    
    ' 워크시트의 속성 변경
    ws.Name = "MyWorksheet" ' 워크시트 이름 변경
    
    ' 워크시트에 새로운 셀 값 입력
    ws.Range("A1").value = "Hello, World!"
    
    ' 워크시트에 차트 추가
    Dim cht As Chart
    Set cht = ws.Shapes.AddChart.Chart
    cht.ChartType = xlColumnClustered
    cht.SetSourceData Source:=ws.Range("A1:B5")
    
    ' 워크시트의 셀 서식 변경
    ws.Range("A1").Font.Bold = True
    ws.Range("A1").Font.Color = RGB(255, 0, 0)
    ws.Range("A1").Interior.Color = RGB(200, 200, 200)
End Sub

컬렉션(Collection)은 일반적으로 동일한 유형의 여러 개체를 포함하는 객체입니다. 하지만 항상 그렇지는 않습니다. 예를 들어 Microsoft Excel에서 Workbooks 객체는 열려 있는 모든 Workbook 객체를 포함하고 있습니다. Visual Basic에서 Forms 컬렉션은 애플리케이션 내의 모든 Form 객체들을 포함합니다.

 

엑셀로 몇가지 예를 들면 다음과 같은 컬렉션이 있습니다.

Workbooks,Worksheets,Sheets,Shapes,Ranges

 

컬렉션의 항목은 번호 또는 이름으로 식별할 수 있습니다.

Sub CollectionExample()
    Dim ws As Worksheet
    Dim rng As Range
    Dim wb As Workbook
    Dim colIndex As Long
    Dim wsName As String

    ' 엑셀 워크북에서 첫 번째 워크시트를 가져옵니다.
    Set ws = ThisWorkbook.Worksheets(1)

    ' 워크시트의 이름으로도 가져올 수 있습니다.
    wsName = "Sheet1"
    Set ws = ThisWorkbook.Worksheets(wsName)

    ' 워크시트에서 셀 A1을 가져옵니다.
    Set rng = ws.Range("A1")

    ' Range의 열 인스를 사용하여 셀을 가져올 수 있습니다.
    colIndex = 1
    Set rng = ws.Cells(1, colIndex)

    ' Workbook 컬렉션에서 첫 번째 워크북을 가져옵니다.
    Set wb = Application.Workbooks(1)

    ' 워크북의 이름으로 가져올 수 있습니다.
    Dim wbName As String
    wbName = "Book1"
    Set wb = Application.Workbooks(wbName)
End Sub

다음 프로시저에서는 문자열로 지정된 이름을 사용하여 워크시트 개체를 식별합니다.

Sub IdentifyWorksheetByName()
    Dim wsName As String
    Dim ws As Worksheet

    ' 찾고자 하는 워크시트의 이름을 문자열 변수에 지정합니다.
    wsName = "Sheet1"

    ' 문자열로 지정된 워크시트의 이름을 이용하여 해당 워크시트 객체를 식별합니다.
    ' 만약 해당 이름을 가진 워크시트가 없을 경우에는 오류가 발생할 수 있으므로
    ' 오류 처리에 유의해야 합니다. 이 예시에서는 오류 처리를 생략하였습니다.
    Set ws = ThisWorkbook.Worksheets(wsName)

    ' 원하는 작업을 수행합니다. 예를 들어 해당 워크시트의 정보를 출력합니다.
    MsgBox "찾은 워크시트 이름: " & ws.Name
End Sub

개체가 공통 메서드를 공유하는 경우 전체 개체 컬렉션을 조작할 수도 있습니다.

예를 들어, 다음 프로시저는 열려 있는 모든 폼을 닫습니다.

Sub CloseAll() 
 Forms.Close 
End Sub

다음은 VBA에서 For each 문을 이용해 작업하는 예제입니다.

Sub CloseAllWorkbooks()
    Dim wb As Workbook

    ' Application 객체의 Workbooks 컬렉션에서 모든 워크북을 순회하며 닫습니다.
    For Each wb In Application.Workbooks
        wb.Close SaveChanges:=False ' 저장하지 않고 워크북을 닫습니다.
    Next wb
End Sub
Sub DeleteAllObjects()
    Dim ws As Worksheet
    Dim cht As ChartObject

    ' 모든 워크시트 개체 컬렉션을 순회하며 삭제합니다.
    For Each ws In ThisWorkbook.Worksheets
        ws.Delete ' 각 워크시트 개체를 삭제합니다.
    Next ws

    ' 모든 차트 개체 컬렉션을 순회하며 삭제합니다.
    For Each cht In ThisWorkbook.Sheets("Sheet1").ChartObjects
        cht.Delete ' 각 차트 개체를 삭제합니다.
    Next cht
End Sub

개체 반환

모든 애플리케이션에는 애플리케이션에 포함된 객체를 반환하는 방법이 있습니다. 그러나 모두 동일하지는 않으므로 애플리케이션에서 사용 중인 개체 또는 컬렉션에 대한 도움말 항목을 참조하여 개체를 반환하는 방법을 확인해야 합니다.

 

Font속성은 Font 개체를 반환합니다.

Sub ChangeFontStyle()
    Dim myRange As Range
    Set myRange = Range("A1:B5")
    
    ' Range 개체의 Font 속성을 사용하여 폰트 스타일 변경
    myRange.Font.Name = "Arial"
    myRange.Font.Size = 12
    myRange.Font.Color = RGB(0, 0, 255) ' 파란색
    myRange.Font.Bold = True
End Sub

Cells속성은 Range개체를 반환합니다.

Sub UpdateCellValues()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    
    Dim targetRange As Range
    Set targetRange = ws.Range("A1:C3")
    
    Dim cell As Range
    For Each cell In targetRange.Cells
        ' 각 셀의 값에 "Value"를 추가합니다.
        cell.Value = cell.Value & " Value"
    Next cell
End Sub

메서드

메서드는 개체가 수행할 수 있는 동작입니다.

 

메서드 예제 - 1

 

Sub RangeMethodsExample()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    
    ' 원본 데이터가 있는 범위
    Dim sourceRange As Range
    Set sourceRange = ws.Range("A1:A5")
    
    ' 복사해서 붙여넣을 대상 범위
    Dim targetRange As Range
    Set targetRange = ws.Range("B1:B5")
    
    ' 원본 데이터를 복사하여 대상 범위에 붙여넣기
    sourceRange.Copy
    targetRange.PasteSpecial xlPasteValues ' 값만 붙여넣기
    
    ' 원본 데이터를 초기화하기 위해 원본 범위의 내용을 지우기
    sourceRange.ClearContents
End Sub

메서드 예제 - 2

 

Sub AdvancedFilterExample()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    
    ' 원본 데이터가 있는 범위
    Dim sourceRange As Range
    Set sourceRange = ws.Range("A1:E10")
    
    ' 고급 필터 조건 범위 (조건을 기록할 범위)
    Dim criteriaRange As Range
    Set criteriaRange = ws.Range("G1:H3")
    
    ' 결과를 출력할 범위
    Dim resultRange As Range
    Set resultRange = ws.Range("K1")
    
    ' 고급 필터 실행
    sourceRange.AdvancedFilter Action:=xlFilterInPlace, criteriaRange:=criteriaRange, Unique:=False
    
    ' 필터링된 결과를 resultRange에 복사
    sourceRange.SpecialCells(xlCellTypeVisible).Copy resultRange
    
    ' 필터 해제
    ws.ShowAllData
End Sub

메서드 예제 - 3

 

Sub FindExample()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    
    ' 원본 데이터가 있는 범위
    Dim dataRange As Range
    Set dataRange = ws.Range("A1:A10")
    
    ' 찾을 값을 지정
    Dim searchValue As String
    searchValue = "John"
    
    ' Find 메서드를 사용하여 값을 찾기
    Dim foundCell As Range
    Set foundCell = dataRange.Find(What:=searchValue, LookIn:=xlValues, LookAt:=xlWhole)
    
    ' 찾은 결과 출력
    If Not foundCell Is Nothing Then
        MsgBox "찾은 셀: " & foundCell.Address
    Else
        MsgBox "값을 찾지 못했습니다."
    End If
End Sub

메서드 예제 - 4

 

Sub MergeExample()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    
    ' 병합할 셀 범위 지정
    Dim mergeRange As Range
    Set mergeRange = ws.Range("A1:B2")
    
    ' 셀 병합
    mergeRange.Merge
End Sub

메서드 예제 - 5

 

Sub PrintWorksheet()
    ' 현재 활성화된 워크시트 인쇄하기
    ActiveSheet.PrintOut

    ' 현재 워크북의 모든 워크시트 인쇄하기
    'ThisWorkbook.PrintOut

    ' 특정 시트를 인쇄
    'Worksheets("시트명").PrintOut

    ' 페이지 지정하여 인쇄하기
    'ActiveSheet.PrintOut From:=1, To:=2 ' 1페이지부터 2페이지까지 인쇄
End Sub

메서드 예제 - 6

 

Sub SortExample()
    ' Worksheet 변수를 선언하고 "Sheet1" 시트를 참조합니다.
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    
    ' 정렬할 범위 지정
    Dim sortRange As Range
    Set sortRange = ws.Range("A1:F22")
    
    '정렬 방식 설정 (예 : 오름차순)
    Dim sortOrder As XlSortOrder
    sortOrder = xlAscending
    
    ' 정렬 실행
    sortRange.Sort Key1:=ws.Range("B1"), Order1:=sortOrder, Header:=xlYes
    
    ' 정렬 완료 메시지를 출력합니다.
    MsgBox "데이터가 오름차순으로 정렬되었습니다."
End Sub

속성

속성은 크기, 색상 또는 화면 위치와 같은 개체의 특성 중 하나 또는 활성화 또는 표시 여부와 같은 동작의 측면을 정의하는 개체의 속성입니다. 개체의 특성을 변경하려면 해당 개체의 속성 값을 변경합니다.

 

속성 값을 설정하려면 마침표, 속성 이름, 등호(=) 및 새 속성 값이 있는 개체에 대한 참조를 따릅니다.

속성 예제 - 1

Sub GetCellAddressExample()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    
    ' C3 셀의 주소 가져오기
    Dim cellAddress As String
    cellAddress = ws.Range("C3").Address
    
    ' 가져온 주소를 메시지 상자로 표시
    MsgBox "C3 셀의 주소: " & cellAddress
End Sub

속성 예제 - 2

Sub AddBordersExample()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    
    ' C4 셀에 테두리 추가 (전체 테두리)
    ws.Range("C4").Borders.LineStyle = xlContinuous
    ws.Range("C4").Borders.Weight = xlThin
    
    ' C4 셀의 테두리 색상 설정 (빨간색)
    ws.Range("C4").Borders.Color = RGB(255

속성 예제 - 3

Sub GetCellColumnExample()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    
    ' E7 셀이 위치한 열 번호 가져오기
    Dim cellColumn As Long
    cellColumn = ws.Range("E7").Column
    
    ' 가져온 열 번호를 메시지 상자로 표시
    MsgBox "E7 셀이 위치한 열 번호: " & cellColumn
End Sub

속성 예제 - 4

Sub GetFormulaExample()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    
    ' B2 셀의 수식 가져오기
    Dim formulaText As String
    formulaText = ws.Range("B2").Formula
    
    ' 가져온 수식을 메시지 상자로 표시
    MsgBox "B2 셀의 수식: " & formulaText
End Sub

속성 예제 - 5

Sub ChangeFontExample()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    
    ' A2 셀의 폰트 크기를 변경
    ws.Range("A2").Font.Size = 14
    
    ' A2 셀의 폰트 스타일을 변경 (굵게)
    ws.Range("A2").Font.Bold = True
End Sub

속성 예제 - 6

Sub ChangeInteriorExample()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    
    ' B3 셀의 배경색을 노란색으로 변경
    ws.Range("B3").Interior.Color = RGB(255, 255, 0)
    
    ' B3 셀의 배경 패턴을 변경 (선 없음)
    ws.Range("B3").Interior.Pattern = xlNone
End Sub

속성 예제 - 7

Sub CheckMergeCellsExample()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    
    ' F10 셀이 병합된 셀인지 확인
    Dim isMerged As Boolean
    isMerged = ws.Range("F10").MergeCells
    
    ' 병합 여부를 메시지 상자로 표시
    If isMerged Then
        MsgBox "F10셀은 병합된 셀입니다."
    Else
        MsgBox "F10셀은 병합되지 않은 셀입니다."
    End If
End Sub

속성 예제 - 8

Sub GetCellRowExample()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    
    ' D5 셀이 위치한 행 번호 가져오기
    Dim cellRow As Long
    cellRow = ws.Range("D5").Row
    
    ' 가져온 행 번호를 메시지 상자로 표시
    MsgBox "D5 셀이 위치한 행 번호: " & cellRow
End Sub

속성 예제 - 9

Sub GetValueExample()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    
    ' A1 셀의 값 가져오기
    Dim cellValue As String
    cellValue = ws.Range("A1").value
    
    ' 가져온 값을 메시지 상자로 표시
    MsgBox "A1 셀의 값: " & cellValue
End Sub

 

일부 속성은 설정할 수 없습니다. 각 속성에 대한 도움말 항목에는 해당 속성을 설정할 수 있는지(읽기-쓰기), 속성만 읽을 수 있는지(읽기 전용), 속성만 쓸 수 있는지(쓰기 전용)가 표시되어 있습니다.

Sub ReadWriteExample()
    Dim ws As Worksheet
    Dim rng As Range
    
    ' 워크시트에서 Range 개체를 가져옵니다.
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    
    ' A1 셀을 지정하는 Range 개체를 가져옵니다.
    Set rng = ws.Range("A1")
    
    ' Range 개체의 Value 속성에 값을 설정합니다.
    rng.value = "Hello, World!"
    
    ' Range 개체의 Value 속성으로 값을 읽어옵니다.
    Dim cellValue As String
    cellValue = rng.value
    
    ' 값을 출력합니다.
    MsgBox "Cell A1 contains: " & cellValue
End Sub

 

Sub ReadOnlyExample()
    Dim ws As Worksheet
    Dim rng As Range
    
    ' 워크시트에서 Range 개체를 가져옵니다.
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    
    ' A1 셀을 지정하는 Range 개체를 가져옵니다.
    Set rng = ws.Range("A1")
    
    ' Range 개체가 속한 행의 인덱스를 읽어옵니다. (읽기 전용)
    Dim rowIndex As Long
    rowIndex = rng.Row
    
    ' 행의 인덱스를 출력합니다.
    MsgBox "The range is in row: " & rowIndex
End Sub

이벤트

이벤트는 마우스를 클릭하거나 키를 누르는 등 객체가 인식하는 동작으로, 이에 응답하는 코드를 작성할 수 있습니다. 이벤트는 사용자 작업이나 프로그램 코드의 결과로 발생할 수도 있고 시스템에 의해 트리거될 수도 있습니다.

이벤트 예제 - 1

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    MsgBox "You clicked on cell " & Target.Address
End Sub

이벤트 예제 - 2

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    MsgBox "Worksheet " & Sh.Name & " has been changed."
End Sub

이벤트 예제 - 3

Private Sub Workbook_Open()
    MsgBox "Workbook has been opened!"
End Sub

이벤트 예제 - 4

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    MsgBox "Workbook is being saved!"
End Sub

이벤트 예제 - 5

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    MsgBox "Workbook is being closed!"
End Sub

이벤트 예제 - 6

Private Sub Workbook_NewSheet(ByVal Sh As Object)
    MsgBox "New worksheet " & Sh.Name & " has been added!"
End Sub

이벤트 예제 - 7

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If Me.Saved = False Then
        MsgBox "Workbook has unsaved changes!"
    End If
End Sub

이벤트 예제 - 8

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    ' BeforeDoubleClick 이벤트 발생 시 실행되는 코드
    ' Target은 더블 클릭한 셀을 나타냅니다.
    ' Cancel 변수를 True로 설정하면 기본 이벤트 동작이 취소됩니다.

    Dim clickedCellAddress As String
    clickedCellAddress = Target.Address

    MsgBox "You double-clicked on cell: " & clickedCellAddress

    ' 기본 이벤트 동작을 취소합니다.
    Cancel = True
End Sub

이벤트 예제 - 9

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    ' BeforeRightClick 이벤트 발생 시 실행되는 코드
    ' Target은 오른쪽 클릭한 셀을 나타냅니다.
    ' Cancel 변수를 True로 설정하면 기본 이벤트 동작이 취소됩니다.

    Dim clickedCellAddress As String
    clickedCellAddress = Target.Address

    MsgBox "You right-clicked on cell: " & clickedCellAddress

    ' 기본 이벤트 동작을 취소합니다.
    Cancel = True
End Sub

 

도움말 출처

 

Understanding objects, methods, properties, and events (VBA)

Office VBA reference topic

learn.microsoft.com

 

'언어 참조' 카테고리의 다른 글

실행 문 작성  (0) 2023.07.30
이름 충돌 피하기  (0) 2023.07.30
개체 변수 만들기  (0) 2023.07.29
Set 문  (0) 2023.07.29
Let 문  (0) 2023.07.29