VBA:格式化多个选定的图表

时间:2016-01-28 16:12:49

标签: excel vba excel-vba charts

我希望使用VBA在Excel 2010上格式化多个选定的图表。当只选择一个图表但是当选择了多个图表时,下面的代码工作,我得到一个“运行时错误'91'对象变量或没有设置块变量”。知道如何为选定的图表的数量运行宏吗?

Sub ChartFormat5_Click()


''Adjust chart area

'Size
Selection.Width = 631.9
Selection.Height = 290.1

'Border
With Selection.Format.Line
    .Visible = msoTrue
    .ForeColor.ObjectThemeColor = msoThemeColorText1
    .ForeColor.TintAndShade = 0
    .ForeColor.Brightness = 0
    .Transparency = 0
    .Weight = 1
    .DashStyle = msoLineSolid
End With

'Font
With Selection.Format.TextFrame2.TextRange.Font
    .Name = "Calibri"
    .Size = 10
    .Fill.Visible = msoTrue
    .Fill.ForeColor.ObjectThemeColor = msoThemeColorText1
    .Fill.ForeColor.TintAndShade = 0
    .Fill.ForeColor.Brightness = 0
    .Fill.Transparency = 0
    .Fill.Solid
End With


End Sub

谢谢!

3 个答案:

答案 0 :(得分:1)

经过一些试验 - 错误后,如果您只选择了一个或多个图表,我就会想出如何使其正常工作。这很简单,但是当我测试它时,这很有用。

请注意,我将实际的图表区域格式化为一个单独的子目录。

Sub ChartFormat5_Click()

    Select Case TypeName(Selection)

        Case Is = "ChartArea" `only 1 selected

            FormatChart Selection

        Case Is = "DrawingObjects" 'more than 1 selected

            Dim cht As ChartObject
            For Each cht In Selection
                FormatChart cht.Chart.ChartArea
            Next

    End Select

End Sub

Sub FormatChart(chtArea As ChartArea)

With chtArea

    'size
    .Width = 631.9
    .Height = 290.1

    With .Format
        'Border
        With .Line
            .Visible = msoTrue
            .ForeColor.ObjectThemeColor = msoThemeColorText1
            .ForeColor.TintAndShade = 0
            .ForeColor.Brightness = 0
            .Transparency = 0
            .Weight = 1
            .DashStyle = msoLineSolid
        End With

        'Font
        With .TextFrame2.TextRange.Font
            .Name = "Calibri"
            .Size = 10
            With .Fill
                .Visible = msoTrue
                With .ForeColor
                    .ObjectThemeColor = msoThemeColorText1
                    .TintAndShade = 0
                    .Brightness = 0
                End With
                .Transparency = 0
                .Solid
            End With
        End With
    End With
End With

End Sub

答案 1 :(得分:1)

这将处理活动图表或所有选定图表。第一个例程确定要处理的内容(活动图表或选定图表)和第二个例程。

Sub FormatCharts()
  Dim obj As Object

  If Not ActiveChart Is Nothing Then
    FormatOneChart ActiveChart
  Else
    For Each obj In Selection
      If TypeName(obj) = "ChartObject" Then
        FormatOneChart obj.Chart
      End If
    Next
  End If
End Sub

Sub FormatOneChart(cht As Chart)
  ' do all your formatting here, based on cht not on ActiveChart
End Sub

不要选择图表的某些部分,只需完全引用它们即可。而不是

ActiveChart.ChartArea.Select
With Selection.Format.Line

使用此

With cht.ChartArea.Format.Line

注意:这是VBA: Formatting Multiple Selected Charts (Chart, Plot, Legend, etc.)

的副本

答案 2 :(得分:0)

Hy尝试:

Sub ChartFormat5_Click_v02()

  For i = 1 To Application.Sheets.Count

    Application.Sheets(i).Activate

    For j = 1 To ActiveSheet.ChartObjects.Count

        ActiveSheet.ChartObjects(j).Activate


        'your code here

    Next j

  Next i

End Sub