ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论] 关于变量声明的讨论

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2013-2-3 11:08 | 显示全部楼层
本帖已被收录到知识树中,索引项:数据类型和基本语句
lu_zhao_long 发表于 2013-2-3 09:49
几个月前,我的妹妹在我的影响下也开始学习 VBA。她把书上的一个自定义函数代码照抄了一遍(美国人写的一本 ...

【我们这些人的工作是靠多个人合作来共同完成日常工作的。如果一个人写错了一段代码,调试人员却不能在最短的时间定位到有问题的代码处,请各位想想看后果会如何呢?!】

请问,你说的这样的错误,是多人合作时,有人因为没有定义变量的“好习惯”,
不定义变量类型而直接使用了一个变量,然后有拼写错误,造成的bug么?

请你明确回答。


…………
而我的判断,你举出的类似实际代码运行中的bug,绝非因为变量没有dim而造成的错误


所以,你写了一大堆,说了很多,按照逻辑和常识,我认为和我的主题无直接相关性。

点评

同样我可以找到比我们级别高得多的人对这个问题相左的看法。谁都不能劝得了对方,更何况我们了!所以,这个问题没必要这么争论下去!不会有结果的!但如果作为一个指导教师,只强调这个问题的一个方面那是不对的!  发表于 2013-2-3 11:33
我只是说声明变量的好处是方便调试、方便及时发现错误、能提高调试效率、可以预防错误。但我并不没有说必须声明变量!两个不同的概念!希望不要搅混!换句话说,如果这不是一个恶习,必须纠正吗?群子小姐?  发表于 2013-2-3 11:26

TA的精华主题

TA的得分主题

发表于 2013-2-3 11:11 | 显示全部楼层
ZHYZ 发表于 2013-2-3 09:49
本来不想说的,
你们讨论的主题是什么?首先要弄懂这个问题,也就是编程的习惯问题,偏移这个中心,永远不 ...

变量的显式声明、后期绑定、类型的动态性以及局部变量类型推理是4回事,不能糅杂在一起。
Dim ShuZhi :ShuZhi=123
和直接使用
ShuZhi=123
差别太大了

TA的精华主题

TA的得分主题

发表于 2013-2-3 11:15 | 显示全部楼层
本帖最后由 ZHYZ 于 2013-2-3 11:20 编辑
PLINQ 发表于 2013-2-3 11:11
变量的显式声明、后期绑定、类型的动态性以及局部变量类型推理是4回事,不能糅杂在一起。
Dim ShuZhi :S ...

我重复发帖了

TA的精华主题

TA的得分主题

发表于 2013-2-3 11:16 | 显示全部楼层
本帖最后由 ZHYZ 于 2013-2-3 11:20 编辑

回复42楼,
我说的是比如,
而不是变量的显式声明、后期绑定、类型的动态性以及局部变量类型推理,
我谈的是代码书写规范问题,而不是讨论学术问题,这个是谈不完的
我不想参加讨论。

TA的精华主题

TA的得分主题

发表于 2013-2-3 11:20 | 显示全部楼层
接下来,解答你这个问题:

【几个月前,我的妹妹在我的影响下也开始学习 VBA。她把书上的一个自定义函数代码照抄了一遍(美国人写的一本书)。在使用的时候一直不能得到正确的结果。后来她只好将写好的代码通过邮件发给我。我也费了老半天劲,最后才发现是其中的一个变量分别在赋初值的时候和赋最后结果的时候调换了其中两个字母的顺序(我现在记得应该是 *se* 被她写成了*es*)!】


显然,你妹妹英文不好,甚至不懂英语。
我估计那个美国人写的代码中,变量应该是使用了一个有意义的英文单词,甚至是几个单词的连接。
那么一个完全不懂英文和VBA的初学者,抄写一大堆外文代码,发生拼写错误是可以理解的。


解决办法是:
1. 初学者学习写代码时,应该从简单的开始循序渐进,即从学习使用较少变量的代码开始。
2. 初学者学习写代码时,应该使用单字母变量,如i、j、m、n、s、t等,以避免拼写错误。


……
疑问-1:

你妹妹抄写的美国书本上的那一段代码中,一开始没有dim语句定义变量么?
如果有dim,不就能发现拼写错误了么?

如果没有,说明美国人也认为初学者不必dim


疑问-2:

不管你妹妹是怎么错的,
你这个习惯用dim 的老手,不是应该很快就检查出错误才对么?
【就这么一个小小的问题在调试的时候却费了那么多的时间!真是太不值得了!】

这个花费很长时间的调试工作,是你还是你妹妹? 呵呵。





点评

群子小姐很会讲笑话!我习惯使用 Dim 语句没错,但我却是去查一段没有声明语句的代码!调试别人写的代码时候,你会给别人的代码重新写声明语句呢? 花费很长时间,那是我妹妹!而且几天也没有找出来问题症结所在。  发表于 2013-2-3 11:50
巧得很,那本书的作者确实是不喜欢使用 Dim 声明语句的!当然那个作者在书中也提到了他的同事中也有喜欢声明变量的,但作者并不认为他的同事是错误的。这就是包容!特别对于那些没有对/错之分的问题!  发表于 2013-2-3 11:43
你的意思是,只要是美国人,他认为对的东西就一定是对的了?  发表于 2013-2-3 11:33
不要再讨论了,跑题了,你的心是好的,但有什么意义呢。  发表于 2013-2-3 11:33

TA的精华主题

TA的得分主题

发表于 2013-2-3 11:21 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
代码的小结构中包含两个不可分割的元素: 数据来源(文件,单元格,键盘输入,函数的返回值等等),数据处理的方法(复制,粘贴,运算,写入文件)。几个小结构组成程序。
变量的作用是用来存放数据来源,当键入Dim变量名时就开始计划这个变量的用途,以及与其它小结构间的逻辑关系。初学者感到困惑不奇怪,多练习就能逐渐熟练,迈过这道坎。而不是困惑时放下将来再学。

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-2-3 11:25 | 显示全部楼层
本帖最后由 joforn 于 2013-2-3 11:29 编辑

其实我想讨论的是几个问题:
第一,变量先声明后使用真的有部分人说的那样难么?
第二,变量先声明后使用真的会带来负面的影响么?
第三,变量不声明而直接使用真的会像部分人说的那样,会因为系统的自动转换而得到更多的方便么?

如果说一件事做起不费劲而又能为以后的事情带来一定的好处,为什么要反对它,要坚绝的不使用?
如果不是必要,一般不建议直接使用Dim V As Variant 或是 Dim V方式使用变量,直接用V=123更不推荐,而是数值就用数值类型的变量,字符串就用字符串类型的变量。
123<>"123",这是应该有的常识。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-2-3 11:28 | 显示全部楼层
香川群子 发表于 2013-2-3 11:20
接下来,解答你这个问题:

【几个月前,我的妹妹在我的影响下也开始学习 VBA。她把书上的一个自定义函数 ...

这明显是由于原来的代码中没有强制变量声明
显式声明了变量,并不妨碍后面把这个变量写错,而被vb6认为是一个隐式声明的变量。
这个例子正好说明Option Explicit的重要性。

TA的精华主题

TA的得分主题

发表于 2013-2-3 11:32 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
【变量的名称尽量使用英文。比如,我经常这样写 Dim LastRow As Long(意思是 Last Row,最后一行。不用添加注释就能很容易地看明白)。】

这个没有意见。举双手赞同。

现在大家至少都是大学生,英文单词的能力还是有的。
那么用英文单词作变量,既容易写(打字速度快)也容易读。
并且最大的好处是全世界通用。


不过,如果不是很正规的编程,
仅仅是小小的个人使用的几十行、几百行的VBA宏代码,
那么直接使用单字母变量并没有什么不妥。

并且实际上,单字母作为变量也已经是约定俗成了。

比如,i、j、k、l、m、n用作循环变量,
或i用作行参数、j用作列参数的循环变量
k或c用作计数值,
s或t用作字符串变量
x、y、z做任意变量等。

rw表示行、cl或col表示列

当然,既然说的是非正规编程,那么个人习惯怎么来都行。

TA的精华主题

TA的得分主题

发表于 2013-2-3 11:38 | 显示全部楼层
香川群子 发表于 2013-2-3 00:18
不谈编程,仅就VBA新手写宏代码的事为例子,

有一些变量只能使用Variant,用了其它变量类型反而不好… ...

这个事情我遇到过,最开始都不进行定义,后面看到说变量还是要定义一下的好,所以定义了。
结果就是出错。
一路debug.print 才找到问题的原因在。

不过我现在还是要用Dim ,不过很多变量没有声明类型。
因为用了Dim 后,可以避免在写的过程中把变量名称写错的情况。
但还没有养成声明变量类型的习惯,因为这样操作有点麻烦,而我现在刚开始学,写的程序也小,对程序运行速度并没有太高的要求。

PS:我学VBA才一个月多点。
所以我的观点总结是:要求强制声明变量,但声明变量的时候是否要声明类型,就看情况了。

点评

在对应该将变量声明为什么数据类型的问题如果掌握不清时,可以对照数据类型表多试几个,几次下来就熟悉了。如果你不尝试,你永远不会  发表于 2013-2-5 21:02
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-23 07:14 , Processed in 0.032032 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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