我正在将一些用于在 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
谁能给我解释一下:
如何修改此代码以消除阴影,以及
此代码如何运行,但将 SeriesCollection(1).Format.Shadow.Visible 设置为 msoFalse 却能够运行而没有任何明显效果?
根据下面的评论线程,这是左侧宏输出的屏幕截图,中间是打开然后关闭阴影的点,右侧是打开阴影的点。为了清楚起见,我编辑了宏以删除图例和网格线。 看起来宏输出的阴影比“shadow on”状态少,但比“shadow off”状态多。
最佳答案
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/