基于单元格内容复制和粘贴图表的宏

4

有一个初学者宏编写者的问题需要解答!我正在尝试让下拉菜单控制显示在工作表上的图表。

现在,我有一个带有类别(例如 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,在那时宏运行得非常好。但是,保存并重新打开文件后,宏就再也无法正常工作了(也许这些信息有用)。


当宏崩溃时,你收到的错误信息是什么?如果你使用F8逐步执行宏,你应该能够在该行执行之前看到(c)的值。这两个信息将有助于确定问题所在。 - Darrell H
在法语中:执行错误'1004':由应用程序或对象定义的错误。(猜测这是运行时错误1004“应用程序定义或对象定义的错误”。) - Jonathan Gariepy
我尝试运行它并通过即时窗口(?c)对变量c进行了查询,它返回了payB。 - Jonathan Gariepy
下面的回答中有很好的建议。我尝试复制您的错误,但无法复制。我使用="Pay"&A5进行连接,这个公式在您的E38中,并收到了PayB,它起作用了。如下所述,您可能需要确保没有空格或其他格式问题导致问题。 - Darrell H
我似乎已经通过将ActiveSheet.ChartObjects(c).Copy更改为ActiveSheet.ChartObjects(c).Chart.ChartArea.Copy来解决了它...不过根据下面的答案,我计划进行一些更改。肯定学到了很多! - Jonathan Gariepy
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接