ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] VBA如何获取图形里当前点击选中的数据点位置

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-6-26 00:35 | 显示全部楼层 |阅读模式


如下图:我做成折线图,当我点击图形里数据点的时候,小心移动图形会显示当前选中的数据点是第几条。但当我有很多行数据的时候,这个不容易对准。有没有方法,例如点击图形的时候激发一个宏,把当前选中的数据点是属于哪行的保存在一个单元格中,这样好让我知道我点中的是哪行数据?!
我录制宏,发现当我点击某数据点的时候,出现如下代码:ActiveChart.FullSeriesCollection(1).Points(2939).Select。里面的这个2939就是这条线所选数据点的位置,我是想问怎么获得2939这个数?怎么写?
还有其它获得当前选中数据点的方法吗?

image.png

VBA如何获取图形数据点位置.zip

73.84 KB, 下载次数: 4

TA的精华主题

TA的得分主题

发表于 2023-6-26 08:38 | 显示全部楼层
可以用Point.Name,得到所需要的值。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-6-26 08:45 | 显示全部楼层
对图表的事件不熟悉,所以做了个按钮,通过单击刷新来获取值,供您参考。

选中点后,刷新

选中点后,刷新

VBA如何获取图形数据点位置.rar

78.57 KB, 下载次数: 7

供您参考。

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-6-26 10:20 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-6-26 14:52 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
十分感谢。测试成功,虽然不能做到捕抓图形事件自动赋值,半自动的也能解决问题。

TA的精华主题

TA的得分主题

发表于 2023-7-1 07:21 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
找了很久了

TA的精华主题

TA的得分主题

发表于 2023-7-1 08:27 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
chengsijing 发表于 2023-6-26 14:52
十分感谢。测试成功,虽然不能做到捕抓图形事件自动赋值,半自动的也能解决问题。

增加一个类模块,实现了自动刷新点座标功能。供您参考!


Public WithEvents objChart As Chart

Private Sub objChart_Select(ByVal ElementID As Long, ByVal Arg1 As Long, ByVal Arg2 As Long)
    Dim p As Point
    On Error Resume Next
    Set p = Selection
    If TypeName(p) = "Point" Then
         Sheet1.Cells(2, "E") = p.Name
         ActiveChart.SetElement (msoElementDataLabelTop)
         Sheet1.Cells(3, "E") = p.DataLabel.Text
         ActiveChart.SetElement (msoElementDataLabelNone)
         Debug.Print ElementID, Arg1, Arg2
     End If
End Sub

VBA如何获取图形数据点位置.rar

78.3 KB, 下载次数: 5

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-2 19:46 | 显示全部楼层
512008404 发表于 2023-7-1 08:27
增加一个类模块,实现了自动刷新点座标功能。供您参考!

谢谢,我看看

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-2 19:51 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
512008404 发表于 2023-7-1 08:27
增加一个类模块,实现了自动刷新点座标功能。供您参考!

果然自动,厉害

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-2 19:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
512008404 发表于 2023-7-1 08:27
增加一个类模块,实现了自动刷新点座标功能。供您参考!

最近在用VBA写程序,之前都是用MDB数据库做测试,想转到SQL数据库,发现一个问题,就是代码不变,我只是把MDB数据库的ODBC连接换成SQL,读取一次速度就慢了7秒左右(5万条记录左右,MDB方式要1.3秒左右,SQL方式要8.5秒左右)。太离谱了。请问您知道原因吗?有改进的余地吗?这种情况不应该啊,SQL数据库应该比MDB数据库更快才对。

大概代码如下:
  1. Sub ceshi()
  2. #If ProjectStatus = "DEV" Then
  3.     Dim cn As ADODB.Connection
  4.     Dim rs As ADODB.Recordset
  5.     Set cn = New ADODB.Connection
  6.     Set rs = New ADODB.Recordset
  7. #Else
  8.     Dim cn As Object
  9.     Dim rs As Object
  10.     Set cn = CreateObject("ADODB.Connection")
  11.     Set rs = CreateObject("ADODB.Recordset")

  12. #End If
  13.    
  14.     Dim lianjie As String, shijian As Double, dayArr() As Variant
  15.     lianjie = .Cells(1, 1).Value  'MDB数据库和SQL数据库的选择
  16.     shijian = Timer()
  17.     With cn
  18.         If lianjie = "本地" Then
  19.             Sql = "select * from ceshi where dt<#" & Now() & "#"
  20.             .Provider = "Microsoft.ACE.oledb.12.0"
  21.             .ConnectionString = "data source=" & ActiveWorkbook.Path & "\test.mdb"
  22.         Else
  23.             Sql = "select * from ceshi where dt<'" & Now() & "'"
  24.             
  25.             .Provider = "sqloledb"
  26.             .ConnectionString = "Server=.;Database=test;Uid=sa;Pwd=sa;"
  27.         End If
  28.         .Open
  29.     End With
  30.     rs.Open Sql, cn, 1, 1
  31.     hangCount = rs.RecordCount
  32.     If hangCount > 0 Then
  33.         dayArr = rs.GetRows
  34.         Debug.Print Format(Timer - shijian, "0.0")  '就载入记录集就 差了7秒左右。
  35.         '.........
  36.         
  37.     End If
  38.    
  39.     Erase dayArr
  40.     rs.Close
  41.     Set rs = Nothing
  42.     cn.Close
  43.     Set cn = Nothing
  44. End Sub
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-16 21:55 , Processed in 0.034975 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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