以编程方式更改边框线时Excel 2007图表不更新

时间:2012-08-13 03:15:52

标签: excel vba excel-vba charts lines

我很确定这是一个错误,但也许我错过了一些东西。

所以表面图(所有线条都可见)就是我想要的:

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年工作所以我正在寻找解决方案。有人请吗?

1 个答案:

答案 0 :(得分:0)

很抱歉花了这么长时间回复,但我试图在我的虚拟机上安装Excel 2007但似乎我的虚拟机给了我麻烦,所以我没有在Excel 2007中测试过这段代码,但我相信它应该可行。

这就是我一直建议不要使用“Active-Something”的原因。无论是ActiveCellActiveSheetActiveworkbook等等。始终声明您的变量,然后使用变量。你永远不会出错。见这个例子

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