如何在不传递预期参数但使用它已有的参数的情况下调用 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接口是不是开放