ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2013-1-30 19:18 | 显示全部楼层
我认为,楼主说的对。小段的一个页面就可以看完的代码不需要声明变量类型,特别是不要自己限制自己。如果要定义变量最好是“望文生义”(如果英文好,可以用单词或单词缩写也可以用汉字,只不过不要把代码里面的符号搞成中文的了)。这样在调试的时候不容易自己搞糊涂。我的年纪大,记忆不好,经常忘记写的代码的目的是为了解决什么的,所以就基本上每句话都有注释,这样过了很久,也能够知道一段代码的意义,也可以看出当时的“幼稚”。(同时对“初学者”在看我的代码的时候也是个帮助)。
顺便说一句,我看有的人在DIM的时候,写的是 dim a , b , c , d as  类型,这样只有d 声明了类型, a , b , c 还是变体型 Variant。等于没写。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-1-31 00:09 | 显示全部楼层
我支持不定义变量。
但在变量使用前,尽量进行注释——我有个报表的VBA花了一个月才完成,前10多天没有注释,弄得再重新调试时都要猜测,这变量干啥的。
当然,如只有一个Sub,无所谓了

TA的精华主题

TA的得分主题

发表于 2013-1-31 02:04 | 显示全部楼层
有个帖子的主题“提问的智慧”
看起来还需要一个“讨论的智慧"
因为我们似乎是讨论的初学者。
讨论和写代码,都是一种表达,其实良好的定义对初学者,特别是讨论过程,非常重要。
Dim VBA初学者 As 。。。
如果没有这个,很容易出现各说各话。

点评

呵呵,幽默。 联系紧密。  发表于 2013-1-31 08:38

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-1-31 08:36 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
levin_xie 发表于 2013-1-31 00:09
我支持不定义变量。
但在变量使用前,尽量进行注释——我有个报表的VBA花了一个月才完成,前10多天没有注释 ...

是的。

如果要让别人看懂代码,或者防止自己今后时间长了忘记,
写代码是加上必要的注释才是个好习惯。


代码注释的规则大致应该是:
1. 给别人,尤其是给初学者的注释尽量详细,最好是每一句都有注释。
2. 给自己看的注释,可以在每一段落前加一句总结性的注释说明目的就可以了。
3. 最好在代码开始时,简单说明目的、条件、思路等。

尤其是说明思路似乎更有意义。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-1-31 09:28 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 chentx 于 2013-1-31 11:07 编辑

原本不想再回复这个帖子,但作为一个从无基础到有一定经验的过来者,我觉得楼主把一些个人主观意识(或者是个人习惯),膨胀到以为可以对一些基本认识进行颠覆的程度,让人感到非常震惊。

你一再强调所说是针对初学者,但从附图1中的这段话,谁会认为你是在对一些初学者说教,即使是要对初学者说教,你的言辞是否过于极端?说到底你只是在宣扬自己的行为习惯,现在却把这种习惯标榜为一种正确的道路,这就令人无法接受了。你说前人的做法是误区,那又有什么能证明你的就是正区?一个道理正确与否不在于说的那个人(黑社会也会觉得自己所做的事是正确的),在于这个道理是否能在实践中出效果。

你的言辞也是前后矛盾,附图1是叫所有VBA爱好者起来革命,附图2就反过来说不是面向编程爱好者,那你究竟是想要对谁说呢?

另外,从你的回复来看,你对VBA的认识也存在偏颇,你认为VBA不是程序,那我想问一下什么样的程序才叫程序?就好像单车一样,你认为他是不是交通工具?跟汽车、飞机比起来的确不像交通工具,但一样有人用它来环法。你没用它来做更大的东西不代表它不能,只是你没去做而已。

在这个帖子中你的很多回复,都是基于你错误的观点来进行抗辩,不知道是说你有坚持还是该说你顽固,但这都是你的个人观点,所以,你有权反驳不同意你的人,同样的,我也是如此。

这个帖子我不会再回复,但是,我希望你以后传授自己的小技巧时可以不用那么极端的言辞来表达自己(不是人人都能做芙蓉),不要用“我就是真理”的态度来目空一切。

最后的最后,把此帖评为精华的版主,你的眼光确实很另类。
截图1.jpg
截图2.jpg

点评

可以从“讨论的激烈、回复量、浏览量”着手理解“授精”……呵呵,差点是“授粉”……  发表于 2014-9-17 22:35
这个话题没什么可讨论的必要了,谁喜欢发表言论就让发表吧。让她理解的唯一办法,是给她找个团队合作的项目试试,小鸡是没法理解天鹅为什么要在天空飞的...  发表于 2013-1-31 12:59

评分

