自定义一函数,用来对数组进行处理,比如下面的可以GetSameElement(arr1,arr2,arr3)
但函数本身的的参数是从别的地方传递过来的,数量及名称均不定,现在想用一个字符串变量来整体代表这个参数比如str="arr1,arr2,arr3",GetSameElement(str)但不成功,怎么解决这问题?
Function GetSameElement(ParamArray vParamArray()) As String

解决方案 »

  1.   

    function GetSameElement (a as long ,b as long ,ParamArray Params()) as long 
        Dim I As Variant
        For Each I In Params
            Debug.Print CStr(I)
        Next
     
    end function
      

  2.   

    既然数量和名称不定,你又怎么生成str="arr1,arr2,arr3"语句?
    ParamArray 本来就是用来解决数量和名称不定的情况,代码写了,怎么不会活用啊?
    如果仅想把其它参数变成数组,可以使用Array函数,比如v()=array(arr1,arr2,arr3)。
      

  3.   

    首先感谢下上次的代码
    不知道我的问题有没有说清楚
    上次写的函数是可以这么用,假如arr0,arr1,arr2是三个数组名称,GetSameElement(arr0,arr1,arr2)
    但我现在比如有5个数组arr0,arr1,arr2,arr3,arr4,
    我现在随机要求3个,比如arr0,arr2,arr3,怎么把这个信息传递给函数呢?
    相当于,我把这5个数组名称放入一个list,任意选取他们的组合,赋值给函数
      

  4.   

    GetSameElement(str)不成功,是因为和函数GetSameElement的定义不符,看你的GetSameElement怎么定义的,
      

  5.   

    Sub Main()
        Debug.Print GetSameElement(Array(1, 2, 3, 4, 5), Array(1, 2, 9), Array(1, 2, 10))
    End SubFunction GetSameElement(ParamArray vParamArray()) As String
        Dim strArr() As String
        Dim i As Long, j As Long, k As Long
        Dim strResult As String
        Dim nVal As Long
        Dim blnSame As Boolean
        
        For i = 0 To UBound(vParamArray)
            If Not IsArray(vParamArray(i)) Then Exit Function
            ReDim Preserve strArr(i)
            strArr(i) = Join(vParamArray(i), ",")
        Next
        
        For i = 0 To UBound(vParamArray)
            For j = 0 To UBound(vParamArray(i))
                nVal = vParamArray(i)(j)
                If InStr(strResult, nVal) = 0 Then
                    blnSame = True
                    For k = 0 To UBound(strArr)
                        If InStr(strArr(k), nVal) = 0 Then
                            blnSame = False
                            Exit For
                        End If
                    Next
                    If blnSame Then strResult = strResult & "," & nVal
                End If
            Next
        Next
        strResult = Mid(strResult, 2)
        GetSameElement = strResult
    End Function
      

  6.   

    楼主是不是想要用字符串代替变量名啊? 那样的话用callbyname应该可以解决了。