7

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

使用此工作表(如果您不想下载启用宏的工作表,它在单元格 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”状态的阴影多。

截图说明影子存在的三种状态

4

6 回答 6

6

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

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

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

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

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

编辑

上面的评论基本还是对的,不过我找到了关掉影子的方法。与 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是我能找到的最接近“无影”的东西。其实就是下面阴影的代码,但是默认的太微弱了,看不出来。如果确实出现了,可以随时更改颜色以使其消失。

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

.Format.Shadow.Transparency = 1.0 'Fully transparent
于 2012-04-16T20:42:36.690 回答
2

你看到的影子其实不是影子。我的意思是这是标记看起来没有阴影的默认方式。

不幸的是,您对此无能为力。看看下面的快照,你就会明白我的意思。

快照:

在此处输入图像描述

选择:

但是,您可以使用标记大小来最小化这种影响。试试这个代码。

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)
        .MarkerStyle = 2
        .MarkerSize = 7
        .XValues = x
        .Values = y
        .Format.Shadow.Visible = msoFalse 'This seems to parse, but have no effect
    End With
  End With

End Sub
于 2012-04-16T18:16:43.417 回答
2

Mac Excel 图表中这种无缘无故的多余格式严重阻碍了我的许多程序到 Mac 的转换。幸运的是我发现:

ActiveChart.ChartStyle = 2

它应用了没有阴影、渐变和发光的默认格式。无需返回并重新格式化图表中每个系列的每个小细节。

于 2014-04-27T18:26:19.407 回答
1

单击数据系列,转到格式化数据系列。在阴影选项下,“阴影”框可能会被取消选中,对吧?核实。这将激活下面的编辑控件。然后将“透明度”设置为 100%。您还可以将“颜色”设置为白色。

于 2012-07-13T22:23:11.550 回答
0

您可以通过图表图例消除阴影:

cht.Chart.Legend.LegendEntries(1).LegendKey.Shadow = False

于 2012-04-25T03:36:07.053 回答
0

不能容忍这种不守规矩的图表行为!停止阴暗系列...

With .Shadow
    .ForeColor.RGB = &HFFFFFF
    .Visible = msoFalse
End With
于 2015-03-31T00:03:08.053 回答