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

问题描述 投票:4回答:1

初学者宏在这里有一个问题!我试图让一个下拉菜单控制工作表上显示的图表。

现在我有一个带有类别的下拉菜单(比如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,并且宏在这一点上正常工作。保存并重新打开文件后,宏不再起作用(可能该信息很有用)。

vba excel-vba
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.