Excel精英培训网

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

[已解决]能否判断是自身运行,还是被调用运行

[复制链接]
发表于 2012-8-15 20:23 | 显示全部楼层 |阅读模式
本帖最后由 爱疯 于 2012-8-15 20:49 编辑

  1. Sub a()
  2.     Call c
  3. End Sub

  4. Sub b()
  5.     Call c
  6. End Sub

  7. Sub c()
  8.     '希望c能单独运行,又能选择执行c:
  9.     '如果是被a调用,就执行call d
  10.     '如果是被b调用,不执行call d
  11.     Call d
  12. End Sub

  13. Sub d()
  14.     MsgBox "d"
  15. End Sub
复制代码
请问:当C开始运行后,能否判断出是自身(c)运行,还是被哪个程序(a或b)调用才运行?
谢谢!
最佳答案
2012-8-16 09:37
爱疯 发表于 2012-8-16 09:23
谢谢无聊的疯子!
执行a后,没有执行d呀?

把过程放进去就可以了啊

  1. Option Explicit
  2. Dim Dy As String
  3. Sub a()
  4.   Dy = "a"
  5.   Call c
  6. End Sub
  7. Sub b()
  8.   Dy = "b"
  9.   Call c
  10. End Sub
  11. Sub c()
  12.   If Dy = "a" Then
  13.     '放你的过程
  14.     Call d("这是 由 A 过程传递过来的值!")
  15.     Dy = ""
  16.   ElseIf Dy = "b" Then
  17.     '放你的过程
  18.     Dy = ""
  19.   Else
  20.     Call d("这是C过程传递过来的")
  21.   End If
  22. End Sub

  23. Sub d(S As String)
  24.   MsgBox S
  25. End Sub
复制代码
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2012-8-15 21:44 | 显示全部楼层
回复

使用道具 举报

发表于 2012-8-16 07:49 | 显示全部楼层
过程里添加一个变量就行了啊

  1. Dim Dy As String
  2. Sub a()
  3.   Dy = "a"
  4.   Call c
  5. End Sub

  6. Sub b()
  7.   Dy = "b"
  8.   Call c
  9. End Sub

  10. Sub c()
  11.   If Dy = "a" Then
  12.     '放你的过程
  13.     Dy = ""
  14.   ElseIf Dy = "b" Then
  15.     '放你的过程
  16.     Dy = ""
  17.   Else
  18.     Call d
  19.   End If
  20. End Sub

  21. Sub d()
  22.   MsgBox "d"
  23. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2012-8-16 09:23 | 显示全部楼层
无聊的疯子 发表于 2012-8-16 07:49
过程里添加一个变量就行了啊

谢谢无聊的疯子!
执行a后,没有执行d呀?

回复

使用道具 举报

发表于 2012-8-16 09:37 | 显示全部楼层    本楼为最佳答案   
爱疯 发表于 2012-8-16 09:23
谢谢无聊的疯子!
执行a后,没有执行d呀?

把过程放进去就可以了啊

  1. Option Explicit
  2. Dim Dy As String
  3. Sub a()
  4.   Dy = "a"
  5.   Call c
  6. End Sub
  7. Sub b()
  8.   Dy = "b"
  9.   Call c
  10. End Sub
  11. Sub c()
  12.   If Dy = "a" Then
  13.     '放你的过程
  14.     Call d("这是 由 A 过程传递过来的值!")
  15.     Dy = ""
  16.   ElseIf Dy = "b" Then
  17.     '放你的过程
  18.     Dy = ""
  19.   Else
  20.     Call d("这是C过程传递过来的")
  21.   End If
  22. End Sub

  23. Sub d(S As String)
  24.   MsgBox S
  25. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2012-8-16 09:55 | 显示全部楼层
学习了!

能取得当前执行的过程的过程名么?
虽然听来有些别扭,就像现实中在别人家玩的时候,突然想问他家的门牌号。{:011:}
回复

使用道具 举报

发表于 2012-8-16 09:56 | 显示全部楼层
爱疯 发表于 2012-8-16 09:55
学习了!

能取得当前执行的过程的过程名么?

来个比如呢?看看你想要的是啥样的结果
回复

使用道具 举报

发表于 2012-8-16 10:05 | 显示全部楼层
爱疯 发表于 2012-8-16 09:55
学习了!

能取得当前执行的过程的过程名么?

类似这样的效果么?

  1. Option Explicit
  2. Dim Dy As String
  3. Sub a()
  4.   Dy = "a"
  5.   Call c
  6. End Sub
  7. Sub b()
  8.   Dy = "b"
  9.   Call c
  10. End Sub
  11. Sub c()
  12. Dim S As String
  13.   If Dy = "b" Then Exit Sub
  14.   S = IIf(Dy = "a", "a", "c")
  15.   Call d(S)
  16. End Sub

  17. Sub d(S As String)
  18.   MsgBox "现在运行的是过程: " & S & " 传递过来的值!"
  19. End Sub

复制代码
回复

使用道具 举报

 楼主| 发表于 2012-8-16 10:08 | 显示全部楼层
无聊的疯子 发表于 2012-8-16 09:56
来个比如呢?看看你想要的是啥样的结果

瞎想的,因为看到有当前工作簿、当前工作表、当前单元格,

所以想有没有 当前模块、当前过程,

如果没有,是为什么。
回复

使用道具 举报

发表于 2012-8-16 10:18 | 显示全部楼层
爱疯 发表于 2012-8-16 10:08
瞎想的,因为看到有当前工作簿、当前工作表、当前单元格,

所以想有没有 当前模块、当前过程,

你可以去研究下病毒里的代码,应该对你有点用处
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-3 16:58 , Processed in 1.065154 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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