检查私有子的返回值
Posted
技术标签:
【中文标题】检查私有子的返回值【英文标题】:Check Return value of private sub 【发布时间】:2016-07-23 13:51:37 【问题描述】:在 Excel 2007 工作簿中,我有三个 Excel 模块,每个模块包含一个子例程。 Driver sub (UpdateDataFromOracle) 调用 subs UpdateResponse 和 UpdateSched。该代码工作正常,但我想检查每个被调用潜艇的“返回代码”。我只希望用户可以看到 Driver 子程序,因此我将模块 1 和 2 中的子程序设为私有。 模块 1 私有子 UpdateResponse 模块 2 私有子 UpdateSched 模块 3 公共子 UpdateDataFromOracle
这是来自驱动子程序的代码
Sub UpdateDataFromOracle()
'DECLARE VARIABLES
Dim varSchedReturn as variant
'...
Call UpdateResponse
Call UpdateSched
'I Would like to insert the "return code" check here
End Sub
这是来自被调用子的代码
Option Explicit
Private Sub UpdateResponse()
'DECLARE VARIABLES
'...
If Sheets(strTempSheet).UsedRange.Rows.Count > 10 Then
UpdateResponse = 0
Else UpdateResponse = 90
End If
End Sub
要呼叫私人潜艇,我不得不放弃“呼叫”并使用“
Application.Run "Module1.UpdateResponse"
但我不知道如何以这种方式获取返回码。 我还创建了 UpdateResponse 和 UpdateSched 私有函数,但我仍然不知道如何取回返回码。 当我创建 UpdateResponse 和 UpdateSched 公共函数时,我可以在被调用的 subs 末尾使用如下语句:
Else UpdateResponse = 90
问题是,如果我将函数设为 Public,则调用的子例程对用户是可见的。
我的目标是只有 Driver 子对用户可见,并且能够从 Driver 子中被调用的子中评估某种“返回代码”。 感谢您查看此内容。
【问题讨论】:
在具有您不希望用户看到的功能的模块中使用Option Private Module
下面的Option Explicit
:***.com/q/296696/293078
附带说明:如果您需要返回与 Sub 同名的变量,请使用 Function 而不是 Sub
你好道格。 Option Explicit 下面的 Option Private Module 起到了作用。我把被调用的子程序变成了函数。然后,我在驱动程序中所要做的就是使用以下语句: varModule1Return = UpdateResponse 和另一个语句 varModule2Return = UpdateSched 我相信您知道,将函数名称放在等号的右侧会导致函数被执行。感谢您的所有帮助。
不客气。另一个提示,这个只是关于 SO。如果您在某人的姓名前加上“@”,例如 @DougGlancy,他们会收到有关您的评论的通知。编码愉快!
【参考方案1】:
我没有完全阅读问题,但将它们更改为 Function
Private Function UpdateResponse() As Integer
'DECLARE VARIABLES
'...
If Sheets(strTempSheet).UsedRange.Rows.Count > 10 Then
UpdateResponse = 0
Else
UpdateResponse = 90
End If
End Function
然后:
Dim response ' As Variant or Integer
response = Application.Run("Module1.UpdateResponse")
另外,Option Private Module
或 Module1 中的公共变量有 2 种更好的方法
3 Ways to Call a Private Sub from Another Module
【讨论】:
你好 Slai,这似乎对我不起作用。在被调用函数中使用“选项私有模块”似乎可以解决问题。该建议来自上面的 Doug Glancy。【参考方案2】:@DougGlancy 给出的答案效果很好。它被列为对我原始问题的评论,因此我添加此答案以表明他的答案是正确的。
【讨论】:
【参考方案3】:我使用的 Windows Excel 的一个选项是在用户机器上设置可以在以后的过程中检索的值。 https://msdn.microsoft.com/en-us/library/z46c489x(v=vs.110).aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1
替代方法可以是设置 Excel 工作簿的某些属性,或者在 Excel 中创建与它们关联的名称和值。 (命名范围的一部分)。
最后,您可以在 Windows 注册表中添加和更改值。
【讨论】:
这些太复杂了。以上是关于检查私有子的返回值的主要内容,如果未能解决你的问题,请参考以下文章