首页 > 解决方案 > 从函数返回值到单元格

问题描述

我正在尝试从函数返回一个值,但不知道该怎么做。我想将其返回到的位置是工作表(1)上“G22:I26”的合并单元格,原始功能正在工作表(3)上完成。

Sub CountBlank()
    Dim xxEmpty As Long
    Dim LastRow As Long
      LastRow = Worksheets(3).Cells(Rows.Count, 3).End(xlUp).Row
      xxEmpty = Worksheets(3).CountBlank(Range("CY2:CY" & LastRow))
      Return xxEmpty = Worksheets(1).Cells("G22:I26") 'Syntax Error 

End Sub

标签: excelvba

解决方案


如何返回函数结果

基本上,您将结果返回给函数而不是子过程(不考虑对通过引用传递的参数的直接更改 - ByRef)。Return没有像在其他编程语言中那样返回此类函数结果的有效方法,您必须为函数本身分配一个值。

此外,您必须使用Worksheetfunction.CountBlank函数(或Application.CountBlank),CountBlank 本身不是与您尝试的工作表相关的函数或方法xxEmpty = Worksheets(3).CountBlank(…)

最终避免使用现有名称重载getBlanks()过程,因此请调用您的函数,例如,但不是CountBlank()

a) 在 VB 编辑器的即时窗口中显示结果的示例调用:

Sub Test()
    Dim LastRow As Long
    LastRow = Worksheets(3).Cells(Rows.Count, 3).End(xlUp).Row
    Debug.Print getBlanks(Worksheets(3).Range("CY2:CY" & LastRow)) & " blank rows counted"
End Sub

Function getBlanks(rng As Range) As Long
' Help:
'      Return xxEmpty = Worksheets(1).Cells("G22:I26") 'Syntax Error
     getBlanks = WorksheetFunction.CountBlank(rng)
End Function

如果要将函数结果直接返回到单元格,则可以只输入函数名称,选择精确范围作为参数:

=getBlanks(CY2:CY4711)

或者,如果您只想计算从第 2 行到最后一个条目的空白,则必须稍微修改该函数。


推荐阅读