楼主 wise |
帮助文件中Caller 属性说明如下: 返回关于调用 Visual Basic 的信息。
- expression.Caller(Index)
- expression
必需。该表达式返回一个 Application 对象。
- Index
Variant 类型,可选。数组的索引。仅当本属性返回数组时此参数才有用.
本人就Application.Caller与工作表的使用来讨论其用法
1、'返回关于调用 Visual Basic 的信息的自定义函数
- Function MyCaller() As String
- 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
- MyCaller = v
- End Function
2、'返回工作表个数的自定义函数
- Function SheetsCount() As Integer
- Application.Volatile True
- SheetsCount = Application.Caller.Parent.Parent.Worksheets.Count
- End Function
3、'返回工作表所处于的位置
- Function SheetPosition() As Integer
- Application.Volatile True
- SheetPosition = Application.Caller.Parent.Index
- End Function
4、'返回当前工作表的名称
- Function ThisSheetName() As String
- Application.Volatile True
- ThisSheetName = Application.Caller.Parent.Name
- End Function
5、'返回第一个工作表名称
- Function FirstSheetName() As String
- Application.Volatile True
- With Application.Caller.Parent.Parent.Worksheets
- FirstSheetName = .Item(1).Name
- End With
- End Function
6、'返回最后一个工作表名称
- Function LastSheetName() As String
- Application.Volatile True
- With Application.Caller.Parent.Parent.Worksheets
- LastSheetName = .Item(.Count).Name
- End With
- End Function
7、'返回前一个工作表名称
- Function PrevSheetName(Optional ByVal WS As Worksheet = Nothing) As String
- Application.Volatile True
- Dim S As String
- Dim Q As String
- If IsObject(Application.Caller) = True Then
- Set WS = Application.Caller.Worksheet
- If WS.Index = 1 Then
- With Application.Caller.Worksheet.Parent.Worksheets
- Set WS = .Item(.Count)
- End With
- Else
- Set WS = WS.Previous
- End If
- If InStr(1, WS.Name, " ", vbBinaryCompare) > 0 Then
- Q = "'"
- Else
- Q = vbNullString
- End If
- Else
- If WS Is Nothing Then
- Set WS = ActiveSheet
- End If
- If WS.Index = 1 Then
- With WS.Parent.Worksheets
- Set WS = .Item(.Count)
- End With
- Else
- Set WS = WS.Previous
- End If
- Q = vbNullString
- End If
- PrevSheetName = Q & WS.Name & Q
- End Function
8、'返回后一个工作表名称
- Function NextSheetName(Optional WS As Worksheet = Nothing) As String
- Application.Volatile True
- Dim S As String
- Dim Q As String
- If IsObject(Application.Caller) = True Then
- Set WS = Application.Caller.Worksheet
- If WS.Index = WS.Parent.Sheets.Count Then
- With Application.Caller.Worksheet.Parent.Worksheets
- Set WS = .Item(1)
- End With
- Else
- Set WS = WS.Next
- End If
- If InStr(1, WS.Name, " ", vbBinaryCompare) > 0 Then
- Q = "'"
- Else
- Q = vbNullString
- End If
- Else
- If WS Is Nothing Then
- Set WS = ActiveSheet
- End If
- If WS.Index = WS.Parent.Worksheets.Count Then
- With WS.Parent.Worksheets
- Set WS = .Item(1)
- End With
- Else
- Set WS = WS.Next
- End If
- Q = vbNullString
- End If
- NextSheetName = Q & WS.Name & Q
- End Function
9、'返回前一个工作表对应单元格的值
- Function RefOnPrevSheet(Addr As String) As Variant
- Application.Volatile True
- With Application.Caller.Parent
- If .Index = 1 Then
- RefOnPrevSheet = _
- .Parent.Worksheets(.Parent.Worksheets.Count).Range(Addr).Value
- Else
- RefOnPrevSheet = .Previous.Range(Addr).Value
- End If
- End With
- End Function
10、'返回后一个工作表对应单元格的值
- Function RefOnNextSheet(Addr As String) As Variant
- Application.Volatile True
- With Application.Caller.Parent
- RefOnNextSheet = _
- .Parent.Worksheets((.Index Mod .Parent.Worksheets.Count) _
- + 1).Range(Addr).Value
- End With
- End Function
sheet.rar |
2楼 xyh9999 |
不转贴太可惜了!
罗刚君< 看完楼主的帖子,我的心情竟是久久不能平静.正如老子所云:大音希声,大象无形.我现在终于明白我缺乏的是什么了,正是楼主那种对真理的执着追求和楼主那种对理想的艰苦实践所产生的厚重感.面对楼主的帖子,我震惊得几乎不能动弹了,楼主那种裂纸欲出的大手笔,竟使我忍不住一次次地翻开楼主的帖子,每看一次,赞赏之情就激长数分,我总在想,是否有神灵活在它灵秀的外表下,以至能使人三月不知肉味,使人有余音绕梁,三日不绝的感受.楼主,你写得实在是太好了.我惟一能做的,就只有把这个帖子顶上去这件事了.
罗刚君< 在遇到楼主之前,我对人世间是否有真正的圣人是怀疑的;而现在,我终于相信了!我曾经忘情于两汉的歌赋,我曾经惊讶于李杜的诗才,我曾经流连于宋元的词曲.但现在,我才知道我有多么浅薄!本贴太好了!
罗刚君< 震撼啊!为什么会有如此好的帖子? 我纵横网络BBS多年,自以为再也不会有任何帖子能打动我,没想到今天看到了如此精妙绝伦的这样一篇帖子! 楼主,是你让我深深地理解了“人外有人,天外有天”这句话! 在看完这帖子以后,我没有立即回复,因为我生怕我庸俗不堪的回复会玷污了这网上少有的帖子。但是,我还是回复了,因为觉得如果不能在如此精彩的帖子后面留下自己的网名,那我死也不会瞑目的! 楼主,请原谅我的自私!我知道无论用多么华丽的辞藻来形容楼主您帖子的精彩程度都是不够的,都是虚伪的,所以我只想说一句:您的帖子太好看了!我愿意一辈子看下去! 这篇帖子构思新颖,题材独具匠心,段落清晰,情节诡异,跌宕起伏,主线分明,引人入胜,平淡中显示出不凡的文学功底,可谓是字字珠玑,句句经典,是我辈应当学习之典范。 正所谓:“一马奔腾,射雕引弓,天地都在我心中!”楼主真不愧为Excel界新一代的开山怪! 本来我已经对这个社区失望了,觉得这个社区没有前途了,心里充满了悲哀.但是看了你的这个帖子,又让我对社区产生了希望,是你让我的心里重新燃起希望之火,是你让我的心死灰复燃,是你拯救了我一颗拔凉拔凉的心! |