10 추가 Excel 객체 탐색

43760 단어

10.1 좋은 첫인상 만들기


10.1.1 우리 세상을 위해 착색


rgb(red:=[0,225],green:=[0,225],blue:=[0,225])
이 함수는 색을 나타내는 정수를 생성합니다.VBA는 vbBlack, vbRed 등 소량의 색 값을 미리 정의했다.
색깔의 즐거움
Sub ColorWorksheet()
    Dim ws As Worksheet
    Dim lRow As Long
    Dim lColumn As Long
    Dim lColor As Long
    
    Set ws = ThisWorkbook.Worksheets(1)
    lRow = 1
    lColumn = 1
    
    Application.ScreenUpdating = False
    Application.StatusBar = "On column " & lColumn
    
    '256 * 256 * 256 - 1
    For lColor = 0 To 256 * 256 * 256 - 1
        'record color
        ws.Cells(lRow, lColumn).Interior.Color = lColor
        
        'move to next cell
        lRow = lRow + 1
        
        'worksheet has 65,536 rows
        If lRow = 65537 Then
            lRow = 1
            lColumn = lColumn + 1
            Application.StatusBar = "On column " & lColumn
        End If
    Next
    
    Set ws = Nothing
    Application.ScreenUpdating = True
    Application.StatusBar = False
End Sub

색상을 표시할 수 있는 객체에는 ColorIndex 속성이 있습니다.속성 ColorIndex의 값은 색상 패널의 색인과 같습니다.색상 패널은 각 시트마다 고유합니다.

10.1.2 글씨체의 미세한 부분


Font 객체는 글꼴을 나타냅니다.일반 속성으로는 Bold, Color, Italic, Name, Size, Underline 등이 있습니다.Font 객체에 대한 자세한 내용은 다음을 참조하십시오.http://msdn.microsoft.com/en-us/library/ff840959(v=office.15).aspx
코드 목록 10.2: Font 객체 - 간단하고 직관적인 객체
Sub DemonstrateFontObject()
    Dim nColumn As Long
    Dim nRow As Long
    Dim avFonts As Variant
    
    Dim avColors As Variant
    
    For nColumn = 1 To 5
        With ThisWorkbook.Worksheets(1).Columns(nColumn).Font
            .Size = nColumn + 10
            If nColumn Mod 2 = 0 Then
                .Bold = True
                .Italic = False
            Else
                .Bold = False
                .Italic = True
            End If
        End With
    Next
       
    avFonts = Array("Tahoma", "Arial", "MS Sans Serif", "Verdana", "Georgia")
    avColors = Array(vbRed, vbBlue, vbBlack, vbGreen, vbYellow)
    For nRow = 1 To 5
        With ThisWorkbook.Worksheets(1).Rows(nRow).Font
            .Color = avColors(nRow - 1)
            .Name = avFonts(nRow - 1)
            
            If nRow Mod 2 = 0 Then
                .Underline = True
            Else
                .Underline = False
            End If
        End With
    Next
End Sub

 

10.1.3 내부 배치


Interior 객체는 범위 또는 기타 객체의 배경을 나타냅니다.참조:http://msdn.microsoft.com/en-us/library/ff196598(v=office.15).aspx
코드 리스트 10.3: Interior 객체를 사용하여 범위 배경을 변경합니다.
Sub InteriorExample()
    Dim rg As Range
    
    'create examples of each pattern
    Set rg = ThisWorkbook.Worksheets("Interior").Range("ListStart").Offset(1, 0)
    
    Do Until IsEmpty(rg)
        rg.Offset(0, 2).Interior.Pattern = rg.Offset(0, 1).Value
        rg.Offset(0, 3).Interior.Pattern = rg.Offset(0, 1).Value
        rg.Offset(0, 3).Interior.PatternColor = vbRed
        Set rg = rg.Offset(1, 0)
    Loop
    
    'create example of each vb defined color constant
    Set rg = ThisWorkbook.Worksheets("Interior").Range("ColorListStart").Offset(1, 0)
    Do Until IsEmpty(rg)
        rg.Offset(0, 2).Interior.Color = rg.Offset(0, 1).Value
        Set rg = rg.Offset(1, 0)
    Loop
    Set rg = Nothing
    
End Sub

위의 예는 도움말 파일에서 상수 이름과 대응하는 값을 복사해서 이름 (첫 번째 열) 과 값 (두 번째 열) 열에 붙여넣어야 합니다.
코드 목록 10.4: 색상 패널을 거닐다
Sub ViewWorkbookColors()
    Dim rg As Range
    Dim nIndex As Long
    
    Set rg = ThisWorkbook.Worksheets("Interior").Range("ColorIndexListStart").Offset(1, 0)
    
    For nIndex = 1 To 56
        rg.Value = nIndex
        rg.Offset(0, 1).Interior.ColorIndex = nIndex
        rg.Offset(0, 2).Value = rg.Offset(0, 1).Interior.Color
        
        Set rg = rg.Offset(1, 0)
    Next
    Set rg = Nothing
End Sub

작업용 얇은 색 패널에는 56개의 색이 저장되어 있으며, 색 인덱스의 범위는 1에서 56까지입니다.
 

