ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > Excel VBA > 关于Application.Caller与工作表的使用

关于Application.Caller与工作表的使用

作者:绿色风 分类: 时间:2022-08-18 浏览:75
楼主
wise
帮助文件中Caller 属性说明如下:
返回关于调用 Visual Basic 的信息。
  1. expression.Caller(Index)

  1. expression
   必需。该表达式返回一个 Application 对象。
  1. Index
     Variant 类型,可选。数组的索引。仅当本属性返回数组时此参数才有用.

本人就Application.Caller与工作表的使用来讨论其用法

1、'返回关于调用 Visual Basic 的信息的自定义函数
  1. Function MyCaller() As String
  2. Select Case TypeName(Application.Caller)
  3.     Case "Range"
  4.         v = Application.Caller.Address
  5.     Case "String"
  6.         v = Application.Caller
  7.     Case "Error"
  8.         v = "Error"
  9.     Case Else
  10.         v = "unknown"
  11. End Select
  12. MyCaller = v
  13. End Function

2、'返回工作表个数的自定义函数
  1. Function SheetsCount() As Integer
  2.     Application.Volatile True
  3.     SheetsCount = Application.Caller.Parent.Parent.Worksheets.Count
  4. End Function

3、'返回工作表所处于的位置
  1. Function SheetPosition() As Integer
  2.     Application.Volatile True
  3.     SheetPosition = Application.Caller.Parent.Index
  4. End Function

4、'返回当前工作表的名称
  1. Function ThisSheetName() As String
  2.     Application.Volatile True
  3.     ThisSheetName = Application.Caller.Parent.Name
  4. End Function

5、'返回第一个工作表名称
  1. Function FirstSheetName() As String
  2.     Application.Volatile True
  3.     With Application.Caller.Parent.Parent.Worksheets
  4.         FirstSheetName = .Item(1).Name
  5.     End With
  6. End Function

6、'返回最后一个工作表名称
  1. Function LastSheetName() As String
  2.     Application.Volatile True
  3.     With Application.Caller.Parent.Parent.Worksheets
  4.         LastSheetName = .Item(.Count).Name
  5.     End With
  6. End Function

7、'返回前一个工作表名称
  1. Function PrevSheetName(Optional ByVal WS As Worksheet = Nothing) As String
  2.     Application.Volatile True
  3.     Dim S As String
  4.     Dim Q As String
  5.     If IsObject(Application.Caller) = True Then
  6.         Set WS = Application.Caller.Worksheet
  7.         If WS.Index = 1 Then
  8.             With Application.Caller.Worksheet.Parent.Worksheets
  9.                 Set WS = .Item(.Count)
  10.             End With
  11.         Else
  12.            Set WS = WS.Previous
  13.         End If
  14.         If InStr(1, WS.Name, " ", vbBinaryCompare) > 0 Then
  15.             Q = "'"
  16.         Else
  17.             Q = vbNullString
  18.         End If
  19.     Else
  20.         If WS Is Nothing Then
  21.             Set WS = ActiveSheet
  22.         End If
  23.         If WS.Index = 1 Then
  24.             With WS.Parent.Worksheets
  25.                 Set WS = .Item(.Count)
  26.             End With
  27.         Else
  28.             Set WS = WS.Previous
  29.         End If
  30.         Q = vbNullString
  31.     End If
  32.     PrevSheetName = Q & WS.Name & Q
  33. End Function

8、'返回后一个工作表名称
  1. Function NextSheetName(Optional WS As Worksheet = Nothing) As String
  2.     Application.Volatile True
  3.     Dim S As String
  4.     Dim Q As String
  5.     If IsObject(Application.Caller) = True Then
  6.         Set WS = Application.Caller.Worksheet
  7.         If WS.Index = WS.Parent.Sheets.Count Then
  8.             With Application.Caller.Worksheet.Parent.Worksheets
  9.                 Set WS = .Item(1)
  10.             End With
  11.         Else
  12.             Set WS = WS.Next
  13.         End If
  14.         If InStr(1, WS.Name, " ", vbBinaryCompare) > 0 Then
  15.             Q = "'"
  16.         Else
  17.             Q = vbNullString
  18.         End If
  19.     Else
  20.         If WS Is Nothing Then
  21.            Set WS = ActiveSheet
  22.         End If
  23.         If WS.Index = WS.Parent.Worksheets.Count Then
  24.             With WS.Parent.Worksheets
  25.                Set WS = .Item(1)
  26.             End With
  27.         Else
  28.             Set WS = WS.Next
  29.         End If
  30.         Q = vbNullString
  31.     End If
  32.     NextSheetName = Q & WS.Name & Q
  33. End Function

