ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 4303|回复: 7

[求助]线柱图代码出错问题,请求帮助

[复制链接]

TA的精华主题

TA的得分主题

发表于 2005-6-7 05:49 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

昨天在chenjun apolloh两位版主的指导下,我学习了二个不同的方法制作了"线柱图",当我使用代码自动生成该"线柱图",遇到几个问题,还请大家继续赐教:

说明:这里有三个宏,第一个,基本上是录制的宏,我略作修改,该宏运行一直正常(十多次);

第二个宏,我以MYCHART的对象部分进行了调整,运行结果时灵时不灵,有时可以正常运行,有时却是出错,错误代码:ActiveChart.Axes(xlCategory, xlSecondary).CategoryType = xlCategoryScale

错误号:1004(附件中有)

第三个宏,我直接以ADD后的ACTIVECHART进行属性设置,基本不能正确运行,出错代码:

.HasAxis(xlCategory, xlPrimary) = True,错误号:-2147221080

守柔求助的问题是:

如何正确设置代码?如何精简代码?

另外,在 ActiveChart.ApplyCustomType ChartType:=xlBuiltIn, TypeName:="线-柱图" 的代码中,如果ChartType:=xlBuiltIn(自定义的内部图表),如何取得TypeName,或者说如何返加工作表中活动图表的TYPENAME的值,其常量是多少?另外,受版本的影响,该"线-柱图"的英文名称是什么?

我查阅了一下XlChartType常量,其中未有涉及,简单地搜索了一下MSDN也未找到相关资料,还请大家为我释疑,谢谢.

我的版本号见签名.

Option Explicit Sub Macro2() Range("A1:M5").Select Charts.Add ActiveChart.ApplyCustomType ChartType:=xlBuiltIn, TypeName:="线-柱图" ActiveChart.SetSourceData Source:=Sheets("Sheet2").Range("A1:M5"), PlotBy:= _ xlRows ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet2" With ActiveChart .HasAxis(xlCategory, xlPrimary) = True .HasAxis(xlCategory, xlSecondary) = False .HasAxis(xlValue, xlPrimary) = True .HasAxis(xlValue, xlSecondary) = True End With ActiveChart.Axes(xlCategory, xlPrimary).CategoryType = xlCategoryScale ActiveChart.Axes(xlCategory, xlSecondary).CategoryType = xlCategoryScale ActiveChart.HasLegend = True ActiveChart.Legend.Position = xlBottom End Sub

'---------------------------------------------------------------------------------------------------------------- Sub Macro3() Dim MyChart As Chart ' Range("A1:M5").Select Set MyChart = ActiveWorkbook.Charts.Add With MyChart .ApplyCustomType ChartType:=xlBuiltIn, TypeName:="线-柱图" .SetSourceData Source:=Sheets("Sheet2").Range("A1:M5"), PlotBy:= _ xlRows .Location Where:=xlLocationAsObject, Name:="Sheet2" End With With ActiveChart .HasAxis(xlCategory, xlPrimary) = True .HasAxis(xlCategory, xlSecondary) = False .HasAxis(xlValue, xlPrimary) = True .HasAxis(xlValue, xlSecondary) = True End With ActiveChart.Axes(xlCategory, xlPrimary).CategoryType = xlCategoryScale ActiveChart.Axes(xlCategory, xlSecondary).CategoryType = xlCategoryScale With ActiveChart .HasLegend = True .Legend.Position = xlBottom End With End Sub

'----------------------------------------------------------------------------------------------------------------

Sub Macro4() ActiveWorkbook.Charts.Add With ActiveChart .ApplyCustomType ChartType:=xlBuiltIn, TypeName:="线-柱图" .SetSourceData Source:=Sheets("Sheet2").Range("A1:M5"), PlotBy:= _ xlRows .Location Where:=xlLocationAsObject, Name:="Sheet2" .HasAxis(xlCategory, xlPrimary) = True .HasAxis(xlCategory, xlSecondary) = False .HasAxis(xlValue, xlPrimary) = True .HasAxis(xlValue, xlSecondary) = True .Axes(xlCategory, xlPrimary).CategoryType = xlCategoryScale .Axes(xlCategory, xlSecondary).CategoryType = xlCategoryScale .HasLegend = True .Legend.Position = xlBottom End With End Sub

TA的精华主题

TA的得分主题

发表于 2005-6-7 09:31 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
一个想法,用VBA做图表不建议调用自定义图表,直接通过程序生成也是比较方便的,而且对版本和安装组件的多少没有影响。 ActiveChart.Axes(xlCategory, xlSecondary).CategoryType = xlCategoryScale这句要能正确执行,必须先将图表中的某个系列绘制在次坐标轴后(这时已经有了Axes(xlSecondary))才可以,事实上.HasAxis(xlValue, xlSecondary) = True并不能保证图表有次数值轴,还是要先有系列绘制在次坐标轴后才可以。 其他的我再看看。

TA的精华主题

TA的得分主题

发表于 2005-6-7 09:34 | 显示全部楼层
另外,在 ActiveChart.ApplyCustomType ChartType:=xlBuiltIn, TypeName:="线-柱图" 的代码中,如果ChartType:=xlBuiltIn(自定义的内部图表),如何取得TypeName,或者说如何返加工作表中活动图表的TYPENAME的值,其常量是多少?另外,受版本的影响,该"线-柱图"的英文名称是什么? 这里的"线-柱图"就是加载的自定义图表工程中一个图表工作表的名称,不同语言版本肯定有区别的,英文版我也没有。

TA的精华主题

