如何在 VBA 的另一个函数中调用我在 VBA 中创建的函数?

Posted

技术标签:

【中文标题】如何在 VBA 的另一个函数中调用我在 VBA 中创建的函数?【英文标题】:how to call a function I created in VBA in onther function in VBA? 【发布时间】:2019-08-21 12:43:30 【问题描述】:

我在 VBA 中创建了一个函数,我想在我在 VBA 中创建的另一个函数中调用它。这样做的正确语法是什么?

这是我要调用的函数:

Function AlreadySigned()
Dim i As Integer
Dim j As Long
j = ActiveCell.Row - 1
Dim tmp As String
tmp = ActiveCell.Value
For i = 3 To j
    If Cells(i, 2).Value = tmp Then
        ActiveCell.Interior.ColorIndex = 3
    End If
Next i
End Function

在这个函数中:

Function AlreadyRegisterLoop()
Dim i As Integer
Dim j As Integer
j = Cells(Rows.Count, 1).End(xlUp).Row
For i = 3 To j
    Cells(i, 2).AlreadySigned()
Next i
End Function

但在第 6 行有一个eror: syntax eror

【问题讨论】:

您到底想达到什么目的?我问的原因是因为我认为在这种情况下你不需要在函数内部调用函数......我感觉你可能不知道(无意冒犯)Procedure 和 @987654325 是什么@ 确实.. 所以请让我们知道您到底想达到什么目的... 【参考方案1】:

不完全确定您要做什么,但这不是调用函数的方式。

据我了解,我认为以下内容对您有用。

您应该传递一个 Range 对象并在函数中使用该 Range 对象而不是 Activecell

Function AlreadySigned(rn As Range)
Dim i As Integer
Dim j As Long
j = rn.row - 1
Dim tmp As String
tmp = rn.Value
For i = 3 To j
    If ActiveSheet.Cells(i, 2).Value = tmp Then
        rn.Interior.ColorIndex = 3
    End If
Next i
End Function


Function AlreadyRegisterLoop()
Dim i As Integer
Dim j As Integer
j = ActiveSheet.Cells(Rows.count, 1).End(xlUp).row
For i = 3 To j
    Call AlreadySigned(ActiveSheet.Cells(i, 2))
Next i
End Function

演示:

【讨论】:

还有一个错误:“类型不匹配” 类型不匹配@Mikku @NoaBenNathan .. 我已将工作表引用更改为活动工作表。立即尝试。 可怕的不必要的Call?为什么不使用惯用的 VBA:AlreadySigned ActiveSheet.Cells(i, 2) 而不是回到 GoSub 的时代?

以上是关于如何在 VBA 的另一个函数中调用我在 VBA 中创建的函数?的主要内容,如果未能解决你的问题,请参考以下文章

从 VBA (Excel) 中的另一个函数调用一个函数

从 VBA 中的另一个子例程中抑制 MsgBox

如何在VBA函数中返回总和

如何在工作表中调用 VBA 函数?

如何用函数或VBA调用(引用)另外一个工作表的数据

Excel中的VBA如何调用Java呀?