VB 怎么 在自定义函数中,返回多个值?请举例说明

如:传值过去一个半径,
通过调用子程序返回,它的周长和面积!
按钮1单击_click(****):
call 子程序
print 周长,面积
end sub
sub subN(.....)
***********
end sub
请严格按题 回答
我要的是 子程序的 返回值 。最好在VB下测试 通过。
返回值不要自己分割,要返回来就是两个值,且,不在定义公同变量的前提下。因为这题被网友采纳了,
@sysplay 我的描述清楚了吗?其它也不是说Msgbox 这样就能出值,
就好像是 Funtion子过程那样的。带返回值 ,但要是多个值返回,不是单个值
还能MsgBox 周长 & " " & 面积 这样调用
如果不明白的,可以私信我

Sub 按钮1_Click()

    Dim 周长 As Double, 面积 As Double, 半径 As Double

    周长 = 0

    面积 = 0

    半径 = 15#

    Call SubN(周长, 面积, 半径)

    MsgBox 周长 & " " & 面积

End Sub

Sub SubN(ByRef 周长参数, ByRef 面积参数, ByVal 半径参数)

    If 半径参数 < 0 Then

        周长参数 = 0

        面积参数 = 0

    Else

        周长参数 = 2 * 3.14 * 半径参数

        面积参数 = 3.14 * 半径参数 * 半径参数

    End If

End Sub

 以上代码是在Excel的VBA中调试的,可以满足的要求。

追问

可以不带参数吗后面两个参数吗?只传递过去一个半径值
引用时,
msgbox subN(r) 就能得到结果

追答

如果只是要msgbox subN(r)就能得到结果:

Sub 按钮1_Click()
    Dim 半径 As Double
    半径 = 15#
    MsgBox SubN(半径)
End Sub
Function SubN(ByVal 半径参数) As String
    Dim 周长参数 As Double, 面积参数 As Double
    周长参数 = 0
    面积参数 = 0
    If 半径参数 < 0 Then
        周长参数 = 0
        面积参数 = 0
    Else
        周长参数 = 2 * 3.14 * 半径参数
        面积参数 = 3.14 * 半径参数 * 半径参数
    End If
    SubN = "周长=" & 周长参数 & "  " & "面积=" & 面积参数
End Function

追问

返回值不要自己分割,要返回来就是两个值,两个变量

追答

1、Function返回数组

Private Sub Command1_Click()
    Dim 半径 As Double
    半径 = 15#
    Dim 结果
    结果 = SubN(半径)
    MsgBox 结果(0) & " " & 结果(1)
End Sub
Function SubN(ByVal 半径参数 As Double) As Double()
    Dim 周长参数 As Double, 面积参数 As Double
    Dim 结果参数(1) As Double
    周长参数 = 0
    面积参数 = 0
    If 半径参数 < 0 Then
        周长参数 = 0
        面积参数 = 0
    Else
        周长参数 = 2 * 3.14 * 半径参数
        面积参数 = 3.14 * 半径参数 * 半径参数
    End If
    结果参数(0) = 面积参数
    结果参数(1) = 周长参数
    SubN = 结果参数
End Function

 

2、Sub中传入一个参数,在Sub内修改全局变量

Public 周长 As Double
Public 面积 As Double
Private Sub Command1_Click()
    Dim 半径 As Double
    半径 = 15#
    Call SubN(半径)
    MsgBox 周长 & " " & 面积
End Sub
Sub SubN(ByVal 半径参数)
    If 半径参数 < 0 Then
        周长 = 0
        面积 = 0
    Else
        周长 = 2 * 3.14 * 半径参数
        面积 = 3.14 * 半径参数 * 半径参数
    End If
End Sub

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-11-27
不定义全局变量,根本不可能做到的你的要求。
你用Sub就必须要定义全局公有变量。
★:专业定制各种小软件,小型数据管理操作系统
★:包售后 1 年(不含新增功能),6×18小时服务。实时解决问题!追问

是可以的啊
你看仔细看我题目。以前用过的,但就是想不起来。
不用定义变量,也不用像1楼那样的形貌返回的。

追答

我以6年的VB程序员经验告诉:

    没有!


@评论者  自定义类型也是要全局定义的啊?不是吗?


我好像知道你的意思了。是这样吧

Private Type mytype
    c As Double
    s As Double
End Type

Private Function SubN(r As Double) As mytype
    SubN.c = 2 * 3.14 * r
    SubN.s = 3.14 * r ^ 2
End Function

Private Sub Command1_Click()
    MsgBox SubN(6).s
End Sub

追问

哦,我知道了

本回答被提问者采纳
相似回答