ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] EXCEL DDE 和 RTD 資料連結更新問題請教

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-10-23 14:16 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
liucqa 发表于 2016-10-22 10:03
临时的办法,可以考虑在关闭workbook的时候,copy数值到一个副本sheet保留单元格内容

感謝您 !
在沒有其他解決辦法之前,我就採這招好了

TA的精华主题

TA的得分主题

发表于 2016-10-24 19:15 | 显示全部楼层
seer_et 发表于 2016-10-20 16:57
我嘗試在Excel Private Sub Workbook_Open()加入
m = MsgBox("資料是否要連結更新 ?", 4 + 64, "RTD連結 ...

在Workbook_Open()时设置 Application.RTD.ThrottleInterval = 1000,由于1秒时间太短,可能你还未看到显示的旧数据,就被新Get到的数据覆盖了。
测试下:确认RTD已经取到数据,Workbook_Close()将Application.RTD.ThrottleInterval =-1,保存后再打开,显见的数据应该是保存前的数据。我这里测试是这样的

TA的精华主题

TA的得分主题

发表于 2016-10-24 19:55 来自手机 | 显示全部楼层
yachtz 发表于 2016-10-24 19:15
在Workbook_Open()时设置 Application.RTD.ThrottleInterval = 1000,由于1秒时间太短,可能你还未看到显 ...

你那个ConnectData 怎么写的返回值和newValues,发来我看看呗。我这边测试是不管用的,即使设成-1,在连接的时候也要读一下值的,或者显示0(如果设成false)

TA的精华主题

TA的得分主题

发表于 2016-10-24 20:49 | 显示全部楼层
本帖最后由 yachtz 于 2016-10-24 21:30 编辑
liucqa 发表于 2016-10-24 19:55
你那个ConnectData 怎么写的返回值和newValues,发来我看看呗。我这边测试是不管用的,即使设成-1,在连 ...

我把GetNewValuesFalse作为RTD函数的一个参数传到RTD Server上去,这样客户端可以按要求设置。网站很卡~~

怎么上传GIF动图?



你测试下吧,用Regsvr32注册附件的DLL即可使用,RTD Server名及参数见附件工作簿内。配置为Excel2013 + Win7 RTD Server.rar (30.04 KB, 下载次数: 11)


TA的精华主题

TA的得分主题

 楼主| 发表于 2016-10-24 23:57 | 显示全部楼层
yachtz 发表于 2016-10-24 19:15
在Workbook_Open()时设置 Application.RTD.ThrottleInterval = 1000,由于1秒时间太短,可能你还未看到显 ...

我很藍瘦,香菇 ...
始終沒法得到未更新的數據
腆顏惠請具體給我完整步驟,謝謝
配置為Win7+Excel2013

TA的精华主题

TA的得分主题

发表于 2016-10-25 08:12 来自手机 | 显示全部楼层
seer_et 发表于 2016-10-24 23:57
我很藍瘦,香菇 ...
始終沒法得到未更新的數據
腆顏惠請具體給我完整步驟,謝謝

你可能得找一下开发插件的,让他把newValue这个参数改成false。才能达到楼上那个vb插件的效果。

另外,要在插件里面定时检测rtd的刷新间隔是不是大于0,好能够自动更新。

TA的精华主题

TA的得分主题

发表于 2016-10-25 09:08 | 显示全部楼层
yachtz 发表于 2016-10-24 20:49
我把GetNewValuesFalse作为RTD函数的一个参数传到RTD Server上去,这样客户端可以按要求设置。网站很卡~~ ...

我知道问题出在哪了

你是用com addins开发的,使用前需要安装,rtd com只注册一次。这样下次excel打开文件的时候,会取缓存值。

我是用exceldna开发,xll无需安装,rtd server是按需注册,也就是每次xll加载的时候会重新注册一个com,这样excel会认为有了一个新的rtd server,不会取缓存值,使用的默认值可能是NA或者NULL,在工作表上反馈的是0.

考虑两者之间的优劣,可以在开发的时候,视情况考虑采用哪种方案。

TA的精华主题

TA的得分主题

发表于 2016-10-25 11:50 | 显示全部楼层
有道理!
不知楼主的RTD Serever是用什么语言写的。如果RTD Serever端没设置此参数的代码,客户端是没法解决这问题的

TA的精华主题

TA的得分主题

发表于 2016-10-25 13:16 | 显示全部楼层
本帖最后由 liucqa 于 2016-10-25 13:22 编辑
yachtz 发表于 2016-10-25 11:50
有道理!
不知楼主的RTD Serever是用什么语言写的。如果RTD Serever端没设置此参数的代码,客户端是没法解 ...
像楼主的问题,肯定是要找原来的作者修改代码了,这个也算是开发时候的一个Bug吧

*************************


newValue=True也可以实现false的功能,但是代码费点劲。
我改了一下RTD工作逻辑,让它取之前在工作表上保留的单元格值,然后再ConnectData的时候再写回去就行了,这样使用者在打开工作簿的时候也能看到上次保存的值了,避免返回固定的初始值。

当然,如果要长时间保留,还得在工作簿的BeforeClose事件里面关闭RTD,否则一刷新就没了。


我把代码发给老外了,看看他们测试是不是没问题。



...

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-10-26 11:29 | 显示全部楼层
我新建Workbook_2,所有的儲存格連結Workbook_1對應的儲存格,以此可以保留未更新的數據(等同liucqa大說的:copy数值到一个副本sheet保留单元格内容)
暫時這樣了
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-4-17 06:33 , Processed in 0.044754 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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