【问题标题】:Use MS Word VBA to increase weight of axes in graph embedded in a Word document使用 MS Word VBA 增加嵌入在 Word 文档中的图形中轴的权重
【发布时间】:2015-03-30 22:38:42
【问题描述】:

我可以使用以下代码在 Excel VBA 中控制图表的权重:

ActiveChart.Axes(xlCategory).Select
With Selection.Border
    .ColorIndex = 57
    .Weight = xlMedium
    .LineStyle = xlContinuous
End With

当我尝试在 Word VBA 中运行它时,我得到了错误

编译错误: 找不到方法或数据成员

.Border 突出显示。

我用代码做了实验

salesChart.Axes(xlCategory).Select
Selection.Borders(wdBorderBottom).Visible = True

收到消息

运行时错误“4605” 此方法或属性不可用,因为该对象引用了一个绘图对象。

我想找出一种方法来突出显示我通过 Word VBA 嵌入到 MS Word 文档中的图表中的轴

【问题讨论】:

  • 这张图表的出处是什么?如果它来自复制/粘贴特殊(增强的元文件),您可能无法访问相同的属性/等。可用于成熟的 MS Excel 图表。
  • 谢谢,@DavidZemens 这是在 Word 中生成的嵌入式图形: 将 salesChart 作为图表 将 chartWorkSheet 作为对象设置 salesChart = ActiveDocument.Shapes.AddChart.Chart Set chartWorkSheet = salesChart.ChartData.Workbook.WorkSheets(1 )您可能已经解决了这个问题,在这种情况下,我将不得不返回从 Word 中打开 Excel 并使用预先放置在那里的 VBA 代码,这当然就像一个魅力。不过,这很可惜。打开和关闭 Excel 更费时间,而且有点不雅。

标签: vba excel ms-word


【解决方案1】:

现在我更仔细地观察了一些事情。第一个 sn-p 是 Excel 代码,它在 Word 中无法运行也无法运行,实际上它引发了 compile 错误。

当我尝试在 Word VBA 中运行它时,我得到了错误

ActiveChart.Axes(xlCategory).Select
With Selection.Border
    .ColorIndex = 57
    .Weight = xlMedium
    .LineStyle = xlContinuous
End With

编译器会突出显示 .Border,因为 Word 中没有 Selection 对象的 Border 属性。

Selection 对象有点模棱两可,because it can be different things。可以把它想象成一个变体,它指的是选择的任何内容或光标点(如果没有选择任何内容)。

这就解释了method or data member not found 不是运行时错误,而是编译错误,表明您的代码可能无法按原样执行。

如果将SelectSelection 替换为对象本身,如下所示:

With ActiveChart.Axes(xlCategory).Border
    .ColorIndex = 57
    .Weight = xlMedium
    .LineStyle = xlContinuous
End With

你会得到另一个错误,因为在 Word 中没有 ActiveChart 这样的东西,它只是一个 Excel 对象。 (使用Option Explicit 会提醒您这个问题)。简而言之,您需要参考形状或图表,您可以使用形状上的句柄来执行此操作,就像您所做的那样,使用变量。试试:

With salesChart.Axes(xlCategory).Border
    .ColorIndex = 57
    .Weight = xlMedium
    .LineStyle = xlContinuous
End With

这可能有用:

How to avoid using Select in Excel VBA macros

虽然专门为 Excel 编写,但它是一个更好的编程概念:Select 是一种非常粗略的方式来处理大多数事情,尽管有一些例外,但几乎所有可以使用 VBA 执行的操作都可以通过直接更有效地完成使用对象,而不是先 选择 然后对 选择 采取行动——这是多余的。这也很混乱,因为您需要不断地选择事物,并且您的代码必然是模棱两可的,指的是模糊的 Selection 对象(变体)而不是强类型对象等。

【讨论】:

  • 牛眼!感谢您的回答......以及课程。
猜你喜欢
  • 2010-10-12
  • 1970-01-01
  • 1970-01-01
  • 2014-07-24
  • 1970-01-01
  • 1970-01-01
  • 2017-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多