Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 4313|回复: 6

[已解决]VBA,给对象的方法赋值以后的问题。

[复制链接]
发表于 2012-8-25 23:33 | 显示全部楼层 |阅读模式
  1. Sub f()
  2. Set ws = Sheets.Add
  3. ws.Name = "学习VBA"
  4. ws.Range("a1") = 100
  5. End Sub
复制代码
这个运行后产生名为学习VBA的工作表,并在A1输入100。

但我的理解是:
Set ws = Sheets.Add 是既赋值又运行,所以应该产生一个默认名的工作表。
ws.Name = "学习VBA",由于ws有赋值,相当于sheets.add.name,所以应该再生出名为学习VBA的工作表。
ws.Range("a1") = 100,同理,再产生一个默认工作表并在A1输入100。
应该产生3个工作表。
最佳答案
2012-8-26 07:53
本帖最后由 qushui 于 2012-8-26 07:56 编辑

Set ws = Sheets.Add 第一次使用工作表add方法,新建一个默认名的工作表,并赋值给对象变量
ws.Name = "学习VBA"
ws.Range("a1") = 100,由于ws有赋值,ws表示的是刚才新建的工作表,所以上面的两句代码都是对刚刚新建工作表属性的一个操作赋值,三句代码只有第一句使用了一次add方法,所以三句代码执行完只有一个新工作表生成

而你理解的下面的代码,每一句都使用了一次add方法,而执行一次工作表的add方法就会新建一个工作表,所以下面代码三句执行下来会有三个新工作表生成,在代码里是不能像你那样理解等价带入的,融入了数学的理解
ws.Range("a1") = 100
Set ws = Sheets.Add
Sheets.Add.Name = "学习VBA"
Sheets.Add.Range("a1") = 100

主要要注意这个“=”,在数学里它是等号,左右两边等价,任何地方可以等价替换;在vb代码里它不再是数学上的意义了,它会是赋值号或者是判断比较符,不要混淆了,
发表于 2012-8-25 23:42 | 显示全部楼层
回复

使用道具 举报

发表于 2012-8-25 23:53 | 显示全部楼层
方法是不能赋值给变量的,所以你后边两个理解都不成立

同样可以这样思考,如果你真的把方法赋值成功了,那ws的变量类型是什么呢?
回复

使用道具 举报

 楼主| 发表于 2012-8-26 00:49 | 显示全部楼层
zhenyu_2599 发表于 2012-8-25 23:53
方法是不能赋值给变量的,所以你后边两个理解都不成立

同样可以这样思考,如果你真的把方法赋值成功了, ...

我也认识到不能给方法赋值。

但是这两句,凭什么程序会知道,这是给上面那刚生成的新工作表修改属性呢?
ws.Name = "学习VBA"
ws.Range("a1") = 100
就算是把sheets对象赋值给ws,那sheets.name = "学习VBA"显然不能运行。
回复

使用道具 举报

发表于 2012-8-26 01:02 来自手机 | 显示全部楼层
手机回复简单回答:
1,新建一个表交给变量对象!
2,工作表改个名字!
3,工作表单元格赋值
回复

使用道具 举报

发表于 2012-8-26 07:53 | 显示全部楼层    本楼为最佳答案   
本帖最后由 qushui 于 2012-8-26 07:56 编辑

Set ws = Sheets.Add 第一次使用工作表add方法,新建一个默认名的工作表,并赋值给对象变量
ws.Name = "学习VBA"
ws.Range("a1") = 100,由于ws有赋值,ws表示的是刚才新建的工作表,所以上面的两句代码都是对刚刚新建工作表属性的一个操作赋值,三句代码只有第一句使用了一次add方法,所以三句代码执行完只有一个新工作表生成

而你理解的下面的代码,每一句都使用了一次add方法,而执行一次工作表的add方法就会新建一个工作表,所以下面代码三句执行下来会有三个新工作表生成,在代码里是不能像你那样理解等价带入的,融入了数学的理解
ws.Range("a1") = 100
Set ws = Sheets.Add
Sheets.Add.Name = "学习VBA"
Sheets.Add.Range("a1") = 100

主要要注意这个“=”,在数学里它是等号,左右两边等价,任何地方可以等价替换;在vb代码里它不再是数学上的意义了,它会是赋值号或者是判断比较符,不要混淆了,
回复

使用道具 举报

 楼主| 发表于 2012-8-26 11:20 | 显示全部楼层
本帖最后由 silenthunter 于 2012-8-26 11:21 编辑
qushui 发表于 2012-8-26 07:53
Set ws = Sheets.Add 第一次使用工作表add方法,新建一个默认名的工作表,并赋值给对象变量
ws.Name = "学 ...


你好。你提醒得很对,我初学不久对等号还没完全接受,很自然地用数学的等号来思考问题。
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-15 01:46 , Processed in 0.231176 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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