回 帖 发 新 帖 刷新版面

主题:如何让FUNCTION返回多个值

在主程序中,将两个变量(一个字符串和一个整型变量)传递给调用函数,而调用函数却是要返回另外一个整型数和一个二维数组,请问如何实现呢?
调用的参数和返回的参数分别是两个不同的变量

回复列表 (共8个回复)

沙发

这是我做的一部分程序,还没有返回变量,想要在函数readdata中的数组X和整数m返回到主程序中,以各主程序来使用它
Private Function Readdata(txdata As String, jn As Integer) As Long
   Dim strPath, sFilePath, str As String
   Dim i, j, m, n As Integer                'jn为一行中的数据个数
   Dim X(1 To 3, 0 To 300), num(3) As Single
   i = 0
   strPath = App.Path
   If Right(strPath, 1) <> "\" Then strPath = strPath + "\"
   sFilePath = strPath & txdata
'********************************************************************************************读入数据
Open sFilePath For Input As #23  '打开数据文件
    Do While Not EOF(23)
    '循环对数据文件各行进行作图处理
    Line Input #23, str     '读出一行数据到str 中
    For j = 1 To jn - 1
    str = Trim(str): n = InStr(str, " ")    '去掉字符串两端的空格,找到该数据中出现的首个空字符的位置
    num(j) = Left(str, n - 1): str = Right(str, Len(str) - n)    '提取出该行第j个数据num(j),将该行剩余字符串存入str中
    Next j
    str = Trim(str): num(j) = str                                '提取出该行第jn个数据
    For j = 1 To jn
    X(j, i) = (num(j))                                             '将第i行数据分成jn个分别存在X(j,i)中
    Next j
    i = i + 1
    Loop
    m = i - 1
    Readdata = X
    Close #23
End Function


Private Sub Form_Load()
    Dim txdata As String
    Dim i, j, m, jn As Integer
    Dim X(1 To 3, 0 To 300) As Single
    
'********************************************************************************************初始形态读出来
   txdata = "SHAPE.TXT"
   jn = 2
   X = Readdata(txdata, jn)
End Sub

板凳

在你的被调函数中,形参jn是传址方式,所以在主调过程中的相应实参也会改变,也就是说,你所需要的整型数已经返回了。
请参考下面的代码来修改你的代码:

Private Sub Form_load()
Dim J As Integer
Dim K() As Integer
J = 10
K = arrayfunction(J)
Debug.Print K(0, 0), K(0, 1), K(0, 2)
Debug.Print K(1, 0), K(1, 1), K(1, 2)
Debug.Print J
End Sub


Private Function arrayfunction(i As Integer) As Integer()
Dim x(1, 2) As Integer
x(0, 0) = i + 2: x(0, 1) = i + 3: x(0, 2) = i + 4
x(1, 0) = i * 2: x(1, 1) = i * 3: x(1, 2) = i * 4
i = 50
arrayfunction = x
End Function

3 楼

我的可不止这些错误,而是方法还没找到的问题,你给的只是返回一个参数,我需要返回多个参数呢
[quote]在你的被调函数中,形参jn是传址方式,所以在主调过程中的相应实参也会改变,也就是说,你所需要的整型数已经返回了。
请参考下面的代码来修改你的代码:

Private Sub Form_load()
Dim J As Integer
Dim K() As Integer
J = 10
K = arrayfunction(J)
Debug.Print K(0, 0), K(0, 1), K(0, 2)
Debug.Print K(1, 0), K(1, 1), K(1, 2)
Debug.Print J
End Sub


Private Function arrayfunction(i As Integer) As Integer()
Dim x(1, 2) As Integer
x(0, 0) = i + 2: x(0, 1) = i + 3: x(0, 2) = i + 4
x(1, 0) = i * 2: x(1, 1) = i * 3: x(1, 2) = i * 4
i = 50
arrayfunction = x
End Function[/quote]

4 楼

唉,你要看仔细点,我的代码中已经返回了数组

5 楼

[quote]唉,你要看仔细点,我的代码中已经返回了数组[/quote]
不单要返回数组,还要返回整数m,我需要返回两个参数

6 楼

没救了,这么简单的代码,居然看不出返回了一个数组一个整数(其实只要你愿意,可以返回64个整数),老师是怎么教的

7 楼

[quote]没救了,这么简单的代码,居然看不出返回了一个数组一个整数(其实只要你愿意,可以返回64个整数),老师是怎么教的[/quote]
我自己学的,谢谢!你的代码实现不了我要求的功能,OK?我的代码只是为了表示我的程序大概意思,实际是有错误的,jn是传址方式,而实际上我写错了,我要求的是传值方式,你没有看清我补充的话。

8 楼


我已经想到解决办法了

我来回复

您尚未登录,请登录后再回复。点此登录或注册