7

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-1-31 10:49 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
热闹,还是精华帖?
定义,有人高兴用定义变量,就用,你认为不需要用就不用,只要运行通过就行,
至于学习或掌握代码知识,学习定义变量还是需要的,编程习惯很重要,
不光是Excel,不同的语言程序的编程,要有规范

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-1-31 11:02 | 显示全部楼层
chentx 发表于 2013-1-31 09:28
原本不想再回复这个帖子,但作为一个从无基础到有一定经验的过来者,我觉得楼主把一些个人主观意识(或者是 ...

嗯,我想精华不是给我的言论,而是给那些抛砖引出来的【玉】的。

你不认为有些回帖讲了很好的知识么?

点评

好,偏激引人注意,智者时常虚怀!  发表于 2014-9-17 22:37

TA的精华主题

TA的得分主题

发表于 2013-1-31 11:08 | 显示全部楼层
想学VBA的看起来  《别怕,Excel VBA其实很简单》这本书很好滴用酱油瓶形象地解释了数据类型 在这里再次感谢这本书及编写它的大大们

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-1-31 11:19 | 显示全部楼层
http://club.excelhome.net/forum. ... p;page=1#pid6696930

有个初学者的求助帖:

Sub shiyan()
   Dim rng As Range
   ActiveWorkbook.Worksheets("Sheet2").Range
   rng = .Find("气缸套", LookIn:=xlValues, lookat:=xlWhole)
   Set ActiveWorkbook.Worksheets("sheet1").Range(a2) = rng(0, 1)
End Sub

很认真地用了dim……但代码不行。

…………

实际上一句代码解决,连变量都没有用到。
Sub shiyan()
    Sheet1.Range("a2") = Sheet2.Cells.Find("气缸套")
End Sub

在这个例子中,那些Dim 、Set、 ActiveWorkbook.都是多余的。没有意义反而影响代码效率。



评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-1-31 12:44 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 chentx 于 2013-1-31 15:24 编辑
香川群子 发表于 2013-1-31 11:19
http://club.excelhome.net/forum.php?mod=viewthread&tid=978607&page=1#pid6696930

有个初学者的求助帖 ...

好吧,最后一次回复你,大家都知道吃饭是必需的,吃饭这个行为的构成是:吃什么、怎么吃。吃多了会撑,吃少了会饿,吃好的有营养,吃化学品的会致癌。不讲技巧的使用方法当然会有反效果,不要告诉我你连这个道理都不懂。

在原代码中,不知道是你对VBA的语法了解不够还是你故意让它运行不了,你最先写的源代码最起码有3处语法错误:
1、对像变量要用Set来赋值,这是基础吧,你开始没有用Set但后面的又有Set这就非常奇怪了,所以我不知道你是不是故意这样写来让代码出错。
2、你没有用With,那.Find又怎么应用起来呢
3、ActiveWorkbook.Worksheets("sheet1").Range(a2) 什么意思?a2是变量吗,应该要用引号引起来吧。

即使是你缩减后的代码也跟原来的代码有差别,原代码的赋值是Range("a2")=rng(0,1),而你缩减后却变成Range("a2")=rng,跟原本的意思有不同吧,二者必有一个是错的。

而且你用Find说明有可能是Find不到的,你缩减后的代码没有考虑到这个情况,当然也有可能是必然会Find到所以不必理会这种情况。

代码长并不代表效率就一定低,精简的代码也不一定高效,这个道理相信有一定编程经验的都会明白。希望你明白一件事是:做事讲技巧方法比抱着死信条更有用。

如果你的信条是对一些简单的语句学习测试那不用定义变量使学习者专注于要学习的内容,那我完全赞同,但如果你的信条是任何程序开发都不需要定义变量,那就无法苟同了。[code=vb]Sub shiyan()
  Dim rng As Range

  With ActiveWorkbook
    Set rng = .Sheets("sheet2").UsedRange.Find("气缸套", LookIn:=xlValues, lookat:=xlWhole)
    If Not rng Is Nothing Then
      .Sheets("sheet1").[A2] = rng(0, 1)
    Else
      .Sheets("sheet1").[A2] = "UnFind"
    End If
  End With
End Sub[/code]

点评

赞同一开始养成好习惯,但你可以在程序中选择更优化的处理方式。如果一个人连声明变量都没弄清楚,如何看懂别人的代码?学习路上,看别人代码是很重要的。  发表于 2013-2-5 17:48
原来的代码是初学者写的。不是我写的代码。所以错误很多也很正常。 但显然可以发现初学者喜欢生搬硬套的痕迹。  发表于 2013-1-31 14:33
个人赞同,习惯还是开始养成好!鲜花+1  发表于 2013-1-31 13:32

评分

2

查看全部评分

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

本版积分规则

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

GMT+8, 2024-12-23 07:06 , Processed in 0.039302 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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