1234

ExcelHome技术论坛

用户名  找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2014-10-31 20:59 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖已被收录到知识树中,索引项:数据类型和基本语句
真够无聊的,这话题要争论到什么时候去啊~~

变量遵循“用前须声明”的原则,好处多多
不声明就用,唯一的好处就是写代码时方便些,但坏处是后患无穷。

TA的精华主题

TA的得分主题

发表于 2015-4-17 15:39 | 显示全部楼层
我是初学者,声明变量成习惯。

TA的精华主题

TA的得分主题

发表于 2017-7-12 17:36 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2017-7-12 22:55 | 显示全部楼层
本帖最后由 yayahzmeng 于 2017-7-12 22:57 编辑

终于看完了,所有的争论,都看完了
从自学VBA开始,我奉行“用前申明是好习惯”的譐譐教诲
用的多了,变量熟悉了,纠错多了,发觉不申明也没啥大不了,即便编一些是较大的应用程序,除了全局变量,其它也没啥大不了
再就,就发现香川君的那篇贴子,才发觉也不只我一个这样“瞎搞”
谁对谁错,难以定论。这个主题中,支持申明者以“教科书”为后盾,不以为然者以驾轻就熟的丰富经验为剑。其实,再想想,当初写下“用前申明是好习惯”的那位,其出发点一定是“法度严谨”吗?反过来,不申明者,变量的每一次应用,他们难道心中就真的无数吗?
说到这里,想起了两个小说形象:岳不群和风轻杨,噢,还有那个“过儿”
“无剑胜有剑”,但其心中一定有剑
所以,不要以为不以为然者,就有多“害人害己”,罪莫大焉!也不要以为严格申明就是纠错的倚天神剑!在小小的变量上犯错者,只说明其道行还太浅!
我支持初学者严格申明变量,有助于其入门。但玩到一定程度,还纠结于这个鸡毛蒜皮者,嗯,悟性太浅,玩点别的吧

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2017-7-12 23:23 | 显示全部楼层
个人意见:
如果写程序自己用,爱咋写咋写。
如果写程序需要有其他人的参与,或者是为了给其他人用。
那么最好声明变量,并且声明有意义的变量。
放一堆abc上去,谁都不知道是啥。还有就是变量尽量用英文吧,放一堆汉字上去,也是别扭的很。

TA的精华主题

TA的得分主题

发表于 2017-9-4 14:48 | 显示全部楼层
不用For...Each也可以重现这个现象,很明显是变量的declaredtype问题
  1. Sub Test()
  2.     'Dim r As Range
  3.     Set r = Range("A1")
  4.     r = 10086
  5. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2019-12-28 22:17 | 显示全部楼层
楼主,我是vba小白,看到您的帖子收益颇多,有几个问题向您请教。
您说“一开始其实是range型态的,但是过了left之后,就变成字串了…”是指变量rg最初的是对象型变量(range),之后变成string吗?
我尝试返回各变量的值,但是结果是这样的:
  1. Private Sub test()
  2.    
  3.     For Each rg In Selection
  4.    
  5.         Debug.Print VarType(rg)
  6.         rng = Left(rg, 5)
  7.         Debug.Print VarType(rg)
  8.         
  9.     Next
  10.    
  11. End Sub
复制代码


返回结果是
  1. 8
  2. 8
  3. 8
  4. 8
  5. 8
  6. 8
  7. 8
  8. 8
复制代码

其中8表示变量是string型。
Constant        Value        Description
vbString        8        String

这让我很是疑惑,还请您不吝赐教,万分感谢。

TA的精华主题

TA的得分主题

发表于 2019-12-28 22:31 | 显示全部楼层
香川群子 发表于 2014-9-25 13:55
下面这个数组中的例子:呵呵,可以明确告诉你,根本原因是错误地使用了For……Each循环试图直接改变集合 ...

您好,感谢您的帖子,让我收获颇多。但是您提到“...试图直接改变集合对象属性的问题”,然而在《别怕,其实VBA很简单》(第二版)中提及
注意:当在一个数组中循环时,不能对数组元素进行赋值(或修改元素的值),对于已经赋值的对象数组,也只能修改它的属性。

这是矛盾吗?我是我搞错了,还望您赐教。

TA的精华主题

TA的得分主题

发表于 2019-12-28 23:03 | 显示全部楼层
liuchenghao 发表于 2019-12-28 22:31
您好,感谢您的帖子,让我收获颇多。但是您提到“...试图直接改变集合对象属性的问题”,然而在《别怕, ...

有问题发新帖子吧,这么长时间的帖子了,你在这里问问题,不太可能有人回复你的

TA的精华主题

TA的得分主题

发表于 2022-4-8 18:07 | 显示全部楼层
代码写全对初学者看不看的懂非常有必要,个人觉得。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

1234

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

GMT+8, 2025-2-25 20:30 , Processed in 0.023062 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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