我想使用一个函数来选择一个介于1到31之间的随机数,并根据选择指定一个“框”值。结果1-16是第1栏,17-24是第2栏,依此类推。
在Sub中,我想检测数据中是否存在选定的框。这是重要的部分:如果数据中不存在所选的框,请选择其他框。
要选择其他框,我想引用该函数,而不必使用“ goto”进行循环,因为循环很快就会变得非常混乱。
类似的问题似乎是与我不同的用例。我尝试生成的值不是由Sub中定义的变量决定的,这是函数的常见用法。
这是在Windows 10,Excel 365上。由于没有足够的功能,我使用了循环(GoTo ...#)。
Sub cmdClickityClack
SelectABox
MsgBox (SelectABox(Box)) 'I know, this is completely wrong
End Sub
Function SelectABox(Box As Long)
Dim BoxFind As Long
BoxFind = RndBetween(1, 31)
Select Case BoxFind
Case 0 To 16
Box = "1"
Case 17 To 24
Box = "2"
Case 25 To 28
Box = "3"
Case 29 To 30
Box = "4"
Case 31
Box = "5"
End Select
End Function
理想情况下,我只在子内部使用变量Box(由函数定义)。在调用该函数后,子程序将知道Box的值。
答案 0 :(得分:3)
您无需调用该函数然后对其进行处理,您只需调用该函数并将其视为要在此时使用的变量即可。
Sub cmdClickityClack()
MsgBox SelectABox
End Sub
或者您可以声明一个变量并存储输出,然后使用该变量:
Sub cmdClickityClack()
Dim str as String
str = SelectABox
MsgBox str
End Sub
您没有使用Box,因此无需通过它。并使用函数名称返回该值。
Function SelectABox()
Dim BoxFind As Long
BoxFind = Application.RandBetween(1, 31)
Select Case BoxFind
Case 0 To 16
SelectABox = "1"
Case 17 To 24
SelectABox = "2"
Case 25 To 28
SelectABox = "3"
Case 29 To 30
SelectABox = "4"
Case 31
SelectABox = "5"
End Select
End Function
如果要传递要在函数中使用的变量:
Sub cmdClickityClack()
Dim BoxFind As Long
BoxFind = Application.RandBetween(1, 31)
MsgBox SelectABox(BoxFind)
End Sub
Function SelectABox(box As Long)
Select Case box
Case 0 To 16
SelectABox = "1"
Case 17 To 24
SelectABox = "2"
Case 25 To 28
SelectABox = "3"
Case 29 To 30
SelectABox = "4"
Case 31
SelectABox = "5"
End Select
End Function
但是将变量传递给要在函数中使用的函数,并使用函数名称本身返回值。