ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: ivccav

[原创] 玩转VBA窗体图表——MSChart控件详细教程

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-23 18:15 | 显示全部楼层
本帖已被收录到知识树中,索引项:控件
本帖最后由 ivccav 于 2019-1-23 18:18 编辑
zopey 发表于 2019-1-23 13:56
请问,这个MSChart 绘图 有没有滚动条,用来展示比较长的 数据区间?

比如 股票收盘均价历史图,累计下 ...




MSChart没有滚动条的,我在图表缩放那节也说明了。EXCEL工作表的图表也没有滚动条。

但是可以把MSChart放在Frame框架里面,修改控件的Width和Height就可以方便的做滚动条。


当时觉得这个功能很容易实现,就没有写代码。已经重新更新了附件,应该是能实现的。


你查询的数据本来就知道大概大小,直接设置控件的高度和宽度,并直接修改框架的滚动条就好了,缩放都可以不要。


gdt.gif

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-24 14:22 | 显示全部楼层


在多条件切片时,越发觉得MSChart好用,因为可以用SQL语句处理。

如:http://club.excelhome.net/thread-1458482-1-1.html


135805ug356tit9965tdic.gif

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-24 19:32 | 显示全部楼层
zopey 发表于 2019-1-23 13:56
请问,这个MSChart 绘图 有没有滚动条,用来展示比较长的 数据区间?

比如 股票收盘均价历史图,累计下 ...



你自己去试验吧,MSChart控件的宽度是单精度单位磅,

我设置为很大的值,都是没有问题的,只是有没有必要。


2019-01-24_181605.png

2019-01-24_181631.png

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-1-24 19:43 | 显示全部楼层
感觉并没有一次加载全部有效、真实的数据(屏幕不够长),
而是 通过 拉动滚动条事件, 动态的刷新显示后面的数据。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-24 19:51 | 显示全部楼层
zopey 发表于 2019-1-24 19:43
感觉并没有一次加载全部有效、真实的数据(屏幕不够长),
而是 通过 拉动滚动条事件, 动态的刷新显示后 ...



我也有给MSChart添加滚动条的代码,但是想想要自己写滚动条事件,

太麻烦,就懒得用滚动条了,直接借用窗体或框架的滚动条也够用了。

  1. Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
  2. Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
  3. Private Const GWL_STYLE = (-16)
  4. Private Const WS_HSCROLL = &H100000
  5. Private Const WS_VSCROLL = &H200000

  6. Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As

  7. Long, ByVal wFlags As Long) As Long
  8. Private Const SWP_NOSIZE = &H1
  9. Private Const SWP_NOZORDER = &H4
  10. Private Const SWP_FRAMECHANGED = &H20
  11. Private Const SWP_NOMOVE = &H2


  12. Private Sub ModifyStyle()
  13.     Dim lStyle As Long
  14.     lStyle = GetWindowLong(MSChart1.hwnd, GWL_STYLE)
  15.     SetWindowLong MSChart1.hwnd, GWL_STYLE, lStyle Or WS_HSCROLL Or WS_VSCROLL
  16.     SetWindowPos MSChart1.hwnd, 0&, 0&, 0&, 0&, 0&, SWP_NOSIZE Or SWP_NOZORDER Or SWP_FRAMECHANGED Or SWP_NOMOVE
  17. End Sub

  18. Private Sub UserForm_Initialize()
  19.   ModifyStyle
  20. End Sub
复制代码



2019-01-24_194102.png


TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-29 20:36 | 显示全部楼层

等有时间看看能不能给图表写给滚动条事件。。。。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-2-1 16:21 | 显示全部楼层
本帖最后由 ivccav 于 2019-2-1 16:23 编辑


图表保存为其他格式时,可用如下代码(未测试):


2019-02-01_162026.png

把图表保存为JPG、TIFF、PNG、GIF、BMP格式的方法.zip (14.75 KB, 下载次数: 297)

TA的精华主题

TA的得分主题

发表于 2019-2-11 18:58 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
ivccav 发表于 2019-1-24 19:51
我也有给MSChart添加滚动条的代码,但是想想要自己写滚动条事件,

太麻烦,就懒得用滚动条了,直 ...

自己完成滚动条事件要考虑的细节很多,感觉没有必要,直接使用窗体或框架的滚动条足矣。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-2-15 22:57 | 显示全部楼层
不知何故 发表于 2019-2-11 18:58
自己完成滚动条事件要考虑的细节很多,感觉没有必要,直接使用窗体或框架的滚动条足矣。

图表比较难,使用的人需要比较高的基础,因此关注的人比较少,不搞那么复杂了。

在窗体上绘制图表,有这些知识足够了。滚动条是没有必要的,也可以用其他方式代替。

TA的精华主题

TA的得分主题

发表于 2019-2-16 11:37 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-26 16:42 , Processed in 0.050777 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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