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

时间:2012-04-16 17:46:17

标签: excel-vba excel-vba-mac vba excel

我正在移植一些代码,用于在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会设置运行而不会产生任何明显影响?

  3. 根据下面的评论帖子,这里是左侧宏输出的屏幕截图,阴影打开然后在中间关闭,阴影在右边打开。为清晰起见,我编辑了宏以删除图例和网格线。 看起来宏输出的阴影比“阴影开启”状态少,但阴影比“阴影关闭”状态更多。

    Screencap to illustrate the three states of shadow existence

6 个答案:

答案 0 :(得分:6)

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

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

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

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

在Excel中,ChartStyle设置可以修改图表外观的所有方面,包括标记的外观。 MarkStyle唯一设置的是Marker的形状。更改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

答案 1 :(得分:2)

你看到的阴影实际上不是影子。我的意思是,这是标记在没有阴影的情况下的默认方式。

不幸的是,你无法做很多事情。看下面的快照,你会知道我的意思。

<强>快照:

enter image description here

<强>替代:

但是,您可以使用标记大小来最小化该效果。试试这段代码。

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

答案 2 :(得分:2)

Mac Excel图表中这种无端过多的格式化严重阻碍了我的许多程序转换为Mac。幸运的是我发现了:

ActiveChart.ChartStyle = 2

应用默认格式,不带阴影,渐变和发光。无需返回并重新格式化图表中每个系列的每个细节。

答案 3 :(得分:1)

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

答案 4 :(得分:0)

您可以通过图表图例终止阴影:

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

答案 5 :(得分:0)

这种不守规矩的图表行为是不能容忍的! Desist shadowy系列......

With .Shadow
    .ForeColor.RGB = &HFFFFFF
    .Visible = msoFalse
End With