Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 使用宏创建新函数LookUpConcat,但它崩溃_Vba_Excel - Fatal编程技术网

Vba 使用宏创建新函数LookUpConcat,但它崩溃

Vba 使用宏创建新函数LookUpConcat,但它崩溃,vba,excel,Vba,Excel,我需要将单元格中的文本合并到一个单元格中。我发现这个宏是前一段时间写的,这可能是我的问题,它在excel中创建了一个名为LookUpConcat的新函数。第一次将其复制到VBA中并创建公式=LookUpConcat$B$2时,用法$AA$2:$AA$5000,$AG$2:$AG$5000,看起来效果不错。然后它开始崩溃,给了我一个名字错误,所以我重新开始。现在它说它在开头的每个=符号处都有一个编译错误。字符串=,布尔值=真 Function LookUpConcat(ByVal SearchSt

我需要将单元格中的文本合并到一个单元格中。我发现这个宏是前一段时间写的,这可能是我的问题,它在excel中创建了一个名为LookUpConcat的新函数。第一次将其复制到VBA中并创建公式=LookUpConcat$B$2时,用法$AA$2:$AA$5000,$AG$2:$AG$5000,看起来效果不错。然后它开始崩溃,给了我一个名字错误,所以我重新开始。现在它说它在开头的每个=符号处都有一个编译错误。字符串=,布尔值=真

Function LookUpConcat(ByVal SearchString As String, SearchRange As Range, ReturnRange As Range, _
                       Delimiter As String = " " , MatchWhole As Boolean = True, _
                       UniqueOnly As Boolean = False,  MatchCase As Boolean = False)

  Dim X As Long, CellVal As String, ReturnVal As String, Result As String

  If (SearchRange.Rows.Count > 1 And SearchRange.Columns.Count > 1) Or _
     (ReturnRange.Rows.Count > 1 And ReturnRange.Columns.Count > 1) Then
    LookUpConcat = CVErr(xlErrRef)
  Else
    If Not MatchCase Then SearchString = UCase(SearchString)
    For X = 1 To SearchRange.Count
      If MatchCase Then
        CellVal = SearchRange(X).Value
      Else
        CellVal = UCase(SearchRange(X).Value)
      End If
      ReturnVal = ReturnRange(X).Value
      If MatchWhole And CellVal = SearchString Then
        If UniqueOnly And InStr(Result & Delimiter, Delimiter & ReturnVal & Delimiter) > 0 Then     GoTo Continue
        Result = Result & Delimiter & ReturnVal
      ElseIf Not MatchWhole And CellVal Like "*" & SearchString & "*" Then
        If UniqueOnly And InStr(Result & Delimiter, Delimiter & ReturnVal & Delimiter) > 0 Then     GoTo Continue
        Result = Result & Delimiter & ReturnVal
      End If
Continue:
    Next

    LookUpConcat = Mid(Result, Len(Delimiter) + 1)

您引用的等号指定了这些参数的默认值,以防您不向该变量的函数传递任何内容。Excel不希望您在未明确声明这些参数为可选参数的情况下指定默认值。更改以下行:

Function LookUpConcat(ByVal SearchString As String, SearchRange As Range, ReturnRange As Range, _
                   Delimiter As String = " " , MatchWhole As Boolean = True, _
                   UniqueOnly As Boolean = False,  MatchCase As Boolean = False)
致:


我可以假设你有一个End,如果在这个代码后面跟一个End函数吗??在这些更改之后,它会在我的机器上编译。

如果您提供默认参数值,那么我认为您还需要可选关键字whoa。备份并清楚地解释您要做的事情。如果您只想连接一个范围,那么有更简单的UDF浮动。如果你需要做更复杂的事情,可以通过编辑你的文章来解释。当你写的时候,我需要将单元格中的文本合并到一个单元格中,如果只有几个单元格,甚至可能不需要自定义项。如果是一个连续区域中的多个单元格,则可以对区域中的每个单元格执行简单的操作:Concat=Concat&Cell:Next Cell。在工作簿的工作表中,我有公式=lookupconcat要查找什么,在哪里查找,返回此项。它返回的项目可以是无、一或多。如果有很多,他们是分开的。这些项目是文本。在查找项更改的情况下,公式将从工作表中下拉。所以知道了这一点,你的建议会起作用,并使这个宏运行得更快。谢谢你的工作,一旦我看到罗恩·罗森菲尔德在说什么,我会标记这个答案。End If和End函数也放错了区域。更正了。
Function LookUpConcat(ByVal SearchString As String, SearchRange As Range, ReturnRang As Range, _
                   Optional Delimiter As String = " ", Optional MatchWhole As Boolean = True, _
                   Optional UniqueOnly As Boolean = False, Optional MatchCase As Boolean = False)