Excel VBA宏,用于从多个表生成图形 - 嵌套宏

时间:2018-05-04 20:30:56

标签: excel excel-vba vba

我有一个宏可根据我的选择自动生成图表。如果我选择一个表,这可以正常工作。我必须一次选择一个表来生成图表。有没有办法设置嵌套宏来选择工作表并为每个表生成单独的图表?

任何输入都将受到赞赏。谢谢:)

宏生成一个图表

' Macro3宏 '键盘快捷键:Ctrl + a

子图()

Dim rng As Range
Dim cht As ChartObject

Set rng = Selection
rng(1, 1).Clear
Set cht = ActiveSheet.ChartObjects.Add( _
    Left:=ActiveCell.Left, _
    Width:=450, _
    Top:=ActiveCell.Top, _
    Height:=250)

'Give chart some data
cht.Chart.SetSourceData Source:=rng

'Determine the chart type
cht.Chart.ChartType = xlLine

'Ensure chart has a title
cht.Chart.HasTitle = True

'Change chart's title
cht.Chart.ChartTitle.Text = "My Graph"


'Add Legend to the Bottom
cht.Chart.SetElement (msoElementLegendBottom)

End Sub

表1: 期间BA BC BD BE 20174 4.1 4.1 4.1 4.1000 20181 4.0 4.5 5.0 5.0544 20182 4.0 5.3 6.5 6.2598 20183 3.9 5.8 7.6 7.4139 20184 3.8 6.3 8.5 8.5021 20191 3.8 6.6 9.3 9.1129 20192 3.8 6.9 9.7 9.5360 20193 3.8 7.0 10.0 10.0037 20194 3.7 7.0 9.9 9.8787 20201 3.8 6.9 9.7 9.6216 20202 3.9 6.8 9.5 9.3975 20203 4.0 6.6 9.2 9.2134 20204 4.0 6.5 8.9 9.0484 20211 4.1 6.3 8.6 8.8423

表2: 期间CA CC CD CE 20174 -5.38462 -5.3846 -5.3846 -5.3846 20181-6.97674 4.6512 16.2791 17.5446 20182-2.43902 29.2683 58.5366 52.6777 20183 -2.50000 28.8889 52.0000 46.6822 20184 -5.00000 18.8679 30.7692 35.8204 20191-2.56410 13.7931 22.3684 22.9164 20192 .00000 9.5238 14.1176 12.1615 20193 .00000 6.0606 7.5269 9.7749 20194-2.63158 1.4493 2.0619 3.5928 20201 .00000 -1.4286 -3.0000 -3.8200 20202 5.40541 -2.8571 -4.0404 -4.8709 20203 5.26316 -4.3478 -5.1546 -4.2420 20204 2.56410 -4.4118 -6.3158 -3.7151 20211 2.50000 -4.5455 -6.5217 -4.0282

1 个答案:

答案 0 :(得分:0)

  1. 格式化您要用作的数据范围的每个单元格区域 图表,我建议通过键盘上的CTRL + T格式化为Excel表格。

  2. 重命名每个表格。 <使用表设计功能区>名称,您可以在其中更改表名远离Table1,Table2,...

  3. 的默认值
  4. 在VBA中,引用或循环遍历工作簿中的每个表,它们是根据excel VBA引用的ListObjects。

    Dim ListObj As Excel.ListObject
    Dim ws As worksheet
    
    For Each ListObj In ws.ListObjects
        ' make a chart
    Next ListObj
    
  5. 其他方法可以根据您格式化/设置/引用数据范围的方式工作。

    您可以创建自己的命名范围来引用表格,表1:“A1:Z4”等然后参考代码中的那些或列出其地址(“A1:Z4”)(“AA1: AZ4“)包含在VBA等中。与将数据格式化为excel表相比,这些可能有效,但灵活性较低。