ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-2-16 16:49 | 显示全部楼层
yiyiyicz 发表于 2013-2-16 16:16
好家伙,还没完啊!
其实,正确的结论是:在编程时变量需要声明,当在一些特定的情况下可以省略变量声明( ...

呵呵呵呵!

【说老实话,不要说变成职业的编程人员。就是业余的我也觉得仅仅靠VBA,很多问题不易解决。】

→ 这句话和是否dim有关系么?

可能的理解如下:
1. 你是说学会dim以后,还会遭遇很多其它的困难……

2. 你是说你到现在还没有学会dim,所以感觉很困难。

3. 你是想告诉新人,只要一开始养成dim的习惯,就不会有困难了……


哦也。

点评

再一次反映出香川卓越的逻辑思维能力!!!  发表于 2014-9-18 21:18

TA的精华主题

TA的得分主题

发表于 2013-2-16 17:37 | 显示全部楼层
本帖最后由 yiyiyicz 于 2013-2-16 17:44 编辑
香川群子 发表于 2013-2-16 16:49
呵呵呵呵!

【说老实话,不要说变成职业的编程人员。就是业余的我也觉得仅仅靠VBA,很多问题不易解决。 ...


有些语言要求必须声明变量。当VBA是学习的第一个语言(或者是认真学习),在这里养成了好习惯后,学习别的语言就会少些麻烦。
由于没有养成声明的习惯,所以我的确出现过变量名前后不同而找不出原因

的确,VBA允许省略变量声明。在语句少的场合大家都这么干过。但不能得出结论:VBA声明变量是多此一举
也不能说,养成一个好的习惯,编程就没问题了。比如养成了加注释的习惯,编程所有的问题因此就没有了。
至于说,这是针对初学者的。我能理解女侠的初衷,但是一楼观点太过偏激
入门到深入,有那么明显的分界吗?
20-30行的代码,你女侠现在也写,新人也写
窗体,初学的人不写吗?
再举个例子,BOM展开,不少EH级别很高的人也不会写(这主要跨行当了),但是有新学VBA不久的人也写出来了(因为需要适合自己的,在网上又找不到,不得不做)。其中就有用到模块和公共变量的,可能抄了一些代码,也写了求助帖。这里面就有变量声明的问题。虽然也有避开公共变量的思路,但是作为实现的常用方法,学习时怎么就可以忽略到公共变量的作用呢?要用公共变量,必然要有dim,也必然需要了解各种变量的概念,明白声明的位置写在不同的地方,结果是不一样的。

TA的精华主题

TA的得分主题

发表于 2013-2-16 23:35 | 显示全部楼层
香川群子 发表于 2013-1-29 09:12
补充解释Option Explicit的真正意图

在电脑286、386时代,在DOS程序代码时代,在内存仅16M,32M时代,

说得很棒,谢谢,例子浅显易懂,利于我们新手学习

TA的精华主题

TA的得分主题

发表于 2013-2-17 09:36 | 显示全部楼层
没有地基的楼房是不稳固的,地基需要花费的时间会比建造房子更加费时费力,而且远没有房子漂亮。
但是,不能否认,人们往往更加关注表象,漂亮的房子,而忽视地基。
当煤气运输罐在高速公路发生事故燃烧时,所有的聚焦都会在扑救大火的英雄,但是,谁也没有注意到,正是煤气运输罐的安全标准规范,挽救了大多数消防队员的生命,使他们得以成为英雄,而避免了“烈士”的荣誉。
                                                                  ----  摘自国内某报刊副刊一段文字
变量也一样,忽视变量,当煤气罐程序事故时,程序编辑者最终可能成不了“英雄”,而成为“烈士”。

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-2-17 10:11 | 显示全部楼层
vs_sz_cn 发表于 2013-2-17 09:36
没有地基的楼房是不稳固的,地基需要花费的时间会比建造房子更加费时费力,而且远没有房子漂亮。
但是,不 ...

微软提供了声明变量,或不声明变量就使用的选择,
本身就说明不声明变量的用法是完全可以的,并且也是有大量现实存在的。


和声明变量的好处相比,不声明变量肯定也有很多好处。


然后,必须强调:
造成程序代码错误、bug等,绝大部分并非由于没有使用dim语句声明变量造成的。

而是编程者的设计错误。

至于拼写错误,option explicit + dim 本身确实可以防止未声明变量的错误使用,
但并不能防止逻辑错误,或者防止已经声明定义过变量的混用错误。


我还没有听说,因为养成了dim 变量的好习惯,因此大型程序代码可以一次写完,不需要debug的故事。

并且,程序debug时发现的问题,基本上可以认为不是由于未使用dim语句造成的问题。

既然如此,为何老是要把【恐怖的编程错误后果】都怪罪到没有养成dim的好习惯这个命题上去呢?

完全挨不上哦!




评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-2-17 10:18 | 显示全部楼层
到此为止,凡是真心反对【初学者不用dim就可以写简单VBA代码】这个结论的人有没有?

理智上说,应该没有人有理由反对上述结论。


问题是,大部分的人(或许其中有很多已经是职业编程者或准职业编程者)参与进来,
把我的【面向VBA初学者】的这个限制条件直接无视掉了,
然后各种声讨有木有?!

非要把一大堆【其它各种原因的编程错误,及其严重后果】,和【VBA初学者是否养成使用dim语句的习惯】这个问题联系起来,大有炸平庐山的气势,简直是白色恐怖。







TA的精华主题

TA的得分主题

发表于 2013-2-17 10:19 | 显示全部楼层
个人觉得这个事情没必要争论,既然可以不声明变量就可以使用,就一定有他的合理性
不管是学院派还是实用派,都没必要要求别人完全认同各自的观点
所谓存在即合理

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-2-17 12:42 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
没人说在VBA中不能省略变量声明,而是不能由“可以省略”就得出“声明”没用的结论
VBA代码中省不省略变量声明,和是不是初学没关系;
变量声明,背后是一些概念。而掌握这些概念同编程中是不是能解决所有问题是两回事
掌握变量声明及其相关的知识,要看需要,和初学关系不是很大,尤其是不能给初学留下印象,变量声明是没用的东西

个人认为,编出程序能不能简单有效的解决问题,第一个要解决的就是对问题原型的理解是不是透彻
还是以BOM为例,当对BOM原理还不清楚,不能清晰的表达问题(就像不少人不能真正明白dim一样),数据格式乱七八糟,那要做这个BOM展开要得费多大的劲啊
世界上的事情往往是守恒的,这里偷点懒,必定会有地方要吃苦
管理信息化,就是最典型的实例。迄今为止生产企业没有能把信息化系统跑起来的,实现首尾封闭。
其中至少有一半的原因就是基础数据有问题,另外的原因是原理不完善
基础数据的原因来自于数据不规范和想当然,想当然就是觉得人人都明白了事情何必还去较真,而恰恰就是人明白了计算机还不明白
数据做到规范,这在教科书上说的是清清楚楚,但做起来确实麻烦。于是省略就大行其道,最后连自己都不知道哪出问题了
所以,养成好的习惯非常重要

点评

“世界上的事情往往是守恒的,这里偷点懒,必定会有地方要吃苦”!!!为您喝彩!!!  发表于 2014-9-18 21:25

TA的精华主题

TA的得分主题

发表于 2013-2-17 13:55 | 显示全部楼层
在学习程序的过程中,宁可由于严谨思维导致麻烦多多,也不愿意放弃严谨而马虎过关。
严谨本身就是试金石,如果想好好学,学精通,就不要惧怕麻烦;如果马马虎虎,就请限制在有限范围,但不要成为一种公众的观点。要知道,当一个初学者接受了一个观点以后,很可能就真的改不过来的!这样会影响别人很多年。特别是权威观点跟容易影响别人的思维。
另外,我是初学者,但是不赞成不严谨的做法。

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-2-17 14:03 | 显示全部楼层
yiyiyicz 发表于 2013-2-17 12:42
没人说在VBA中不能省略变量声明,而是不能由“可以省略”就得出“声明”没用的结论
VBA代码中省不省略变量 ...

前面说的都有道理……

可是最后两句就莫名其妙了:
【数据做到规范,这在教科书上说的是清清楚楚,但做起来确实麻烦。于是省略就大行其道,最后连自己都不知道哪出问题了】

省略,尤其是MS VBA中的很多省略,都是有其积极意义的。
不仅写代码快,看起来也清晰多了。

比如: Range("A1").Value 直接省略为 Range("A1")

Range("A1:B5")  省略为 [a1:b5]


这些省略不是偶然发生的,而是微软工程师刻意发明出来给大家用的,绝对是好事。

但是,省略不等于造成错误,所以你的【于是省略就大行其道,最后连自己都不知道哪出问题了】
这个说法是很没有逻辑性的、错误的言论。


【所以,养成好的习惯非常重要】
这句话看似没有问题,但太空泛也就没有意义了。

因此,估计你的引申含义应该是:【养成“使用dim语句的”好的习惯非常重要】


但如果真是这个结论,显然又是自己证明自己的循环论证了。

即,你先定义【“使用dim语句的”是个好的习惯了】

而实际上“使用dim语句”是否是个非常重要的好习惯根本就是个伪命题。



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

本版积分规则

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

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

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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