10.1.4 이들 국경은 비자가 필요 없다


Range 객체에는 Borders 속성과 BordersAround 메서드가 있습니다.Range의 테두리를 조작하는 데 사용됩니다.Borders 속성은 Border 객체의 컬렉션을 반환합니다.
Range.Borders 속성, 참조:http://msdn.microsoft.com/en-us/library/ff822605(v=office.15).aspx
Borders 객체, 참조:http://msdn.microsoft.com/en-us/library/ff837809(v=office.15).aspx
Border 객체, 참조:http://msdn.microsoft.com/en-us/library/ff838428(v=office.15).aspx
코드 목록 10.5: Border 객체와 연관된 다양한 속성
Sub BorderLineStyles()
    Dim rg As Range
    Set rg = ThisWorkbook.Worksheets("Borders").Range("LineStyleListStart").Offset(1, 0)
    
    Do Until IsEmpty(rg)
        rg.Offset(0, 2).Borders(xlEdgeBottom).LineStyle = rg.Offset(0, 1).Value
        Set rg = rg.Offset(1, 0)
    Loop
    
    Set rg = Nothing    
End Sub

 
코드 리스트 10.6: 코드 리스트 10.5의 대체 방법
Sub BorderLineStyles2()
    Dim rg As Range
    Set rg = ThisWorkbook.Worksheets("Borders").Range("LineStyleListStart")
    
    rg.Offset(1, 2).Borders(xlEdgeBottom).LineStyle = xlContinuous
    rg.Offset(2, 2).Borders(xlEdgeBottom).LineStyle = xlDash
    rg.Offset(3, 2).Borders(xlEdgeBottom).LineStyle = xlDashDot
    rg.Offset(4, 2).Borders(xlEdgeBottom).LineStyle = xlDashDotDot
    rg.Offset(5, 2).Borders(xlEdgeBottom).LineStyle = xlDot
    rg.Offset(6, 2).Borders(xlEdgeBottom).LineStyle = xlDouble
    rg.Offset(7, 2).Borders(xlEdgeBottom).LineStyle = xlLineStyleNone
    rg.Offset(8, 2).Borders(xlEdgeBottom).LineStyle = xlSlantDashDot
    
    Set rg = Nothing
End Sub

expression.BorderAround(LineStyle, Weight, ColorIndex, Color, ThemeColor)
범위를 둘러싸고 경계를 생성하는 데 사용됩니다.참조:http://msdn.microsoft.com/en-us/library/ff197210(v=office.15).aspx
 

10.1.5 포맷된 숫자


NumberFormat 속성은 범위 값을 내보내는 방법을 설명하는 문자열입니다.
Excel 도움말에서 검색: 사용자 정의 디지털 형식을 만들거나 삭제하여 형식 문자열에 대한 자세한 설명을 볼 수 있습니다.
코드 리스트
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = Me.Range("FormatCode").Address Then
        ApplyFormatCode
    End If
End Sub
Private Sub ApplyFormatCode() 'if we attempt to apply an invalid 'number format code an error will 'occur - we need to catch it On Error GoTo ErrHandler 'clear any prior invalid code message Me.Range("FormatCode").Offset(0, 1).Value = "" 'attempt to apply the format code Me.Range("TestFormatCode").NumberFormat = Me.Range("formatcode").Value Exit Sub ErrHandler: 'OOPS-invalid format code 'set the format to general Me.Range("TestFormatCode").NumberFormat = "General" 'let the user know what happened Me.Range("FormatCode").Offset(0, 1).Value = "Invalid Format Code!" End Sub

 

10.1.6 워크시트 크기 조절 시 많은 시간 절약


다음 그림에서는 NumberFormat를 수정하여 숫자 표시를 확대/축소합니다.
코드 목록 10.8: 보고서에 동적 축소 제공
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = Me.Range("ScaleFactor").Address Then
        ScaleData
    End If    
End Sub

Private Sub ScaleData()
    If Me.Range("ScaleFactor").Value = "Normal" Then
        Me.Range("ScaleRange").NumberFormat = "#,##0"
    Else
        Me.Range("scaleRange").NumberFormat = "#,"
    End If
End Sub

 

10.2 차트 작업


10.2.1 처음부터 차트 만들기


코드 목록 10.9: ChartWizard 방법을 사용하여 새 차트 만들기
'creates a chart using the ChartWizard Method
Sub CreateExampleChartVersionI()
    Dim ws As Worksheet
    Dim rgChartData As Range
    Dim chrt As Chart
    
    Set ws = ThisWorkbook.Worksheets("Basic Chart")
    Set rgChartData = ws.Range("B1").CurrentRegion
    
    'create a new empty chart
    Set chrt = Charts.Add
    
    'embed chart in worksheet - this creates a new object
    Set chrt = chrt.Location(xlLocationAsObject, ws.Name)
    
    'use chart wizard to populate/format empty chart
    chrt.ChartWizard _
         Source:=rgChartData, _
         Gallery:=xlColumn, _
         Format:=1, _
         PlotBy:=xlColumns, _
         categorylabels:=1, _
         serieslabels:=1, _
         HasLegend:=True, _
         Title:="Gross Domestric Product Version I", _
         Categorytitle:="year", _
         valuetitle:="GDP in billions of $"
         
    Set chrt = Nothing
    Set rgChartData = Nothing
    Set ws = Nothing
