ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 声明变量的重要性的一个例子…

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2014-9-26 10:20 | 显示全部楼层
本帖已被收录到知识树中,索引项:数据类型和基本语句
hehex 发表于 2014-9-26 10:06
for each 在vba 中有其必然存在的条件,比如Range.SpecialCells 方法返回的单元格区域,由于该区域及可能 ...

【for each 方法循环遍历数组,首先执行效率上不行,其次不能修改数组的值,是只读的。】

呵呵,这也正是我进入这个帖子时就指出的、楼主代码出现问题的关键。
却被【燕雀安知】认为是转移了话题……呵呵。


…………
至于变量定义,还是那一句话。
职业码农、专业编程那是必须的,
而VBA业余玩家,就没那么讲究。
尤其是新手初学者,我还是建议一开始就没必要去搞这个变量类型的定义。用默认Variant就好。


TA的精华主题

TA的得分主题

发表于 2014-9-26 11:01 | 显示全部楼层
香川群子 发表于 2014-9-26 10:20
【for each 方法循环遍历数组,首先执行效率上不行,其次不能修改数组的值,是只读的。】

呵呵,这也正 ...

我同意群子女侠关于新人就使用变体类型的观点。
我的观点是:即使使用变体类型,也要声明变量,特别是有意义变量名称,这点应该在新人阶段就养成良好的习惯。即 dim 变量名,这样在新人阶段的时候向高手请教,高手会很容易知道你的变量是干什么的,从而能更直接了解新人的思路而直接找到问题所在。
现在有不少高手,自己水平已经很高,能写大段的代码,或者实现一些使用的小系统分享,感觉读他们的代码就是地狱啊,完全不用dim声明变量。 完全用隐式声明,变量名完全是a,b,c 这种东西,某些时候突然冒出一个,让人完全无法猜测。
这种代码的随意性有两点,第一是vba 语言随意的特性所致,第二是新手阶段没有养成良好的习惯。

个人认为:要声明变量,定义有意义的变量名至于类型并不重要(变体蛮好)。

这个也歪楼了,呵呵。

TA的精华主题

TA的得分主题

发表于 2014-9-26 12:29 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
lolmuta 发表于 2014-9-26 11:54
我也同意新手不用刻意宣告,但是这个例子是新手那里给我的…
for each 方法循环遍历数组,首先执行效率上 ...

就你本例来说,即使仍使用For……Each,
那么使用 rg.Value 就能解决问题,而且这才是根本的、本份的解决之道。

反而Dim rg as Range 事实上是因为利用了Range默认 .Value属性才得到了成功,
因此本例不能作为定义变量类型的重要性的好例子。

呵呵。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-9-26 11:54 | 显示全部楼层
香川群子 发表于 2014-9-26 10:20
【for each 方法循环遍历数组,首先执行效率上不行,其次不能修改数组的值,是只读的。】

呵呵,这也正 ...

我也同意新手不用刻意宣告,但是这个例子是新手那里给我的…
for each 方法循环遍历数组,首先执行效率上不行,其次不能修改数组的值,是只读的
这个观点不错的观点,但是selection不搭配for each的话,妳不觉得太麻烦吗?

各语言大都会引人for each, 重点我想就一个,好写才能吸引人。

虽然妳说没那么讲究,但妳其实某方面来说也挻讲究的

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-9-26 13:03 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
唉…白的都可说成黑的,我还能说什么,真服了妳…

一般人那会用到".value",一个变数要是没有自动带出的功能,通常都有出错的可能。
万一程序出错了,妳要考虑的项目会多一个,我是不是拼错字了?
而且对一个被转成什么不确定的东西前,就直接用.value只能说开挂了…

反之
宣告成range 后,我爱.什么就有什么,自动带出就是"安定",至少拼字上的错误可排除
但给range值何必再给个.value,直接给他值就好了…
当然若加个.value,也就更好,重点是,宣告成range后,加.value 代码会自动带出,
相较没宣告而言,自带的代码会更"稳"。

提外话,我使用fso dictionary regex adodb...等object,永远是用前期引用的,
并不是为什么效率,只是为了那个自动带出而已,在debug时,拼字错误已经先排除了。

TA的精华主题

TA的得分主题

发表于 2014-9-26 13:10 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
lolmuta 发表于 2014-9-26 13:03
唉…白的都可说成黑的,我还能说什么,真服了妳…

一般人那会用到".value",一个变数要是没有自动带出的 ...

就算不是对象类型的,也是前期宣告为好。
比如:dim strMy$
这样你一下面程序时输入strmy时会自动变为strMy,如果没变,那就说明你输入错了,这对程序调试是非常重要的。当然还有效率问题。

TA的精华主题

TA的得分主题

发表于 2014-9-26 13:23 | 显示全部楼层
燕雀安知 发表于 2014-9-25 14:51
不知您发现没,在我所写的代码中,只要目标明确,我必然定义一个相应类型的变量与之对应,譬如:

假 ...

歪楼了,这个代码的提示有意思。你们继续辩论。

TA的精华主题

TA的得分主题

发表于 2014-10-29 15:37 | 显示全部楼层
香川群子 发表于 2014-9-25 14:32
不管怎么说,

在楼主这个例子中,Dim rg As Range 的作用/目的,就是为了能够使得代码运行时,

分析透彻,赞一个

TA的精华主题

TA的得分主题

发表于 2014-10-29 15:49 | 显示全部楼层
燕雀安知 发表于 2014-9-25 19:27
我不是码农,无聊才玩Excel的,学好它,对我而言可说是一无用处。

回到想说的话题:

对于就是论事的态度表示支持。

TA的精华主题

TA的得分主题

发表于 2014-10-31 20:29 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
感觉自己倾向kagawa的观点,其实有争论何偿不是一件好事呢?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-6 07:45 , Processed in 0.046354 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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