【问题标题】:Function accessing cell range访问单元格范围的函数
【发布时间】:2015-10-10 21:12:19
【问题描述】:

我不知道如何将单元格区域与函数一起使用。

我搜索了一些示例,但徒劳无功。

我写了以下测试。我在两个“for”行上都收到“Object variable not set”错误(一个没有“RangeAddress”,第二个有它,因为我不确定语法是否正确):

function CHECKBZRANGE(cellRange) as integer
    dim nCol as integer
    dim nLine as integer
    dim i as integer

    for nCol = cellRange.StartColumn to cellRange.EndColumn
        for nLine = cellRange.RangeAddress.StartRow to cellRange.RangeAddress.EndRow
            i = i + 1      ' placeholder for some computation
        next nLine
    next nCol
    checkBZ_range = i
end function

这个函数被一个像=CHECKBZRANGE(A6:C9)这样的单元格调用

有人可以解释如何使用参数传递的单元格范围吗?

【问题讨论】:

    标签: libreoffice-calc libreoffice-basic


    【解决方案1】:

    使用 Calc 电子表格,无法将 CellRange 对象作为参数移交给用户定义的函数。如果您将单元格区域作为参数,那么这将始终是一个变体数组。所以有两种可能。

    您需要函数中的单元格值,然后您可以获取变量数组并使用它:

    public function CHECKBZRANGE(vCellRangeValues as variant) as integer
    
        dim i as integer
        dim vCellValue as variant
    
        if not isarray(vCellRangeValues) then
            vCellValue = vCellRangeValues
            msgbox vCellValue
            i = i + 1
            CHECKBZRANGE = i
            exit function
        end if
    
        for each vCellValue in vCellRangeValues
            msgbox vCellValue
            i = i + 1
        next
    
        CHECKBZRANGE = i
    end function
    

    可用作:=CHECKBZRANGE(A6:C9)

    或者您确实需要单元格范围对象,那么您必须将其位置作为参数:

    public function CHECKBZRANGE2(lcol1 as long, lrow1 as long, lcol2 as long, lrow2 as long ) as integer
    
        dim i as integer
        dim oCellRange as object
        dim lRow as long
        dim lCol as long
        dim oCell as object
    
        oCellRange = ThisComponent.CurrentController.ActiveSheet.getCellRangeByPosition(lcol1-1,lrow1-1,lcol2-1,lrow2-1)
    
        for lCol = 0 to oCellRange.Columns.Count -1
         for lRow = 0 to oCellRange.Rows.Count -1
            oCell = oCellRange.getCellByPosition(lCol, lRow)
            msgbox oCell.AbsoluteName
            i = i + 1
         next
        next
    
        CHECKBZRANGE2 = i
    end function
    

    可用作:=CHECKBZRANGE2(COLUMN(A6);ROW(A6);COLUMN(C9);ROW(C9))

    提示:仅当 A6C9 发生更改时才会重新计算。

    【讨论】:

      【解决方案2】:

      是的。有可能的!只需激活对 VBA 的兼容性。

      Option VBASupport 1
      
      Option Compatible
      
      Function Addressing(R As Range)
      
      Addressing = R.Address
      
      End Function
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-14
        • 1970-01-01
        • 1970-01-01
        • 2021-10-16
        • 2022-01-22
        • 1970-01-01
        • 2016-02-29
        • 2016-04-04
        相关资源
        最近更新 更多