将宏传输到 UDF

Posted

技术标签:

【中文标题】将宏传输到 UDF【英文标题】:Transfer macro to UDF 【发布时间】:2022-01-19 17:20:02 【问题描述】:

我想将下面的宏转移到 UDF,但我不知道如何。

我想要一个 udf,我在其中选择 Findstring 并将其返回到放置 udf 的单元格中。

有人可以帮我吗?

Sub Find_pipe()
    Dim Findstring As String
    Dim Location As String
    Dim Rng As Range
    
    Sub Find_First()
    Dim Findstring As String
    Dim Rng As Range
    Findstring = InputBox("vul naam van leiding in")
    
    If Trim(Findstring) <> "" Then
        With Sheets("scenario 1V2").Range("A1:BP150")
            Set Rng = .Find(What:=Findstring, _
                            After:=.Cells(.Cells.Count), _
                            LookIn:=xlValues, _
                            LookAt:=xlWhole, _
                            SearchOrder:=xlByRows, _
                            SearchDirection:=xlNext, _
                            MatchCase:=False)
            If Not Rng Is Nothing Then
                Application.Goto Rng.Offset(1), True
                Application.Goto ThisWorkbook.Worksheets("D en L berekening").Range("A1"), True
                ThisWorkbook.Worksheets("D en L berekening").Range("U10").Value = Rng.Offset(1).Value
            Else
                MsgBox "Nothing found"
            End If
        End With
    End If
End Sub

【问题讨论】:

【参考方案1】:

试试这个:

Function FindPipe(Findstring As String)
    Application.Volatile 'You need this if your UDF needs to update after changes in
                         '   the search range
    Dim f As Range
    If Trim(Findstring) <> "" Then
        With ThisWorkbook.Sheets("scenario 1V2").Range("A1:BP150")
            Set f = .Find(What:=Findstring, _
                    After:=.Cells(.Cells.Count), _
                    LookIn:=xlValues, _
                    LookAt:=xlWhole, _
                    SearchOrder:=xlByRows, _
                    SearchDirection:=xlNext, _
                    MatchCase:=False)
        End With
        If Not f Is Nothing Then
            FindPipe = f.Offset(1).Value
        Else
            FindPipe = "Not found"
        End If
    Else
        FindPipe = ""
    End If
End Function

请注意,要搜索的范围在 UDF 中是硬编码的,因此如果搜索范围更新,Excel 不知道要重新计算您的 UDF。我添加了 Application.Volatile 来解决这个问题,但如果您有很多指向该 UDF 的公式,它可能会减慢您的工作簿。

【讨论】:

以上是关于将宏传输到 UDF的主要内容,如果未能解决你的问题,请参考以下文章

在pyspark中使用pandas udf/apache Arrow

Pig如何实例化UDF对象

Pig 中的 Udfs 共享上下文

为啥不能在 UDF 中访问数据框? [Apache Spark Scala] [重复]

不要使用 WinSCP 将整个本地文件夹传输到远程目录,而只传输其中的文件

如何传输文件到linux服务器?