代码之家  ›  专栏  ›  技术社区  ›  Ike

如何在不同的项目中共享通用LAMBDA功能?

  •  1
  • Ike  · 技术社区  · 4 年前

    给定一个通用LAMBDA UNION函数,如下所示: https://stackoverflow.com/a/69861437/16578424 :

    在几个项目中重用它的最佳方法是什么?

    0 回复  |  直到 4 年前
        1
  •  2
  •   T.M.    4 年前

    我在某个地方读到开发人员正在研究一种共享Lambda的方法,但我还没有看到任何东西。同时,将Lambda从工作簿A共享到工作簿B非常简单,只需将任何工作表(甚至是空白的)从工作簿A复制到工作簿B(然后根据需要删除它)。

    有一个令人讨厌的缺点——如果lambda已经存在于B中,Excel会添加具有相同名称的A版本,但会将范围限制在复制的工作表上。这意味着它将仅应用于复制的工作表,而其他工作表将继续使用原始lambda。(如果随后删除复制的工作表,则受范围限制的lambda将随之消失)。

    这意味着,如果你想增强或更正现有的lambda,复制一个工作表是不行的。

    Sub CopyLambdas()
        Dim wb As Workbook, n, List
        'make a concatenated list of lambdas in this workbook
        List = "|"                                   'delimiter is |
        For Each n In ThisWorkbook.Names
            If InStr(1, n.value, "lambda", vbTextCompare) > 0 Then
                List = List & n.Name & "|"
            End If
        Next n
           
        'process all open workbooks (except this one of course)
        For Each wb In Workbooks
            If Not wb Is ThisWorkbook Then
                With wb
                    For Each n In .Names             'look for lambdas
                        If InStr(1, n.value, "lambda", vbTextCompare) > 0 Then
                            'if this lambda has a name that's in our list, delete it
                            If InStr(1, "|" & n.Name & "|", n.Name, vbTextCompare) > 0 Then n.Delete
                        End If
                    Next n
                    ThisWorkbook.Sheets("Lambdas").Copy After:=.Sheets(.Sheets.Count)
                End With
            End If
        Next wb
    End Sub
    
    推荐文章