我很确定这是一个错误,但也许我错过了一些东西。
所以表面图(所有线条都可见)就是我想要的:
( ed:好的,我试图发布图片,但这件事不让我发帖导致它的新帐户..但你明白这个想法)
为此,我创建了我的数据表,然后应该运行此代码:
Sub test()
Charts.Add
ActiveChart.charttype = xlSurface
test2
End Sub
Sub test2()
Dim a
For Each a In ActiveChart.Legend.LegendEntries
a.LegendKey.Format.Line.Visible = msoTrue
a.LegendKey.Format.Line.ForeColor.RGB = RGB(0, 0, 0)
ActiveChart.Refresh
Next a
End Sub
如果我运行test()
,我会获得图表但没有行(这是默认的excel)。
如果我再次重新运行test2
,则线条会填满。
当然,这绝对没有意义。
我绝不是一个新手(我帮助在我的个人帐户中回答了几个问题,但在工作中被阻止访问)。我已尝试DoEvents
而不是ActiveChart.Refresh
,但没有骰子。我也非常确定它在excel 2010中正常工作(这是我在家里第一次尝试这一点)所以这似乎是2007年的一个错误。错误或没有我必须在2007年工作所以我正在寻找解决方案。有人请吗?
答案 0 :(得分:0)
很抱歉花了这么长时间回复,但我试图在我的虚拟机上安装Excel 2007但似乎我的虚拟机给了我麻烦,所以我没有在Excel 2007中测试过这段代码,但我相信它应该可行。
这就是我一直建议不要使用“Active-Something”的原因。无论是ActiveCell
,ActiveSheet
,Activeworkbook
等等。始终声明您的变量,然后使用变量。你永远不会出错。见这个例子
Sub test()
Dim objChrt As ChartObject
Set objChrt = ActiveSheet.ChartObjects.Add _
(Left:=50, Width:=200, Top:=50, Height:=200)
With objChrt
.Chart.SetSourceData Source:=Sheets("Sheet1").Range("A1:C5")
.Chart.ChartType = xlSurface
test2 .Chart
End With
End Sub
Sub test2(chrt As Chart)
Dim a
For Each a In chrt.Legend.LegendEntries
a.LegendKey.Format.Line.Visible = msoTrue
a.LegendKey.Format.Line.ForeColor.RGB = RGB(0, 0, 0)
chrt.Refresh
Next a
End Sub