Excel精英培训网

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

[已解决]Application.Caller 属性的帮助示例

[复制链接]
发表于 2009-12-17 10:14 | 显示全部楼层 |阅读模式
本帖最后由 爱疯 于 2013-4-21 11:43 编辑


Sub a()
    Dim v

    Select Case TypeName(Application.Caller)
    Case "Range"
        v = Application.Caller.Address
    Case "String"
        v = Application.Caller
    Case "Error"
        v = "Error"
    Case Else
        v = "unknown"
    End Select
    MsgBox "caller = " & v
    
End Sub

请问这个示例的作用是什么?

谢谢!

最佳答案
1970-1-1 08:00
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2009-12-17 10:19 | 显示全部楼层

单独放没啥意思,你把这个放到自定义函数或者用一个窗体控件指定宏看看。

看看帮助。只有在下面调用进程中的情况,Caller才会记录东西。

调用进程返回值
在单个单元格中输入的自定义函数代表该单元格的 Range 对象
在单元格区域中作为数组公式的一部分的自定义函数代表该单元格区域的 Range 对象
Auto_Open、 Auto_Close 、 Auto_Activate 或 Auto_Deactivate 宏以文本方式返回的文档名
OnDoubleClickOnEntry 属性所设置的宏该宏所应用的图表对象标识符或单元格引用(若适用)的名称
“工具”菜单中的“宏”对话框,或上述之外的其他调用者错误值 #REF!

回复

使用道具 举报

发表于 2009-12-17 10:30 | 显示全部楼层

在我看来Caller就是"引起响应"的"源"
回复

使用道具 举报

 楼主| 发表于 2009-12-17 10:33 | 显示全部楼层

那贴并没有放到自定义函数或者用一个窗体控件指定宏呀

那贴:http://www.excelpx.com/forum.php?mod=viewthread&tid=105322

回复

使用道具 举报

 楼主| 发表于 2009-12-17 10:35 | 显示全部楼层

QUOTE:
以下是引用Dj_soo在2009-12-17 10:30:00的发言:
在我看来Caller就是"引起响应"的"源"

谢谢DJ

我还是没明白

回复

使用道具 举报

发表于 2009-12-17 10:36 | 显示全部楼层

QUOTE:
以下是引用爱疯在2009-12-17 10:35:00的发言:

谢谢DJ

我还是没明白

比如我喊:"爱疯",你答应了,你是响应者,我就是Caller(引起了你的响应)

回复

使用道具 举报

发表于 2009-12-17 10:36 | 显示全部楼层

说到了就顺便谈谈。

Caller其实是个蛮有用的东西。

把它想象成一个记录器,当你执行某些操作时(见调用进程),会帮你记录下一些信息(返回值)。

举两个例子

1、兰版的类模块中有一例就是判断点击了哪张图片。

其实也可以这么做。写一个过程如下:

Sub Test()
    MsgBox Application.Caller
End Sub

然后写另一个过程让所有的图片都指定Test这个宏,你再点击看看。

2、函数Row()参数省略时如何得出当前单元格的呢?

参考以下自定义函数:

Function MyRow(Optional MyRng As Range)
    If MyRng Is Nothing Then
        MyRow = Application.Caller.Row
    Else
        MyRow = MyRng.Row
    End If
End Function

当MyRng没有定义时,那么就通过Caller来得到自定义函数所在单元格的对象。

回复

使用道具 举报

发表于 2009-12-17 10:38 | 显示全部楼层

那些按钮不是指定了宏
回复

使用道具 举报

发表于 2009-12-17 10:39 | 显示全部楼层

学习师傅和猪队
回复

使用道具 举报

发表于 2009-12-17 10:40 | 显示全部楼层

QUOTE:
以下是引用爱疯在2009-12-17 10:33:00的发言:

那贴并没有放到自定义函数或者用一个窗体控件指定宏呀

那贴:http://www.excelpx.com/forum.php?mod=viewthread&tid=105322

帮你简化了代码:

 


Sub 点击()
    Dim R As Long     '参数
    
    Call red
    MsgBox ActiveSheet.Shapes(Application.Caller).DrawingObject.Caption
    ActiveSheet.Shapes(Application.Caller).DrawingObject.Font.ColorIndex = 1
End Sub

Sub red()
    Dim i, str

    For i = 100 To 115
        str = "Button " & i
        ActiveSheet.Shapes(str).Select
        Selection.Font.ColorIndex = 3
    Next i
End Sub
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-6 07:15 , Processed in 0.311607 second(s), 6 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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