ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2013-5-24 17:15 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
弱弱地问句,本贴及所有回复中所提到的“定义变量”是指:
1、Dim 变量名 -> 即可
还是非要
2、Dim 变量名 As 类型

如果是1,那么貌似没有太多需要纠结的吧,除了考虑取个“响亮、霸气”的名字。而且也不需要区分水平等级,受众可以是所有人。
如果是2,那么对于初学者来说,难点是不是指“类型”呢?如果是,那么可以参照方式1,方式1的好处是把脏活累活都交给VBA本身去处理吧。
如果不是,那么是啥呢?莫非还有3?!

翘首盼复中。

TA的精华主题

TA的得分主题

发表于 2013-5-24 18:11 | 显示全部楼层
呵呵 我是初学者 我对变量一直不是很好的理解 刚开始的时候找资料 每次找完变量定义 没心情了(我要实现的目的不是搞个变量啊) 后来发现不定义也可以用 就没怎么定义过 简单的脚本程序应该还是按照楼主的来做 方便 没必要搞的那么麻烦

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-5-24 18:27 | 显示全部楼层
philip_cheng 发表于 2013-5-24 17:15
弱弱地问句,本贴及所有回复中所提到的“定义变量”是指:
1、Dim 变量名 -> 即可
还是非要

对于初学者来说,纠结的就是第2项: Dim 变量名 as 类型

那么,如果按照你的说法,不要2,只要做第1步就可以了,
当然就不存在2的问题了。

可是如果确实是这么做,那么也相当于承认第1项可以不做。

因为如果仅仅是 Dim 变量名,那基本上可以说失去了定义变量类型的意义和“乐趣”了。

呵呵。 你自己决定就好。

TA的精华主题

TA的得分主题

发表于 2013-5-26 14:55 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
定义变量有好处:1.以后再看时容易看懂。2.可以提高运算速度。

TA的精华主题

TA的得分主题

发表于 2013-5-29 16:17 | 显示全部楼层
时光鸟 发表于 2013-1-29 13:56
楼主有这样的观点,我能理解,所以也并不反对。
但楼主以此来否定或攻击某某书的作者,我觉得有点过!
...

非常好的贴子,我就是一个初学者,学了这么久一点门路都没有,那些懂VBA得大师们请不要在此楼灌水,请去VBA别的地方泼墨去

点评

“灌水”对“泼墨”,好文采!  发表于 2014-9-18 23:40

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-5-30 13:14 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
学习了,谢谢老师

TA的精华主题

TA的得分主题

发表于 2013-5-30 14:07 | 显示全部楼层
非常同意楼主的说法!

电脑本来就是拿来给人用的, 够用就行了

--------------------

过了初学阶段, 就应该提升了, 程序多了, 数据多了, 就需要优化速度和内存了

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-6-1 23:46 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
终于把这个帖子从头看完了!{:soso_e118:}

我想问几个简单的问题:
1. 何为初学者、进阶者和高手?何为菜鸟和老鸟(还有中间级别的鸟吗)?这个问题比较重要,因为搞清楚这个问题才能界定楼主所针对的范围!我一直在纠结中,我属于哪个范畴呢?!{:soso_e132:}

2. 除了常用的 Dim 来声明变量外,Public、Static 还算申明变量使用的定义符吗?如果不算在楼主讨论的范围内的话,那我就不说了。如果算的话,那用户想使用一个在多个子程序中都可以使用且它的值会保持和传递的变量话,不声明可以实现吗?不会有人跟我说这不是初学者应该会的吧?!{:soso_e114:}

3. 如果声明变量是很难的一件事情的话,那么,有谁能告诉初学者他们应该记住多少属性和方法吗?举个例子,就拿最简单的一个名称为 Rng 的 Range 变量来说,当你想将它设成红色的话,语句是这样的:
Rng.Interior.ColorIndex = 3

