【问题标题】:Function call on left hand side of the assignment must return Variant or Object, finding common values in two arrays赋值左侧的函数调用必须返回 Variant 或 Object,在两个数组中查找公共值
【发布时间】:2013-04-15 22:41:14
【问题描述】:

我有两个数组,我正在尝试提取其中的公共值,函数 findUniques 应该返回由逗号连接并分隔的字符串(它们是名称)。我想我已经很接近了,但我找不到问题所在。第 10 行出现错误

Function findUniques(astrArray1() As String, astrArray2() As String) As String

    Dim blnMP5 As Boolean
    blnMP5 = False
    Dim counter1 As Long
    Dim counter2 As Long

    For counter1 = LBound(astrArray1) To UBound(astrArray1)
        For counter2 = LBound(astrArray1) To UBound(astrArray2)
            If astrArray1(counter1) = astrArray2(counter2) Then
                blnMP5 = False
                If blnMP5 = True Then
                    findUniques() = findUniques & "," & "astrArray1()"
                End If
            End If
        Next counter2
    Next counter1

End Function

【问题讨论】:

    标签: arrays string vba excel for-loop


    【解决方案1】:

    你的错误在这一行:

    findUniques() = findUniques & "," & "astrArray1()"
    

    您正在尝试为函数调用分配一个值,这没有意义。

    您应该在函数的开头声明一个变量并继续添加该变量并最终返回它:

    Function findUniques(astrArray1() As String, astrArray2() As String) As String
    
        Dim blnMP5 As Boolean
        blnMP5 = False    
        Dim counter1 As Long
        Dim counter2 As Long  
        Dim uniquesString as String = ""
    
        For counter1 = LBound(astrArray1) To UBound(astrArray1)
            For counter2 = LBound(astrArray1) To UBound(astrArray2)
                If astrArray1(counter1) = astrArray2(counter2) Then
                   blnMP5 = False
                   If blnMP5 = True Then
                       uniquesString = uniquesString & "," & "astrArray1()"
                   End If
                 End If
            Next counter2
         Next counter1
    
    End Function
    

    【讨论】:

      【解决方案2】:

      声明一个变量来保存你正在构建的字符串

          Dim tempString as string
      

      并在第 10 行添加此内容

          tempString = tempString & "," &  astrArray1(counter1)
      

      最后

          findUniques = tempString 
      End function
      

      【讨论】:

      • 完美!感谢您的帮助
      • Kenneth 的回答中可能已经确定了问题的原因。虽然目前的答案解决了 OP 的问题,但很可能是由于删除了导致错误的行。本说明旨在说明不必强制使用辅助字符串变量来解决问题。
      猜你喜欢
      • 1970-01-01
      • 2018-12-23
      • 2014-11-15
      • 1970-01-01
      • 1970-01-01
      • 2012-06-29
      • 1970-01-01
      • 2012-07-06
      • 1970-01-01
      相关资源
      最近更新 更多