如何在不传递预期参数但使用它已有的参数的情况下调用 sub?

Posted

技术标签:

【中文标题】如何在不传递预期参数但使用它已有的参数的情况下调用 sub?【英文标题】:How can I call this sub without passing in actual parameters but using the parameters it already has? 【发布时间】:2021-11-07 04:01:47 【问题描述】:

每当更新选项按钮时,我想调用一个带有 2 个参数的子程序。其他时候我调用这个 sub 我传入参数。

这是在下面更新子之后从复选框中接受2个参数的原始子

Private Sub showCosts(HS As String, ID As Integer)

将 2 个参数传入 showCosts 的 subs 之一

Private Sub chkH7_AfterUpdate()
If Me.chkH7.Value <> 0 Then
    Call showCosts("H", 7)
Else
    Call clearValues
End If
End Sub

更新子后的选项按钮

Private Sub optInflated_AfterUpdate()
'call the function to show the costs when the inflation toggle is updated/clicked
Call showCosts
End Sub

点击选项按钮后,我需要再次运行子“showCosts”,并使用它已有的相同参数。

【问题讨论】:

运行后 Sub 没有任何参数,不再...为了使用之前的参数值,您的代码必须以某种方式保留它们,并在下次调用Sub 不带参数时使用保留的值。请尝试使用我在答案中发布的场景。 【参考方案1】:

请尝试下一个方法:

    在标准模块之上声明两个变量(在声明区域中):
Private prevHS As String, prevID As Integer
    调整现有的名为Sub 以接受Optional 参数。复制下一个代码在同一个标​​准模块中,其中已声明了上述变量。否则,它们必须声明为As Public
Private Sub showCosts(Optional HS As String, Optional ID As Integer)
   If HS = "" Then HS = prevHS
   If ID = 0 Then ID = prevID
   prevHS = HS: prevID = ID
   'do here whatever you need...
   Debug.Print HS & " - " & ID
End Sub
    使用下一个Sub 测试这个想法:
Sub testshowCosts()
   showCosts "Test", 12: Stop 'press F5 when stopped here
   showCosts
End Sub

您也可以只使用一个参数来调用它,缺少的参数是从模块级别声明的变量中“获取”的,使用之前使用的值。

【讨论】:

谢谢。我会试试这个 @lv2424 你还在尝试吗?建议的解决方案没有解决您的问题吗? 解决问题的最佳角度是尝试-角度。 - 当然,快速付出的人会付出两次(米格尔·德·塞万提斯),另一方面,头发不会因为被拉而长得更快(谚语:-)。 @T.M.我不太在乎恶名。我的目标是 20000,现在我只回答看起来是一个挑战的问题,或者答案看起来很明显......我根本无法理解这么长时间要测试什么。此页面保持打开状态,我可以再次看到他的评论,我忍不住问... :) 深入了解你;没有批评,只是想激发一些微笑:-) @FaneDuru

以上是关于如何在不传递预期参数但使用它已有的参数的情况下调用 sub?的主要内容,如果未能解决你的问题,请参考以下文章

java Web工程,如何在不传参数的情况下,判断WebService接口是不是开放

如何在不传递参数的情况下使用riverpod 系列提供程序

调用不带括号的函数时如何传递参数[Javascript]

重构 PHP OOP - 如何在不传递参数的情况下获取对象?

在不需要 URL 参数的情况下将 props 传递给路由

如果所需的密钥不存在,如何在不中断的情况下传递 link_to 中的参数?