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)
任何人都可以向我解释:
如何修改此代码以删除阴影,和
如何运行此代码,但将SeriesCollection(1).Format.Shadow.Visible设置为msoFalse可以运行而不会产生任何明显的影响?
根据下面的评论帖子,这里是左侧宏输出的屏幕截图,阴影打开,然后在中间关闭,阴影在右侧打开.为清晰起见,我编辑了宏以删除图例和网格线.看起来宏输出的阴影比"阴影开启"状态少,但阴影比"阴影关闭"状态更多.

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)