Excel精英培训网

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

[已解决]请问为什么返回true?

[复制链接]
发表于 2012-1-10 21:18 | 显示全部楼层 |阅读模式
  1. Sub b()
  2. Range("a1").Copy
  3. MsgBox ActiveSheet.Paste
  4. End Sub
复制代码

{:041:}谢谢
最佳答案
2012-1-11 12:48
感觉是当Paste执行成功时会返回True.
而不成功时返回Empty,而不是想象中的False,这个感觉也能理解,就是返回结果没有初始化

大约能找到两种情况返回Empty

Sub tt1()   ' 运行前保护活动工作表
    On Error Resume Next
    Range("a1").Copy
    x = ActiveSheet.Paste
    Debug.Print x
End Sub

Sub tt2()   ' 运行前清空剪贴板,按ESC就行了
    On Error Resume Next
'    Range("a1").Copy
    x = ActiveSheet.Paste
    Debug.Print x
End Sub
发表于 2012-1-10 21:42 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2012-1-10 21:49 | 显示全部楼层
清空剪贴板,也true

Range("a1").Copy
x = ActiveSheet.Paste

这样看了后,我想,是不是表示粘贴成功?!
既然可以返回true,那什么情况下返回false呢?
回复

使用道具 举报

发表于 2012-1-10 21:50 | 显示全部楼层
你想达到一个什么样的结果。你这段代码的意义在于显示复制有没有成功。
如果你想得到复制后的值的话,先不要用MSGBOX,直接用后面那个粘贴就行了。
然后用msgbox activecell.value
回复

使用道具 举报

 楼主| 发表于 2012-1-10 22:03 | 显示全部楼层
chenzhi_juan 发表于 2012-1-10 21:50
你想达到一个什么样的结果。你这段代码的意义在于显示复制有没有成功。
如果你想得到复制后的值的话,先不 ...

谢谢chenzhi_juan

开始,我也这么想过,是否表示复制成功?

可msgbox这句显示的是 “关于粘贴的信息”,应该是与复制无关的吧。也就说,一般情况下粘贴总是正常成功的。就像技巧操作,怎么按ctrl+v,也不会出错。

但我还是想不出,啥时msgbox会返回false


回复

使用道具 举报

发表于 2012-1-10 23:38 | 显示全部楼层
首先我是个初学者,你的问题我试了下,我想应该是ActiveSheet的问题吧,因为我觉得无论怎么操作EXCEL,都是有一个工作表和一个单元格是被激活的,Active应该是激活或者有效的意思吧,既然无论怎么操作EXCEL,都是有一个工作表和一个单元格是被激活的,那MSGBOX就一定是TURE,如果要返回FALSE的话,就要令ACTIVE失效,就打开一个工作表和单元格沒被激活的EXCEL文件,但是这是做不到的呀,^_^,不知道我这个理解是不是你想要的?
回复

使用道具 举报

 楼主| 发表于 2012-1-11 09:40 | 显示全部楼层
谢谢chrissha !
我不知道,也不知怎么能证明你说的对不对
回复

使用道具 举报

发表于 2012-1-11 12:48 | 显示全部楼层    本楼为最佳答案   
感觉是当Paste执行成功时会返回True.
而不成功时返回Empty,而不是想象中的False,这个感觉也能理解,就是返回结果没有初始化

大约能找到两种情况返回Empty

Sub tt1()   ' 运行前保护活动工作表
    On Error Resume Next
    Range("a1").Copy
    x = ActiveSheet.Paste
    Debug.Print x
End Sub

Sub tt2()   ' 运行前清空剪贴板,按ESC就行了
    On Error Resume Next
'    Range("a1").Copy
    x = ActiveSheet.Paste
    Debug.Print x
End Sub
回复

使用道具 举报

 楼主| 发表于 2012-1-11 13:12 | 显示全部楼层
吕?布 发表于 2012-1-11 12:48
感觉是当Paste执行成功时会返回True.
而不成功时返回Empty,而不是想象中的False,这个感觉也能理解,就是返 ...

谢谢吕布!
发1楼这个现象时:
觉得奇怪,还能返回true
觉得正常,人性化呀,告诉你可执行。

假设,1楼现象的解释是:当一个方法可执行时,就返回true

我找了几个方法测试了下:
Sub test2()
    Dim x, y, z
   
    x = [a1].Activate
    y = Cells.Clear
    z = [b1].Copy
End Sub

咦,都是true,事实上去单独执行赋值号右边的操作也是可以的(如果不可以,就不会返回true)
假设是对的吧


回复

使用道具 举报

发表于 2012-1-11 17:38 | 显示全部楼层
VBA中有函数和过程之分,函数有返回值,过程没返回值,而C(好象是的)语言中,只有函数,并且必须有返回值(后来C++好象也弄了个Void返回类型的函数)。
以上关于其它语言的描太空不一定准确,写在这里只是便于理解这里过程也有返回值(我猜测有可能就是以前用C语言写的过程)
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-17 18:49 , Processed in 0.255678 second(s), 8 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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