根据单元格内容复制粘贴图表的宏

时间:2018-08-29 19:36:35

标签: vba excel-vba

这里是初学者宏观主义者的一个问题!我试图通过一个下拉菜单来控制工作表上显示的图表。

现在我有一个带有类别(例如A,B和C)的下拉菜单。

我在工作表的某个位置为每个类别创建了一个图表(例如,名为payA,payB和payC的图表)。

接下来,我有一个单元格引用该单元格,该单元格将“ pay”一词和下拉菜单中的字母连接起来,以构成与图表名称相同的内容。

我希望我的宏删除仪表板上的图表(命名为payDisplay),根据单元格复制适当的图表(在此示例中,串联将在单元格EY38中),将其粘贴到适当的单元格(B34中此示例中,原来是payDisplay的位置),然后将新图表重命名为payDisplay。

Sub Change_Pay()
    Dim c As String

    c = Range("EY38").Value

    ActiveSheet.ChartObjects("payDisplay").Delete
    ActiveSheet.ChartObjects(c).Copy
    ActiveSheet.Range("B34").Select
    ActiveSheet.Paste
    ActiveChart.Parent.Name = "payDisplay"
End Sub

我的宏在ActiveSheet.ChartObjects(c).Copy行上不断崩溃。

每当我打开工作表时,都会出现错误,并继续将图表粘贴到正确的位置,名称为payDisplay,此时宏可以正常工作。保存并重新打开文件后,宏不再起作用(也许该信息很有用)。

1 个答案:

答案 0 :(得分:1)

好的,我想可以为您提供帮助

请检查单元格EY38的格式。删除所有会引起错误的“或”。

第二个来自一个也开始录制宏的人的建议:

尽可能不要使用激活和选择。这很慢,分析起来很痛苦,而且容易出错。

这里有一个代码示例,它与您的代码功能相同,但没有激活并选择。

Sub Change_Pay()
    Dim c As String
    Dim COdel As ChartObject
    Dim COcopy As ChartObject
    Dim sht As Worksheet
    c = Range("EY34").Value
    Set sht = Worksheets(1) ' worksheet object instead of activesheet

    Set COdel = sht.ChartObjects("payDisplay") ' Chartobject instead of activesheet.chartobjects("")
    Set COcopy = sht.ChartObjects(c)

    COdel.Delete
    COcopy.Copy Destination:=sht.Range("B34") ' No need to select and paste if you give it the destination
    COcopy.Parent.Name = "payDisplay"
End Sub