ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] Dim与不Dim

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-3-6 22:26 | 显示全部楼层
joforn 发表于 2013-3-6 22:22
正确的使用变量自然速度会有所提,但正确使用是必要条件。否则反而会让程序变得更慢。

当然,正确声明变量数据类型是前提,否则就失去讨论价值了

TA的精华主题

TA的得分主题

发表于 2013-3-6 22:34 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 joforn 于 2013-3-6 22:43 编辑
zhaogang1960 发表于 2013-3-6 22:26
当然,正确声明变量数据类型是前提,否则就失去讨论价值了

我个人觉得:如果想单靠变量类型来提升速度,还不如直接从程序算法上下手。声明变量应该更多属于程序可读性方面的提升。
虽然我是变量先声明再使用的拥护者,但仍不建议初学者去打用变量优化来提升速度的主意。当然,如果是变体类型的可以用明确的类型来代替变体提升速度。

TA的精华主题

TA的得分主题

发表于 2013-3-6 22:40 | 显示全部楼层
joforn 发表于 2013-3-6 22:34
我个人觉得:如果想单靠变量类型来提升速度,还不如直接从程序算法上下手。声明变量应该更多属于程序可读 ...

赞同这个观点,撇开极端情况下,不声明变量会得出错误结果不说,可读性差,调试起来比较费事

TA的精华主题

TA的得分主题

发表于 2013-3-6 22:51 | 显示全部楼层
本帖最后由 wpxxsyzx 于 2013-3-6 22:52 编辑

楼上各位不要讨论了,关于定义变量已经有很多讨论,我们仅就楼主的问题说吧,不然又扯远了
我们就假设楼主其他方面没有问题,就是想问下,直接使用变体还是准确定义变量类型

TA的精华主题

TA的得分主题

发表于 2013-3-6 22:54 | 显示全部楼层
变量声明的讨论,回避掉算了,纯属费时间
每个人在学习使用中,自然会有心得

TA的精华主题

TA的得分主题

发表于 2013-3-6 23:09 | 显示全部楼层
本帖最后由 joforn 于 2013-3-6 23:12 编辑
wpxxsyzx 发表于 2013-3-6 22:51
楼上各位不要讨论了,关于定义变量已经有很多讨论,我们仅就楼主的问题说吧,不然又扯远了
我们就假设楼主 ...

如果不是非常耗时的循环计算,DIM一下也就提升个几毫秒或是一毫秒不到,不管用什么都不会有明显的区别。关键还是在于程序本身需求。以单纯追求速度的目的来决定是否声明变量,就像是一个司机问:我想让车跑得更快,要不要换个前挡风玻璃。
所以从楼主的角度出发,如果当前程序已经正常运行,就不用再去声明了。

TA的精华主题

TA的得分主题

发表于 2013-3-6 23:24 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2013-3-7 00:32 | 显示全部楼层
本来可有可无的问题,在那个"面向"精华帖中双方过分夸大某一方面的时候就成了争论贴了, 不少都是故意抬杠。
不过论坛吗, 不争不热闹,不热闹就没什么意思了。
声明变量带来的速度提升不是根本性的,不能成为声明本身的动力。写程序通常都是在必须要考虑速度的
时候才不得不优化,比如慢的不能忍受(这也不是声明变量能改变的),所以在某种程度上说"速度"本身都不是"动力"的衡量尺度。

TA的精华主题

TA的得分主题

发表于 2013-3-7 15:06 | 显示全部楼层
yiyiyicz 发表于 2013-3-6 22:54
变量声明的讨论,回避掉算了,纯属费时间
每个人在学习使用中,自然会有心得

我支持这个观点,每个人在学习使用中,自然会有心得。我自己的看法了。

TA的精华主题

TA的得分主题

发表于 2013-3-7 16:55 | 显示全部楼层
呵呵,支持楼上各位。

对于楼主来说,大致总结如下:

1. 如果是比较成熟的代码,就不要去改动了,会有产生意想不到的错误的较大风险。(参考南宫发言)

2. 如果本身运行速度不是太慢,也建议不要去动了。
   因为如果不是算法的根本改变,那么定义变量类型对速度的提升可能性不大。

理由如下:
1. 不定义变量类型时,实际上VBA会自动地在变量赋值时给予变量类型的调整。
   因此,即使你重新对变量给予正确的变量类型定义时,实际效果几乎相同。

2. 定义变量类型,对代码速度影响较大的仅仅在于循环递增时,是否把变量定义为Long或Integer
    而一般说直接定义为Long速度效率最好。(南宫的研究)

   但如果你的代码中循环次数没有达到几亿次、几万亿次的话,差异也将极为有限。

3. 算法对速度的提升是根本性的

4. 代码提速另外有一些小技巧,但都和定义变量类型无关。


因此,楼主可以放心了。

…………
最后,如果楼主今后重新开始写代码时,
那么你可以开始学习一开始就进行变量类型的定义……因为你已经不是初学者了。

点评

直接定义为Long速度最快,是由于VB内部有内存对齐机制,这个机制是按照4字节对齐的。如果代码都用long的话,就省去了内存对齐耗费时间对运行效率带来的影响  发表于 2013-9-25 00:54
直接定义为Long速度效率最好。(南宫的研究),给个链接好吗?  发表于 2013-3-8 08:12
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-9-8 09:08 , Processed in 0.050120 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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