【问题标题】:Running a VBA script from a button after selecting a chart选择图表后从按钮运行 VBA 脚本
【发布时间】:2015-10-30 17:38:49
【问题描述】:

我在 Windows 7 上运行 Excel 2010。

我在工作表上有四个图表。我要做的是选择一个图表,然后单击一个按钮以打开“格式轴”对话框。我在网上找到以下代码打开对话框。如果我选择一个图表,然后从工具栏中运行代码(开发人员选项卡,宏,选择宏,按“运行”),它运行良好。

Sub formatXAxis1()
    ActiveChart.Axes(xlCategory).Select
    Application.CommandBars.ExecuteMso "ChartFormatSelection"
End Sub

我遇到的麻烦是当 VBA 脚本被分配给一个按钮时。如果我使用形状作为按钮,我会得到“运行时错误‘91’:对象变量或未设置块变量”。如果我使用 ActiveX 命令按钮,我会得到同样的错误。但是,使用表单控件按钮,它可以按预期工作。此解决方案的唯一问题是无法更改按钮的背景颜色,因此与工作表上的其他宏调用按钮相比,它显得格格不入。

我猜在前两种情况下(形状和 ActiveX 按钮),当我按下按钮时,VBA 会丢失或丢失图表选择——即使图表仍然显示在屏幕上。有没有办法解决这个问题,还是我做错了什么?

【问题讨论】:

  • 一个笨重的版本只是添加四个按钮,每个按钮对应每个图表。之后您可以通过 Chart ID 调用它。
  • 您可以将宏分配给任何形状,包括文本框,不是吗?这些可以格式化。
  • 我试过文本框。不幸的是,它们的行为就像我原来的博客中描述的规则形状。

标签: vba excel


【解决方案1】:

对于一个ActiveX按钮,在Properties中设置属性

TakeFocusOnClick

False。这将导致Selection 保留在图表上而不是切换到按钮,并且您的代码应该可以工作。也可以从属性框中更改颜色,尽管您可能已经知道了。

【讨论】:

  • 谢谢约翰 - 这正是我想要的。
【解决方案2】:

您需要按名称引用图表。所以要么有 4 个按钮(每个图表一个),要么要求用户输入图表的名称,然后:

Dim co as ChartObject
Dim c as Chart
Dim NameOfChart as String

NameOfChart = Inputbox("Enter name of chart")
Set co = ActiveSheet.ChartObjects(NameOfChart)
Set c = co.chart
c.Axes(xlCategory).Select
Application.CommandBars.ExecuteMso "ChartFormatSelection"

【讨论】:

  • 感谢 Excel 开发人员。您的指导非常有帮助,尽管很遗憾似乎无法按照我的意愿行事。我认为对于图表选择部分,我将首先考虑添加一个额外的按钮来切换四个图表。
猜你喜欢
  • 1970-01-01
  • 2015-06-21
  • 1970-01-01
  • 2018-04-15
  • 2021-10-16
  • 1970-01-01
  • 2013-10-24
  • 1970-01-01
相关资源
最近更新 更多