如何在不同的项目中共享通用的 LAMBDA 函数?
How to share generic LAMBDA-functions over different projects?
给定一个像这样的通用 LAMBDA-UNION 函数::
在多个项目中重用它的最佳方法是什么?
我在某处读到开发人员正在研究一种共享 lambda 的方法,但我还没有看到任何东西。与此同时,将工作簿 A 中的 lambda 表达式共享到工作簿 B 就像将任何 sheet(甚至是空白)从工作簿 A 复制到 B(然后根据需要将其删除)一样简单。
有一个严重的缺点 - 如果 lambda 已经存在于 B 中,Excel 添加 A 的同名版本,但将范围限制为复制的 sheet。这意味着它将仅适用于复制的 sheet,而其他 sheet 将继续使用原始 lambda。 (如果您随后删除复制的 sheet,范围受限的 lambda 将随之消失)。
这意味着如果您想增强或更正现有的 lambda,复制 sheet 是行不通的。所以我在下面编写了代码来做到这一点。
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
给定一个像这样的通用 LAMBDA-UNION 函数:
在多个项目中重用它的最佳方法是什么?
我在某处读到开发人员正在研究一种共享 lambda 的方法,但我还没有看到任何东西。与此同时,将工作簿 A 中的 lambda 表达式共享到工作簿 B 就像将任何 sheet(甚至是空白)从工作簿 A 复制到 B(然后根据需要将其删除)一样简单。
有一个严重的缺点 - 如果 lambda 已经存在于 B 中,Excel 添加 A 的同名版本,但将范围限制为复制的 sheet。这意味着它将仅适用于复制的 sheet,而其他 sheet 将继续使用原始 lambda。 (如果您随后删除复制的 sheet,范围受限的 lambda 将随之消失)。
这意味着如果您想增强或更正现有的 lambda,复制 sheet 是行不通的。所以我在下面编写了代码来做到这一点。
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