如果对于一个初学者来说,如果已经将 Rng 声明为 Range 类型的话,则当你按下 “.”时编辑器会自动列出它的属性和方法供你选择(当然在编辑器中要选中“自动列出成员”选项的)。像 英文版 Excel2007中 Range 共有 74个方法(Method)、94个属性(Property),每个方法和属性还有它们自己的方法和属性。其中 Interior 只是Range 的一个属性。而 Interior 还有 2个方法(Method)、17个属性(Property)。
如果没有将变量声明为 Range 类型的话,则初学者必须将要记住那么多的东西,一个字母一个字母地敲到代码中,而且还必须保证不能手误!因为没有强制声明变量,它是不会报错的。
这样看来,对于初学者来说声明变量以后的好处还是很明显的!不仅对于初学者,相信对于高手而言也会带来极大的方便!大家可以看看,一句声明语句:
Dim Rng As Range 真的就那么难吗?它比一个字母一个字母敲属性/方法 的代码难吗?
该不会又有人跟我说这不是初学者应该会的吧?!{:soso_e114:}  我一直自认为自己还是一个初学者,最多算个 VBA 刚入门而已!

当然,如果楼主定义的所谓的初学者就是那些用个诸如 A = B + C 这样代码的一群人的话,那不声明变量类型也无可厚非!那种情况下声明变量类型确实没有什么明显的好处!
但是,我还是觉得不能因为简单就要告诉新手去完全否定别人!特别是作为一个老师,授业的时候必须帮助学生分析事物的两面性才是!那楼主做的如何呢?其实楼主要不是太走极端的话,你的观点还是可以部分接受的!真是有点可惜了!{:soso_e101:}

楼主的原话如下:
本帖的宗旨,就是希望所有VBA爱好者,起来革命,
彻底打倒学术权霸的形成的错误概念 → 【定义变量和定义变量类型是个好习惯】

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-6-2 00:10 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
lu_zhao_long 发表于 2013-6-1 23:46
终于把这个帖子从头看完了!

我想问几个简单的问题:

回复你的疑问:

1. 有一种倾向,过分强调定义变量的好处和重要性,
    但几乎有意无意地忽略定义变量类型错误时(新手很常见)造成的混乱和错误。

2. 虽然大家都知道并非所有变量都需要进行显式声明定义,
    但因为上述1的原因,强调按规则必须定义所有变量才是好习惯。
理由和你所说的一模一样:
  写几个dim 又不需要多少时间,但却有很多好处……


…………
别的我也不多说了,大家各自有自己的判断,见仁见智就好。

但对于你个人来说,我还是认为你是有认识误区的。
重点说几条:
1. 需要明确定义变量类型时,应该定义变量以及定义变量类型。
  一般说 Range属性本来就需要明确定义的。

  当然也常常可以不定义,如直接 set rng = selection 就可以

2. Range属性如果是常用的,应该能记住。(我就记住了)
当然你每次都要从列表中选择也是可以的。

3. 需要巨量For……Next循环时,循环指针i应该定义为Long长整型变量,对循环速度影响较大。
但其余大部分情况下,准确定义了变量类型以后也不至于对速度又多大影响。


4. 如果习惯如此,那么写一些简单的代码完全或大部分变量不定义也没有问题。


以上4点是明确的事实。 这个就是我想告诉大家的。

那么我的直接意图就是:
对于新手、初学者,完全没有必要遵循一定要定义所有变量的这个所谓【好习惯】
直接学习代码、过程、方法等,能尽快入门更为重要。

产生这个想法的背景就是,确实有很多初学者在一知半解的状态下,纠结于定义变量类型错误导致的困难。


TA的精华主题

TA的得分主题

 楼主| 发表于 2013-6-2 00:16 | 显示全部楼层
lu_zhao_long 发表于 2013-6-1 23:46
终于把这个帖子从头看完了!

我想问几个简单的问题:

【英文版 Excel2007中 Range 共有 74个方法(Method)、94个属性(Property),每个方法和属性还有它们自己的方法和属性。其中 Interior 只是Range 的一个属性。而 Interior 还有 2个方法(Method)、17个属性(Property)。】
【如果没有将变量声明为 Range 类型的话,则初学者必须将要记住那么多的东西……】

你的错误之处就在于不知道实际情况:
实际上新手往往不需要使用那么多的属性。

作为过来人,我学习VBA时,只是抄写书本或别人的现成的代码。
几乎不会自己去找几个属性来用。

即使打开了列表,里面的英文单词在VBA中代表什么含义,是完全不明白的。

所以,列表方法对新手几乎用处不大。(实际上老鸟倒是喜欢用列表的)



点评

讲得很实际,符合我个人的使用习惯……  发表于 2014-9-18 23:46
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-6-22 04:23 , Processed in 0.049231 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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