【发布时间】:2019-01-20 19:24:29
【问题描述】:
试图将变量的名称传递给 SUB,然后更新 SUB 中变量的值,但我没有做对。
我有一个全局变量
Dim booLastNm as Boolean
我有一个函数
Public Sub FilltheForm(myCTL As Control, intNum As Integer, Optional booName As String)
myCTL.Value = myArray(1, intNum)
If booName <> "" Then booName = True
MsgBox booName & vbCrLf & vbCrLf & booLastNm
End Sub
我在组合框更改例程中调用该函数:
FilltheForm Me.boxLastNm, 1, "booLastNm"
它正确地更改了 myArray(1, 1) 中的用户表单字段“Me.boxLastNm”。我还希望将全局变量“booLastNm”的值设置为 True。但是,“booName”的值设置为 True,而“booLastNm”的值仍设置为“False”。如何将要更改的变量的名称(在本例中为“booLastNm”)传递给函数,以便更改值而不是变量“booName”?我从 Excel 电子表格中读取了大约 148 个变量,并试图将它们转储到多页用户表单中以进行数据验证。 “boo”变量是我在页面更改时检查的布尔变量;如果选定的布尔变量设置为 false,我希望用户在前进到下一页之前对当前页面进行更正。
【问题讨论】:
-
If booName <> "" Then booLastNm = True -
Scott,问题在于我有 148 个可能的变量要传递给函数。如何提取作为可选变量传递的变量名称,并将变量名称的值正确设置为 True?
-
很遗憾,您不能这样做。您将需要指定要设置的每个变量。您可以在函数中使用 case 语句,但您必须在该 case 语句中显式设置每个变量的值。
-
那太臭了!我试图避免在 If...Then...Else 场景中对布尔变量名称进行硬编码,或者选择包含 148 个案例的案例。对如何改进有任何想法?
-
嗯。不要使用 148 个布尔变量?这是一个想法。这样做是绝对必要的,还是只需要在每次运行时测试一个条件,然后根据该测试返回一些结果?最好的编程方式是编写能很好地完成一件事的程序,并根据需要将它们组合起来。如果您只需要根据您传递的参数测试某些东西,那么就这样做,进出并根据结果编写更多决策。您可能会发现更多模式,您可以在这些模式上构建更多功能来处理。