9、'返回前一个工作表对应单元格的值
  1. Function RefOnPrevSheet(Addr As String) As Variant
  2.     Application.Volatile True
  3.     With Application.Caller.Parent
  4.     If .Index = 1 Then
  5.         RefOnPrevSheet = _
  6.         .Parent.Worksheets(.Parent.Worksheets.Count).Range(Addr).Value
  7.     Else
  8.         RefOnPrevSheet = .Previous.Range(Addr).Value
  9.     End If
  10.     End With
  11. End Function

10、'返回后一个工作表对应单元格的值
  1. Function RefOnNextSheet(Addr As String) As Variant
  2.     Application.Volatile True
  3.     With Application.Caller.Parent
  4.     RefOnNextSheet = _
  5.         .Parent.Worksheets((.Index Mod .Parent.Worksheets.Count) _
  6.          + 1).Range(Addr).Value
  7.     End With
  8. End Function


sheet.rar
2楼
xyh9999
不转贴太可惜了!

罗刚君<
看完楼主的帖子,我的心情竟是久久不能平静.正如老子所云:大音希声,大象无形.我现在终于明白我缺乏的是什么了,正是楼主那种对真理的执着追求和楼主那种对理想的艰苦实践所产生的厚重感.面对楼主的帖子,我震惊得几乎不能动弹了,楼主那种裂纸欲出的大手笔,竟使我忍不住一次次地翻开楼主的帖子,每看一次,赞赏之情就激长数分,我总在想,是否有神灵活在它灵秀的外表下,以至能使人三月不知肉味,使人有余音绕梁,三日不绝的感受.楼主,你写得实在是太好了.我惟一能做的,就只有把这个帖子顶上去这件事了.  

罗刚君<
在遇到楼主之前,我对人世间是否有真正的圣人是怀疑的;而现在,我终于相信了!我曾经忘情于两汉的歌赋,我曾经惊讶于李杜的诗才,我曾经流连于宋元的词曲.但现在,我才知道我有多么浅薄!本贴太好了!

罗刚君<
  震撼啊!为什么会有如此好的帖子?
  我纵横网络BBS多年,自以为再也不会有任何帖子能打动我,没想到今天看到了如此精妙绝伦的这样一篇帖子!
  楼主,是你让我深深地理解了“人外有人,天外有天”这句话!
  在看完这帖子以后,我没有立即回复,因为我生怕我庸俗不堪的回复会玷污了这网上少有的帖子。但是,我还是回复了,因为觉得如果不能在如此精彩的帖子后面留下自己的网名,那我死也不会瞑目的!
  楼主,请原谅我的自私!我知道无论用多么华丽的辞藻来形容楼主您帖子的精彩程度都是不够的,都是虚伪的,所以我只想说一句:您的帖子太好看了!我愿意一辈子看下去!
  这篇帖子构思新颖,题材独具匠心,段落清晰,情节诡异,跌宕起伏,主线分明,引人入胜,平淡中显示出不凡的文学功底,可谓是字字珠玑,句句经典,是我辈应当学习之典范。
  正所谓:“一马奔腾,射雕引弓,天地都在我心中!”楼主真不愧为Excel界新一代的开山怪!
  本来我已经对这个社区失望了,觉得这个社区没有前途了,心里充满了悲哀.但是看了你的这个帖子,又让我对社区产生了希望,是你让我的心里重新燃起希望之火,是你让我的心死灰复燃,是你拯救了我一颗拔凉拔凉的心!
3楼
罗刚君
4楼
minsheng
学习了,哈哈
5楼
mutiantong
啊,学习了。
似乎有那么一点懂了的感觉。
6楼
wqfzqgk
呵呵,举了这么些例子,基本就是caller他爹或他爷爷的用法,对于其本身的用法基本没有提到,还没有真的正解

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap