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

Dre*_*een 7 excel vba excel-vba excel-vba-mac

我正在移植一些代码,用于在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
Run Code Online (Sandbox Code Playgroud)

任何人都可以向我解释:

  1. 如何修改此代码以删除阴影,和

  2. 如何运行此代码,但将SeriesCollection(1).Format.Shadow.Visible设置为msoFalse可以运行而不会产生任何明显的影响?

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

Screencap来说明阴影存在的三种状态

Ste*_*bob 6

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

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

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

With cht.Chart
  .ChartType = xlXYScatter
  .ChartStyle = 2
  .....
Run Code Online (Sandbox Code Playgroud)

在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
Run Code Online (Sandbox Code Playgroud)

再次编辑

实际上,这msoShadow30是一种"内部阴影"风格,根据您的标记风格可能看起来很奇怪. msoShadow41是我能找到的最接近"无阴影"的东西.它实际上是下面阴影的代码,但默认情况下,它看起来太微弱了.如果确实显示,则可以始终更改颜色以使其消失.

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

.Format.Shadow.Transparency = 1.0 'Fully transparent
Run Code Online (Sandbox Code Playgroud)