ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 图解:定义变量的重要性

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2013-3-26 19:29 | 显示全部楼层
本帖已被收录到知识树中,索引项:数据类型和基本语句
从小养成好习惯,长大好用好VBA

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-3-28 19:52 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2013-3-28 21:27 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2013-3-28 22:34 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
最近刚在当当上入手了罗老师的宝典一书,浏览完前18章,感觉很好,很实用
后面的章节暂时用不上了,以后需要的话再去研究研究那些高深的部分

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-3-29 08:08 | 显示全部楼层
张文洲 发表于 2013-3-28 22:34
最近刚在当当上入手了罗老师的宝典一书,浏览完前18章,感觉很好,很实用
后面的章节暂时用不上了,以后需 ...

谢谢
有时可以入群听VBA课
VBA入门免费教学群  
群   号:30729794

TA的精华主题

TA的得分主题

发表于 2013-3-29 08:55 | 显示全部楼层
好东西,以前也不怎么喜欢使用变量。现以纠正……

TA的精华主题

TA的得分主题

发表于 2013-4-2 00:31 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
andysky 发表于 2013-3-25 14:21
图示二(若看不清楚,可单击图片,从而放大查看):

2楼演示是混淆了变量中的一个错误类型: 公共变量的使用,在不需要传递变量时需要初始化。

你演示的错误中存在两个问题:
1. 如果公共变量只是模块级别,那么应该 dim a 就可以了,不需要public a
  这样、模块2中的a=10就不会对模块1中的sub ABC()起干扰作用了。

2. 如果你使用了公共变量a ,那么在sub ABC()中应该对a进行正确的初始化:
Sub abc()
    a = 1
    For i = 1 To 10
        a = a * 2
    Next
    MsgBox a
End Sub

或者
Sub abc()
    a = 0 '变量初始化
    a = a + 1
    For i = 1 To 10
        a = a * 2
    Next
    MsgBox a
End Sub

………………
本质上,dim a as 本身就是一个 dim a as 以及 set a=0的过程。


呵呵。


附注: 发现楼主是用五笔打字……

这个大概没有争论的必要了吧。

比如说,必须用拼音打字,否则就是坏习惯之类的……




TA的精华主题

TA的得分主题

发表于 2013-4-2 00:34 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
crazy0qwer 发表于 2013-3-25 14:56
既然定义了变量,最好把Option Explicit 加上。可以避免类似 把true写成ture的错误。
另外,没有提示有时候 ...

呵呵,我喜欢这样子:
Dim a&, b&, c&

这样可以吗?

TA的精华主题

TA的得分主题

发表于 2013-4-2 00:37 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 joforn 于 2013-4-2 00:39 编辑
香川群子 发表于 2013-4-2 00:31
2楼演示是混淆了变量中的一个错误类型: 公共变量的使用,在不需要传递变量时需要初始化。

你演示的错 ...

其实一直以来,变体类型都是不被推荐的。请先不运行下面的代码,试计算一下结果是什么?运行后看下输出是多少。

  1. Sub TestvarNumber()
  2.   A = 100.00001
  3.   B = 12345.1
  4.   C = 12345.1
  5.   D = 100.00001
  6.   
  7.   E = A + B - C - D
  8.   F = A - D + B - C
  9.   Debug.Print "Q:" & Format(E, "#0.0#") & "等于" & Format(F, "#0.0#") & "吗?A:" & IIf(E = F, "是的", "不是") & " [Variant]" & vbCrLf
  10. End Sub
复制代码
当然,有兴趣的话,还请能顺便解释一下为什么会出现这种情况。

TA的精华主题

TA的得分主题

发表于 2013-4-2 00:39 | 显示全部楼层
本帖最后由 liucqa 于 2013-4-2 01:06 编辑



嗯,楼上的代码展示了变体类型在数据精确度方面的问题。

好吧,俺承认,上面的代码俺压根就没仔细看,谁研究完了,给俺个答案吧,俺最怕调试代码了{:soso_e120:}

点评

你的答案好像离真实情况还有点远哦。要记住,参与运算的四个变量同样的四个,并且两个运算语句除了有一点点区别,其它的都是一样的。  发表于 2013-4-2 01:02
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-24 21:45 , Processed in 0.044347 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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