0

动态更改图表配置

组合图表,混合了线条和面积系列类型。VBA 代码根据工作表类模块中的计算表更改每个系列的类型,以访问系列属性和操作它们的方法。目前,只需从下拉列表中选择图表类型,并使用工作表上的更改事件来解析每个图表并依次更改每个图表的属性。

属性改变:

series Type (xlArea,xlLine)
series Format.Line.Forecolor.RGB 
       Format.Fill.Forecolor.RGB 
       (Long: colours based cell.Interior.Color)

series Format.Line.Width (Single)

series Format.Fill.Transparency
       Format.Line.Transparency (Double: 0 to 1)
series Pattern for area Type
       seriesname.Format.Fill.Patterned if required  (MsoPatternType)
       seriesname.Format.Fill.Solid if not required

问题陈述

对于我的图表类型 1,系列 2 是 XLline,对于图表类型 2,它是 XLarea

我已经使用图表类型 1 运行了数周,并动态更改颜色、透明度和图表可见性系列值和 XValue 是命名范围,它们动态指向适当的向量(范围对象)

我现在介绍图表类型 2

当我切换到图表类型 2 并返回图表类型 1 时,我无法再设置线条颜色、透明度或宽度设置。

我在 excel 应用程序中有一些组合图表,我想动态更改图表以响应用户输入。我已经成功地做到了这一点并且一切正常,直到我尝试将系列类型从 Line 动态更改为 Area 以用于一种模式,然后根据需要再次返回到原​​始配置。

行为

如果我手动选择有问题的系列并打开格式对话框并稍微更改透明度设置(只需轻推零即可),重量和颜色设置会跳回原始设置,并且可以再次更改VBA。

我也可以通过在线路选项中再次手动选择“无线路”来实现相同的目的。当我单击“无线”时,它只会闪烁一秒钟,但会保持“实线”设置。如果我第二次单击“No Line”,它会如您预期的那样消失。

好像是通过手动轻推格式设置来释放某些东西...

我有一种感觉,它与边界和一些遗留问题有关。它就像这条线在它作为一个区域的生命之后有边界,并且它再也不会一样了。我认为你从一个区域转换后得到的线对象可能是几个三明治,没有野餐......我认为它必须默认为 2003 类型的格式对象,但我不知道如何管理它。

我在 Windows 7 上使用 excel 2013。

我检查了该行是否设置为可见,并且我还注意到 Format.Fill.Visible 在违规行上是 msoFalse ,而在图表上的另一行上是 msoFalse (尚未转换为原始类型)。

我一直在使用类模块管理所有图表,包括以下内容:

Property Let sType(SeriesType As Long)
    With CurrChart.SeriesCollection(Indx)
        .Type = SeriesType
    End With
End Property

Public Sub noMarkers()
    With CurrChart.SeriesCollection(Indx)
        .MarkerStyle = xlMarkerStyleNone
    End With
End Sub


Property Let LineWeight(w)

With CurrChart.SeriesCollection(Indx)
    .Format.Line.Weight = w
End With
End Property

Property Let LineVisible(v)
With CurrChart.SeriesCollection(Indx)
    .Format.Line.Visible = v
End With
End Property

如上所述,在我击中这个之前,一切都进行得很好。我确定我在做一些愚蠢的事情,所以我希望有人能提出前进的道路。

如果有人有用于枚举系列对象的代码,这将有所帮助,那么我可以制表并比较系列中有效和无效的差异。

任何建议将不胜感激。

4

1 回答 1

0

5个小时的睡眠可以为你做的事情真是太神奇了……

该问题是由在恢复为 XLline 类型时未正确设置 series.Border 和 series.Format.Line.Visible 属性引起的。

我正在为区域模式关闭线路可见性,而不是在恢复到线路时将其重新打开。恢复为线型时,我还必须设置 series.Border.LineStyle = xlNone(XLHairline 也可以)。边框被打开,作为更改为 XLArea 类型的副作用。

我看到的线是位于实际线顶部并遮住它的系列边界。所以当我修改底层线的属性时,没有明显的变化。

导致问题的边框属性未记录在 MSDN 的在线文档中,并且在 VBE 中可用对象的下拉列表中不可见。我想这是一个需要解决的遗留难题。

于 2013-10-28T08:33:28.303 回答