excel - 关闭 vba 生成的 Excel 绘图上的标记阴影

标签 excel vba macos

我正在将一些用于在 Excel 中生成散点图的代码从 Win 7/Excel 2010 移植到 OS X/Excel 2011。在 Mac 上,数据点显示有阴影。我不想要阴影,而且我不知道如何消除它。

使用this worksheet (如果您不想下载启用宏的工作表,则单元格 A1:B6 中只有随机数)以下代码运行良好,但会生成带有阴影的数据点:

Sub plotNoShadow()

  Dim x As Range
  Dim y As Range

  Dim cht As ChartObject

  Set x = ActiveSheet.Range("A1:A6") 'haphazard numbers
  Set y = ActiveSheet.Range("B1:B6")

  Set cht = ActiveSheet.ChartObjects.Add(Left:=150, Top:=50, Width:=200, Height:=160)
  With cht.Chart
    .ChartType = xlXYScatter
    .SeriesCollection.NewSeries
    With .SeriesCollection(1)
        .XValues = x
        .Values = y
        .Format.Shadow.Visible = msoFalse 'This seems to parse, but have no effect
    End With
    .SetElement (msoElementLegendNone)
    .SetElement (msoElementPrimaryValueGridLinesNone)
  End With      
End Sub

谁能给我解释一下:

  1. 如何修改此代码以消除阴影,以及

  2. 此代码如何运行,但将 SeriesCollection(1).Format.Shadow.Visible 设置为 msoFalse 却能够运行而没有任何明显效果?

根据下面的评论线程,这是左侧宏输出的屏幕截图,中间是打开然后关闭阴影的点,右侧是打开阴影的点。为了清楚起见,我编辑了宏以删除图例和网格线。 看起来宏输出的阴影比“shadow on”状态少,但比“shadow off”状态多。

Screencap to illustrate the three states of shadow existence

最佳答案

Excel 中的几种默认图表样式会产生轻微的 3D 效果,同时也会产生轻微的阴影,如前所述。

在我的 Excel(Windows 7 中)上,默认图表样式为 2,因此不会出现阴影或 3D 效果。我怀疑在 Mac 上,默认的图表样式是不同的。

要解决此问题,您可以在代码中设置图表样式:

With cht.Chart
  .ChartType = xlXYScatter
  .ChartStyle = 2
  .....

在 Excel 中,ChartStyle 设置能够修改图表外观的所有方面,包括标记的外观。 MarkStyle 设置的唯一内容是标记的形状。当图表样式更改时,标记的所有其他外观方面都会被覆盖。

编辑

上面的评论基本上还是正确的,但是我已经找到了关闭阴影的方法。与 Excel 中的许多事情一样,它并不像您想象的那么容易。如果在代码中完成设置阴影的可见性属性(无论出于何种原因),则不会产生任何效果,因此您需要将阴影类型设置为“无阴影”。

Sub plotNoShadow()

  Dim x As Range
  Dim y As Range

  Dim cht As ChartObject

  Set x = ActiveSheet.Range("A1:A6") 'haphazard numbers
  Set y = ActiveSheet.Range("B1:B6")

  Set cht = ActiveSheet.ChartObjects.Add(Left:=150, Top:=50, Width:=200, Height:=160)
  With cht.Chart
    .ChartType = xlXYScatter
    .ChartStyle = 26 'Something 3D with a default shadow. This line can be left out.
    .SeriesCollection.NewSeries
    With .SeriesCollection(1)
        .XValues = x
        .Values = y
        .Format.Shadow.Type = msoShadow30 'This is the code for an inner shadow
    End With
  .SetElement (msoElementLegendNone)
  .SetElement (msoElementPrimaryValueGridLinesNone)
  End With

End Sub

再次编辑

实际上,msoShadow30 是一种“内部阴影”样式,根据您的标记样式,可能看起来很奇怪。 msoShadow41 是我能找到的最接近“No Shadow”的东西。它实际上是下面的阴影代码,但是默认情况下,它太微弱了,看不到。如果它确实出现,可以随时更改颜色以使其消失。

或者更好,将透明度设置为 1(完全透明):

.Format.Shadow.Transparency = 1.0 'Fully transparent

关于excel - 关闭 vba 生成的 Excel 绘图上的标记阴影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10178990/

相关文章:

excel - 用于更改过滤器的宏按钮

internet-explorer - 使用VBA将网址发送到事件的IE窗口

iphone - 要下载哪个 iPhone SDK?

macos - 自 macOS Big Sur 更新以来,GitKraken 非常慢

vba - 如何在单元格自动更改值时创建警报?

vba - 如何使用宏在 Excel 中缩放图表特定区域

excel - 具有 OR 标准的 VBA Countif

vba - 打印宏 - 问题

ios - 坚持创建事件和格式化日期(Swift - EventKit - OS X)

excel - 在Excel中抓取斜杠之间的文本