TA的得分主题

发表于 2005-6-7 10:09 | 显示全部楼层
我做了一个,直接在工作表的指定区域上生成。 Sub DrawChart() Dim oRng As Range, oChartOb As ChartObject, oChart As Chart Set oRng = Worksheets("sheet2").Range("C7:J23") Set oChartOb = Worksheets("sheet2").ChartObjects.Add(oRng.Left, oRng.Top, _ oRng.Width, oRng.Height) Set oChart = oChartOb.Chart With oChart .ChartType = xlColumnClustered .SetSourceData Source:=Worksheets("Sheet2").Range("A1:M5"), PlotBy:=xlRows .SeriesCollection(4).AxisGroup = xlSecondary .SeriesCollection(4).ChartType = xlLineMarkers .SeriesCollection(3).AxisGroup = xlSecondary .SeriesCollection(3).ChartType = xlLineMarkers End With End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-6-7 10:27 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
以下是引用chenjun在2005-6-7 10:09:00的发言: 我做了一个,直接在工作表的指定区域上生成。 Sub DrawChart() Dim oRng As Range, oChartOb As ChartObject, oChart As Chart Set oRng = Worksheets("sheet2").Range("C7:J23") Set oChartOb = Worksheets("sheet2").ChartObjects.Add(oRng.Left, oRng.Top, _ oRng.Width, oRng.Height) Set oChart = oChartOb.Chart With oChart .ChartType = xlColumnClustered .SetSourceData Source:=Worksheets("Sheet2").Range("A1:M5"), PlotBy:=xlRows .SeriesCollection(4).AxisGroup = xlSecondary .SeriesCollection(4).ChartType = xlLineMarkers .SeriesCollection(3).AxisGroup = xlSecondary .SeriesCollection(3).ChartType = xlLineMarkers End With End Sub
非常感谢chenjun版主的指导!谢谢.

TA的精华主题

TA的得分主题

发表于 2005-6-28 15:36 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
好象是查到原因了,使用自定义图表类型时,设置类型的语句应该放在设置数据源的语句后。 Set MyChart = ActiveWorkbook.Charts.Add With MyChart .SetSourceData Source:=Sheets("Sheet2").Range("A1:M5"), PlotBy:= _ xlRows .ApplyCustomType ChartType:=xlBuiltIn, TypeName:="线-柱图" .Location Where:=xlLocationAsObject, Name:="Sheet2" End With 这样就可以了,另 Sub Macro2() Range("A1:M5").Select Charts.Add ActiveChart.ApplyCustomType ChartType:=xlBuiltIn, TypeName:="线-柱图" ActiveChart.SetSourceData Source:=Sheets("Sheet2").Range("A1:M5"), PlotBy:= _ xlRows ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet2" 可以的原因是 Range("A1:M5").Select Charts.Add 已经对图表数据源赋值了,后面的一句SetSourceData相当于修改数据源。

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-6-29 07:04 | 显示全部楼层

非常感谢陈军兄的释疑解惑!

"使用自定义图表类型时,设置类型的语句应该放在设置数据源的语句后",这句话也想也应该可以推广到内置图表中,也就是说,先有数据源,然后再设置图表类型是一个正确的思路,否则,连数据源是否符合都不知道,便先设定其类型,有些"透支"了?

在实际测试过程中(时间关系,我可能考虑得还是有些不周到)

我发现,定义的MyChart对象,仍然不能直接赋予其对象/属性的设置,仍然出现错误,当然,主要问题已经解决了.

请看以下代码:

Sub Macro3() Dim MyChart As Chart Set MyChart = ActiveWorkbook.Charts.Add With MyChart .SetSourceData Source:=Sheets("Sheet2").Range("A1:M5"), PlotBy:= _ xlRows .ApplyCustomType ChartType:=xlBuiltIn, TypeName:="Ïß-Öùͼ" .Location Where:=xlLocationAsObject, Name:="Sheet2" End With ' Set MyChart = ActiveWorkbook.Charts(ActiveWorkbook.Charts.Count) Set MyChart = ActiveChart With MyChart .HasAxis(xlCategory, xlPrimary) = True .HasAxis(xlCategory, xlSecondary) = False .HasAxis(xlValue, xlPrimary) = True .HasAxis(xlValue, xlSecondary) = True .Axes(xlCategory, xlPrimary).CategoryType = xlCategoryScale .Axes(xlCategory, xlSecondary).CategoryType = xlCategoryScale .HasLegend = True .Legend.Position = xlBottom End With End Sub

在这段代码中,如果继续使用mychart对象,不再重新定义时,仍然出错,把它刷新为 ' Set MyChart = ActiveWorkbook.Charts(ActiveWorkbook.Charts.Count)时,也还是出错,只有直接使用ACITVECHART对象时(With ActiveChart)可以正常. 或者将其重新定义为 Set MyChart = ActiveChart

我查阅了相关帮助文件,没有指定这些属性必须应用于ACTIVECHART对象上,只是CHART对象.还请陈军兄抽空研究一下.

再次感谢.

TA的精华主题

TA的得分主题

发表于 2005-6-29 09:58 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Set MyChart = ActiveWorkbook.Charts.Add 定义了MyChart为一个chart工作表,执行完 .Location Where:=xlLocationAsObject, Name:="Sheet2" 后,这个chart工作表已不存在,所以如果不重新定义就不能继续使用MyChart变量,而这时ActiveChart已经是sheet2中的嵌入chart对象,所以重新set mychart后就可以使用mychart变量了。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-5-20 10:26 , Processed in 0.035460 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表