ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 面向VBA初学者→ VBA代码中有关【变量】的误区

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2013-2-17 14:44 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 yiyiyicz 于 2013-2-17 15:55 编辑
香川群子 发表于 2013-2-17 14:03
前面说的都有道理……

可是最后两句就莫名其妙了:


【数据做到规范,这在教科书上说的是清清楚楚,但做起来确实麻烦。于是省略就大行其道,最后连自己都不知道哪出问题了】
这里不是指VBA,而是指ERP中由技术部门提供的数据

TA的精华主题

TA的得分主题

发表于 2013-2-18 13:04 | 显示全部楼层
yiyiyicz 发表于 2013-2-17 14:44
【数据做到规范,这在教科书上说的是清清楚楚,但做起来确实麻烦。于是省略就大行其道,最后连自己都不 ...

微软在VB.Net 中放弃了这种隐式变体变量声明的支持方式,就是因为VB 的快速开发特性和变量的定义省略造成大量程序可读性与维护性的问题。VB 代码曾经被称为垃圾代码不声明变量也是其中原因之一,难以想象一个懒得写几句dim 的人会踏踏实实的写注释文档。微软为了纠正这些问题,在为VB 加入面向对象元素之余放弃了变体型变量的使用。
同样这也造成了兼容性问题,VB.net 无法移植以前的VB 代码,因为大量变体型变量的应用。VB 的用户不是定义变量的人较多,而恰恰相反,是不定义的占绝对优势。当需要移植的时候却发现代价非常庞大和昂贵。
所以后来C# 横空出世成为.net 的第一开发语言和VB(系列家族) 的迅速没落就不令人意外了。(俺不是专业的IT 人员,以上资料主要来自百度搜寻的资料汇总)

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-2-18 17:53 | 显示全部楼层
hehex 发表于 2013-2-18 13:04
微软在VB.Net 中放弃了这种隐式变体变量声明的支持方式,就是因为VB 的快速开发特性和变量的定义省略造成 ...

你查找到的资料,正好说明了VBA用户,尤其是VBA初级用户,是非常喜欢这种隐式变体变量声明方式的。


…………
至于这样子的代码比较低级,属于垃圾级别的……这都没关系,照样有人用。


甚至于以后所有编程软件都不支持这种用法了,
但也不能否定今天的存在。


傻瓜相机听说过么?

简单的方法就算不好,也一定有它的用武之地。

…………
当然,如果你有志向成为专业编程者,或者业余的高级编程者,
那么定义变量是个好习惯。


但你没有权利因此而贬低那些不愿意进行显式变体声明的人。

TA的精华主题

TA的得分主题

发表于 2013-2-18 19:13 | 显示全部楼层
香川群子 发表于 2013-2-18 17:53
你查找到的资料,正好说明了VBA用户,尤其是VBA初级用户,是非常喜欢这种隐式变体变量声明方式的。

已经实在懒得和您去争论了。看看第一页你自己写的话,是谁在贬低使用显式声明变量的人啊。结果一样使用Dim 的人是脑袋被驴踢了是女侠您自己说的话吧?后面的N 条结果性结论,无论任何时候初学者要无视声明变量的要求,无论是老师要求还是书上的指导都要忽略。类似这些论断是出自您的尊口吧,到底是谁在贬低啊?
VB 的隐式声明变量造成了大量的程序无法维护形成了垃圾代码,这不是俺说的,俺也没有贬低不声明变量的做法。俺只是说了一个事实,每本教科书,甚至大多数老师都要求学生要养成声明变量的好习惯,结果大量的VB 使用者还是懒得去声明变量而采用隐式声明的方法,造成逻辑错误和难以维护的代码若干。造成微软作为VB 的开发者都在后续版本中无法忍受隐式变量声明带来的后果,而把它给取缔了。
我查的资料就是这个说明这一个事实而已,至于在VBA 中或者VB6 当中,不愿意声明变量的人远远多于一丝不苟的去声明变量的人,这还是在要求声明变量的情况下。
同样您也没有权利贬低在初学的时候就养成强制定义变量的习惯!

TA的精华主题

TA的得分主题

发表于 2013-2-19 10:56 | 显示全部楼层
呵呵,学习了,谢谢,萝卜白菜各有所爱,对我来说,能学到东西才最重要!

TA的精华主题

TA的得分主题

发表于 2013-2-19 15:16 | 显示全部楼层
"有偿就规范的好好写,免费帮助就a,b,随便命."  喜欢这句 {:soso_e116:}

TA的精华主题

TA的得分主题

发表于 2013-2-19 17:30 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
半年前 初学vba的时候,并没有这个困惑,我觉着定义变量是个很好的习惯(也许是因为我一开始就这么做,习惯了) 在定义变量类型的过程中 能更好的理解各类型的意义。等熟练掌握变量类型以后,再省去定义过程,觉得会更好。纯属个人体验。

TA的精华主题

TA的得分主题

发表于 2013-2-22 10:28 | 显示全部楼层
如果彻底删除了Option Explicit,不得不说,这样做了那么初学者永远就都是初学者了。

初学者和进阶的区别就是,初学者只专注于写代码,完全不考虑代码的可阅读性和可调试性。

初学者的代码量不多,调试的环节工作量还不明显。

首先,
阅读这段代码的人,面对突然出现的变量,不明其意。而对输入错误产生的“新变量”,无法察觉,会以为这本来就是需要新声明的变量。代码阅读障碍和理解障碍。

其次,
当代码量到达一定程度的时候,隐性声明变量的弊端就出现了。
一旦出现某个输入错误,输错的那个变量会自动被声明,且运行代码的时候不会报错。
后果就是运行的结果不是代码所要达到的结果。如果手头没有正确的结果作为参照,这种错误甚至都发现不了。
而发现计算结果有问题之后,要从海量的代码中找到这一个错误,其工作量也是海量的。

所以在初学阶段,这个习惯也许看来是完全没有意义的一个存在。但当代码量逐渐增加,工作量开始转变为进阶的时候,这个初学者的“习惯”会让你吃尽苦头。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-2-22 10:55 | 显示全部楼层
我个人觉得养成一个良好的编程习惯是非常重要的,坏习惯一旦养成是很难改正的,只能用一个好习惯去取代坏习惯。

点评

编程如果是你选择的职业,那你说的对。 如果编程不是你的职业,那么这就夸大其词了。  发表于 2013-2-22 13:32

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-2-22 13:15 | 显示全部楼层
40v 发表于 2013-2-22 10:28
如果彻底删除了Option Explicit,不得不说,这样做了那么初学者永远就都是初学者了。

初学者和进阶的区别 ...

你说的也很客观。

并且如果不学会定义变量,那初学者永远就是初学者水平,无法成为编程高手。


这句话也是正确的。

但问题是,我认为没有理由因为这个而去要求所有初学者,
都从一开始就必须要认认真真去按照这个“好习惯”去定义变量。

这个,和你们说的事应该没有矛盾啊。

即:编程高手必须有定义变量的习惯,但初学者可以不用去定义变量。

这两件事是绝对可以并行存在的啊。

…………
所以,我认为这里可能产生了一个误区。

是否你们认为:
【如果不从初学者阶段一开始就养成定义变量的习惯,以后就永远也不会再有这个好习惯了】

而这个命题显然是错误的。



您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-23 21:22 , Processed in 0.031944 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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