End Sub

코드 목록 10.10:Chart 객체를 사용하여 차트 만들기
'creates a chart using basic chart properties and Methods
Sub CreateExampleChartVersionII()
    Dim ws As Worksheet
    Dim rgChartData As Range
    Dim chrt As Chart
    
    Set ws = ThisWorkbook.Worksheets("Basic Chart")
    Set rgChartData = ws.Range("B1").CurrentRegion
    
    'create a new empty chart
    Set chrt = Charts.Add
    
    'embed chart in worksheet - this creates a new object
    Set chrt = chrt.Location(xlLocationAsObject, ws.Name)
    
    With chrt
        .SetSourceData rgChartData, xlColumns
        .HasTitle = True
        .ChartTitle.Caption = "Gross Domestric Product Version II"
        .ChartType = xlConeColClustered
        
        With .Axes(xlCategory)
            .HasTitle = True
            .AxisTitle.Caption = "Year"
        End With
        
        With .Axes(xlValue)
            .HasTitle = True
            .AxisTitle.Caption = "GDP in billions of $"
        End With
    End With
         
    Set chrt = Nothing
    Set rgChartData = Nothing
    Set ws = Nothing    
End Sub

 

10.2.2 차트 검색


작업표처럼 도표 페이지를 인용할 수 있다
    Dim chrt1 As Chart 
    Dim chrt2 As Chart 
    
    'set a reference to the chart sheet named Chart4 
    Set chrt1 = ThisWorkbook.Charts("Chart4") 
        
    'set a reference to the 2nd chart sheet in this workbook 
    Set chrt2 = ThisWorkbook.Charts(2)

차트가 워크시트에 포함된 경우 ChartObjects 컬렉션을 사용해야 합니다.
    Dim ws As Worksheet 
    
    Dim chrt1 As Chart 
    Dim chrt2 As Chart 
    
    Set ws = ThisWorkbook.Worksheets(1) 
    
    'set a reference to the embedded chart named Chart4 
    Set chrt1 = ws.ChartObjects("Chart4").Chart 
        
    'set a reference to the 2nd embedded chart 
    Set chrt2 = ws.ChartObjects(2).Chart

 
코드 목록 10.11: 차트 제목을 사용하여 차트 찾기
'searches charts on a worksheet by chart title
Function GetChartByCaption(ws As Worksheet, sCaption As String) As Chart
    Dim cht As Chart
    Dim chtObj As ChartObject
    Dim sTitle As String
    
    Set cht = Nothing
    
    'loop through all chart objects on the ws
    For Each chtObj In ws.ChartObjects
        'make sure current chart object chart has a title
        If chtObj.Chart.HasTitle Then
            sTitle = chtObj.Chart.ChartTitle.Caption
            'is this title a match?
            If StrComp(sTitle, sCaption, vbTextCompare) = 0 Then
                ' bingo
                Set cht = chtObj.Chart
                Exit For
            End If
        End If
    Next    

    Set GetChartByCaption = cht

    Set chtObj = Nothing
    Set cht = Nothing
End Function

Sub TestGetChartByCaption()
    Dim ws As Worksheet
    Dim cht As Chart

    Set ws = ThisWorkbook.Worksheets("Basic Chart")
    Set cht = GetChartByCaption(ws, "I am the Chart Title")
    
    If Not cht Is Nothing Then
        MsgBox "Found chart"
    Else
        MsgBox "Sorry, Can not Found chart"    
    End If
    
    Set cht = Nothing
    Set ws = Nothing
End Sub

코드 목록 10.12: 기본 그래프 포맷
Sub FormattingCharts()
    Dim ws As Worksheet
    Dim cht As Chart
    Dim ax As Axis
    
    Set ws = ThisWorkbook.Worksheets("Basic Chart")
    Set cht = GetChartByCaption(ws, "GDP")
    
    If Not cht Is Nothing Then
        'Format category axis
        Set ax = cht.Axes(xlCategory)
        With ax
            .AxisTitle.Font.Size = 12
            .AxisTitle.Font.Color = vbRed
        End With
        
        'Format value axis
        Set ax = cht.Axes(xlValue)
        With ax
            .HasMinorGridlines = True
            .MinorGridlines.Border.LineStyle = xlDashDot
        End With
        
        'format plot area
        With cht.PlotArea
            .Border.LineStyle = xlDash
            .Border.Color = vbRed
            .Interior.Color = vbWhite
            .Width = cht.PlotArea.Width + 10
            .Height = cht.PlotArea.Height + 10            
        End With
        
        'format misc other
        cht.ChartArea.Interior.Color = vbWhite
        cht.Legend.Position = xlLegendPositionBottom
    End If
    
    Set ax = Nothing
    Set cht = Nothing
    Set ws = Nothing
End Sub

좋은 웹페이지 즐겨찾기